我需要支持以下签名:
使用SHA256withRSA(也称为带有SHA-256哈希函数的RSASSA-PKCS1-V1_5-SIGN)和从Google Developers Console获得的私钥对输入的UTF-8表示进行签名。输出将是一个字节数组。
以下代码失败,并且"指定了无效的算法"。这是.NET的限制吗?以下是我的代码片段:
var rsa2 = new RSAPKCS1SignatureFormatter(rsa);
rsa2.SetHashAlgorithm("SHA256");
bytes = rsa2.CreateSignature(bytes);
上述要求是计算服务器的签名到Google API的服务器应用程序。
https://developers.google.com/accounts/docs/OAuth2ServiceAccount#computingsignature
感谢您的帮助。
卡尔..
以下是签署JWT的代码。我已经删除了使用RSAPKC1SingatureFormatter类并使用另一个HASHCompute方法来努力使某些东西起作用(仍然无效)
我不确定这是否正确,不幸的是我来自Rest服务的回复总是相同的" Invalid Grant"很难说。
public string Generate(string HeadJWT, string ContentJWT, X509Certificate2 certificate)
{
var bytes = Utility.getBytes(HeadJWT);
var base64Head = Utility.Base64UrlEncode(bytes);
// base64 Url Encode Payload (Json Content)
bytes = Utility.getBytes(ContentJWT);
var base64Payload = Utility.Base64UrlEncode(bytes);
var secureInputValue = String.Format("{0}.{1}", base64Head, base64Payload);
bytes = Stub.Jwt.Utility.getBytes(secureInputValue);
bytes = Stub.Jwt.Utility.ComputeHMACSha265(bytes, certificate.PublicKey.EncodedKeyValue.RawData);
_signature = Stub.Jwt.Utility.Base64UrlEncode(bytes);
return String.Format("{0}.{1}.{2}", base64Head, base64Payload, _signature);
}