Я генерирую токен 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. Чего мне не хватает?