如何使用Microsoft.IdentityModel签名JWT令牌?

时间:2020-07-10 13:44:49

标签: c# jwt identity

我正在尝试使用证书中的私钥编写代码以签署JWT令牌。我一直在尝试将this StackOverflow answer(使用jose-jwt)改成使用Microsoft.IdentityModel

以下代码已检索到X509Certificate2(在下面的代码中称为certificate),因此成功生成了令牌。 (下面的有效载荷是非空的Dictionary<string, object>

var privateKey = certificate.GetRSAPrivateKey();
var tokenString = Jose.JWT.Encode(payload, privateKey, Jose.JwsAlgorithm.RS256);

但是,尝试使用Microsoft的IdentityModel进行等效的实现不起作用:

var privateKey = certificate.GetRSAPrivateKey();
var securityKey = new Microsoft.IdentityModel.Tokens.RsaSecurityKey(privateKey);
var credentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(securityKey, Microsoft.IdentityModel.Tokens.SecurityAlgorithms.RsaSha256);

var handler = new System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler();

var token = handler.CreateJwtSecurityToken(signingCredentials: credentials);

var tokenString = handler.WriteToken(token);

此代码在CreateJwtSecurityToken行中出现错误,并显示以下错误:

IDX10630: The 'Microsoft.IdentityModel.Tokens.RsaSecurityKey' for signing cannot be smaller than 'System.Int32' bits. KeySize: 'System.Int32'. Parameter name: key

有人知道导致此错误的原因是什么,该怎么办才能解决此问题?

0 个答案:

没有答案