Не удалось сравнить алгоритм токена JWT - PullRequest
0 голосов
/ 08 марта 2020

Я генерирую токен jwt следующим образом:

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(
          _config.GetSection("AppSettings:Token").Value));

var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);
var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(claims),
    Expires = DateTime.UtcNow.AddMinutes(1),
    SigningCredentials = creds
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);

Затем, если срок действия токена истек, я использую токен refre sh для регенерации токена доступа. Чтобы проверить токен refre sh, я пытаюсь сравнить алгоритм токена следующим образом:

var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken securityToken;
var principal = tokenHandler.ValidateToken(token, tokenValidationParameters, out securityToken);
var jwtSecurityToken = securityToken as JwtSecurityToken;
if (jwtSecurityToken == null || 
    !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha512Signature, 
                    StringComparison.InvariantCultureIgnoreCase))
       throw new SecurityTokenException("Invalid token");

return principal;

Однако jwtSecurityToken.Header.Alg.Equals возвращает false; securityToken: {{"alg": "HS512", "typ": "JWT"}. {"nameid": "368", "unique_name": "test", "nbf": 1583697978, "exp": 1583698038, "iat": 1583697978}}

alg в securityToken возвращает HS512, и я сравниваю его с HmacSha512Signature. Чего мне не хватает?

...