Я реализую аутентификацию в своем приложении с помощью Auth0 и JWT. Все мои имена утверждений представлены в формате верхнего регистра, но как только JwtSecurityTokenHandler преобразует мой токен в JwtSecurityToken, все они являются типами утверждений JwtSecurityToken, дающими нижний регистр.
Заявка и BuildToken
private string BuildToken(UserModel user)
{
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, user.Name),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim(JwtRegisteredClaimNames.Birthdate, user.Birthdate.ToString("yyyy-MM-dd")),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(_config["Jwt:Issuer"],
_config["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
JwtSecurityTokenHandler
var handler = new JwtSecurityTokenHandler();
var tokenS = handler.ReadToken(context.HttpContext.Request.Headers["Authorization"]) as JwtSecurityToken;
var jti = tokenS.Claims.First(claim => claim.Type == "Sub").Value; //here Sub is giving exception, but if i change it to lower case sub, working fine.





JWT чувствителен к регистру. sub претензия определяется как нижний регистр.
JwtRegisteredClaimNames.Sub не должен заставлять вас думать, что существует претензия под названием Sub. Это просто имя из используемой библиотеки, а не имя утверждения, как оно закодировано в JWT.
sub правильный, Sub не определяется.