我想使用我自己提供的非对称密钥在.Net 4.5中生成JWT令牌,但我遇到了System.IdentityModel.Tokens.Jwt版本4.0.3的一些问题。
最好是我会创建自己的2048密钥,就像提供商允许我这样做。 RSA.Create()构造函数创建1024个键。
def set_post
@post = Post.find params[:id]
end
在许多示例中,可以将RSAParameters放入RsaSecurityKey构造函数中,但现在它只接受RSA.Create()构造函数(带有可选的字符串参数)以下代码片段来自https://stackoverflow.com/a/38233644请注意,在此示例中RSAParameters很好地进入了RsaSecurityKey构造函数,我无法使用我的版本,我只能使用RSA.Create,它接缝。
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider(2048))
{
var publicPrivate = provider.ToXmlString(true);
var publicKeyOnly = provider.ToXmlString(false);
var stuff = provider.ExportParameters(true);
signingCredentials = new SigningCredentials(new RsaSecurityKey(RSA.Create()), SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest); //no idea how to pull the key out of here.
}
答案 0 :(得分:1)
这就是我所做的。首先,我运行调试器,第一次使用新RSACryptoServiceProvider(2048)的ToXmlString(布尔)方法从新提供程序捕获XML。然后我制作了一个XML文件进行存储。 (在这个例子中,我只使用我的硬盘进行存储,显然不是生产代码。)
现在我有了RSAPrameters,我有“我自己提供的”密钥,它可以来自任何安全存储 - 对于这个答案无关紧要。
XmlDocument publicXmlParam = new XmlDocument();
publicXmlParam.Load("C:\\rsapublicprivate.xml");
// Here I "utilize my own 2048 keys"
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(2048);
//This was the trick, we pass the RSA parameters as XML into the provider.
provider.FromXmlString(publicXmlParam.OuterXml);
// Then we use the provider in the constructor of the RsaSecurityKey
var key = new RsaSecurityKey(provider);
signingCredentials =
new SigningCredentials(
key,
SecurityAlgorithms.RsaSha256Signature,
SecurityAlgorithms.Sha256Digest);
现在我拥有签署JWT令牌所需的签名凭据。