我正在尝试使用证书中的私钥编写代码以签署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
有人知道导致此错误的原因是什么,该怎么办才能解决此问题?