【发布时间】:2014-06-21 04:48:56
【问题描述】:
我需要支持以下签名:
使用从 Google Developers Console 获得的私钥,使用 SHA256withRSA(也称为带有 SHA-256 哈希函数的 RSASSA-PKCS1-V1_5-SIGN)对输入的 UTF-8 表示进行签名。输出将是一个字节数组。
以下代码失败,“指定的算法无效”。这是.NET的限制吗?这是我的代码的 sn-p:
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 方法来努力让 something 工作(仍然不工作)
我不确定这是否正确,不幸的是,我从 Rest 服务得到的响应总是相同的“无效授权”,很难说。
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);
}
【问题讨论】:
-
您有什么理由不使用 Google dot net 客户端库?会让事情变得更轻松。
-
是的,我有兴趣学习 Google RESTful Api 而不是学习客户端库。服务帐户的文档似乎很简单,只是由于某种原因无法正常工作:|我在此处包含生成签名 JWT 的代码..
标签: asp.net oauth cryptography oauth-2.0 google-oauth