【发布时间】:2020-12-23 21:28:04
【问题描述】:
我正在使用 NuGet 包 System.IdentityModel.Tokens.Jwt 版本 4.0.4.403061554。
我有一个验证 JWT 的实现,它适用于算法 HS256。
但是,如果我将我的 JWT 更改为使用算法 HS512 生成,那么我会在验证期间收到错误消息。
System.IdentityModel.SignatureVerificationFailedException
HResult=0x80131501
Message=IDX10503: Signature validation failed. Keys tried: 'System.IdentityModel.Tokens.InMemorySymmetricSecurityKey
'.
Exceptions caught:
'System.InvalidOperationException: IDX10632: SymmetricSecurityKey.GetKeyedHashAlgorithm( 'HS512' ) threw an exception.
SymmetricSecurityKey: 'System.IdentityModel.Tokens.InMemorySymmetricSecurityKey'
SignatureAlgorithm: 'HS512', check to make sure the SignatureAlgorithm is supported.
我尝试过生成 512 位密钥,我也尝试过较小的密钥,例如 256 位密钥(适用于算法 HS256 的密钥),但没有任何效果。
我的实现是这样的:
InMemorySymmetricSecurityKey signingKey = new InMemorySymmetricSecurityKey(Encoding.UTF8.GetBytes("secretsigningkey"));
TokenValidationParameters tokenValidationParameters = new TokenValidationParameters()
{
ValidAudiences = validAudiences,
ValidIssuers = validIssuers,
IssuerSigningKey = signingKey
};
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
var claimsPrincipal = tokenHandler.ValidateToken(token, tokenValidationParameters, out SecurityToken validatedToken);
这个方法tokenHandler.ValidateToken抛出异常。
如何更改我的代码以允许 HS512(以及任何其他类型的 JWT 支持的算法)??
【问题讨论】:
标签: c# security encoding jwt identity