gpt4 book ai didi

c# - IDX10632 : SymmetricSecurityKey. GetKeyedHashAlgorithm( 'HS512') 在使用 HS512 ALGO 验证 JWT 时抛出异常

转载 作者:行者123 更新时间:2023-12-03 23:04:08 26 4
gpt4 key购买 nike

我正在使用 NuGet 包 System.IdentityModel.Tokens.Jwt 版本 4.0.4.403061554。
我有一个验证 JWT 的实现,它适用于算法 HS256。
但是,如果我将 JWT 更改为使用 algo 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 位 key ,也尝试过较小的 key ,例如 256 位 key (与算法 HS256 一起使用的 key ),但没有任何效果。
我的实现是这样的:
                    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 支持的算法)??

最佳答案

  • 根据这个MSDN文档,SecurityAlgorithms不支持验证 HS512 算法。
  • 安装 jwt 解码/验证库:JWT项目地址:https://github.com/jwt-dotnet/jwt

  • PM> Install-Package JWT -Version 7.2.1
  • 使用 JWT官方文档并使用HS512算法修改您的示例代码,它将是这样的:

  • try
    {
    IJsonSerializer serializer = new JsonNetSerializer();
    var provider = new UtcDateTimeProvider();
    IJwtValidator validator = new JwtValidator(serializer, provider);
    IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
    IJwtAlgorithm algorithm = new HMACSHA512Algorithm();
    IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);

    json = decoder.Decode(token, "secretsigningkey", verify: true);
    Console.WriteLine(json);
    }
    catch (TokenExpiredException)
    {
    Console.WriteLine("Token has expired");
    }
    catch (SignatureVerificationException)
    {
    Console.WriteLine("Token has invalid signature");
    }
    catch (Exception ex)
    {
    Console.WriteLine("Other exception: " + ex.Message);
    }

    关于c# - IDX10632 : SymmetricSecurityKey. GetKeyedHashAlgorithm( 'HS512') 在使用 HS512 ALGO 验证 JWT 时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63744015/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com