我怎样(可以吗?)使用X509SecurityKey进行Asp.Net Core JWT验证?
我目前的代码大致是:
X509SecurityKey signingKey = null;
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadOnly);
var v = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
var v1 = v.Find(X509FindType.FindBySubjectDistinguishedName, strCertName, true);
signingKey = new X509SecurityKey(v1[0]);
}
以及稍后的签名凭证......
new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256)
这会导致异常:
SignatureAlgorithm:' HS256',SecurityKey:' Microsoft.IdentityModel.Tokens.X509SecurityKey' 不受支持。 在Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateProvider(SecurityKey key,String algorithm,Boolean willCreateSignatures) 在Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key,String algorithm)
我尝试了一些算法,但它似乎不适用于任何算法?
答案 0 :(得分:6)
我尝试了一些算法,但它似乎不适用于任何算法?
您尝试使用非对称密钥(嵌入在X.509证书中)和HMAC算法(我们经常滥用调用"对称签名算法" ):这不行。
假设您的证书是RSA证书,您应该可以使用SecurityAlgorithms.RsaSha256
。
var credentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha256)