При реализации JWT в личном приложении я вижу два разных способа создания токена для возврата строки JWT. Мой вопрос: почему существует два разных способа реализации и каковы преимущества реализации одного по сравнению с другим?
Технология .NET 8
private string GenerateToken(List<Claim> claims)
{
var authSigninKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtSettings:Key"]));
var tokenDescription = new SecurityTokenDescriptor
{
Issuer = _configuration["JwtSettings:Issuer"],
Audience = _configuration["JwtSettings:Audience"],
Expires = DateTime.UtcNow.AddMinutes(1),
SigningCredentials = new SigningCredentials(authSigninKey, SecurityAlgorithms.HmacSha256),
Subject = new ClaimsIdentity(claims)
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescription);
return tokenHandler.WriteToken(token);
}
private string GenerateToken(List<Claim> claims)
{
var authSigninKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtSettings:Key"]));
var signingCred = new SigningCredentials(authSigninKey, SecurityAlgorithms.HmacSha256Signature);
var security = new JwtSecurityToken(
claims: claims,
expires: DateTime.UtcNow.AddMinutes(1),
signingCredentials: signingCred
);
string tokenString = new JwtSecurityTokenHandler().WriteToken(security);
return tokenString;
}





Пример 1: утверждения и т. д. -> tokenDescriptor -> токен безопасности -> строка токена
Пример 2: претензии и т. д. -> токен безопасности -> строка токена
Кажется, что пример 2 более прост. Но дескриптор токена предназначен для более удобного использования. Например, токен безопасности доступен только для чтения, что означает, что вы не можете изменить его после его создания. Но дескриптор позволит вам изменять свойства.
//This is allowed
tokenDescription.Subject = new ClaimsIdentity(claims);
//security token is read only. This is not allowed
security.Claims= new ClaimsIdentity(claims);
@ DonDavid12 DonDavid12 Да, ты прав. JwtSecurityToken нельзя изменить после создания.
Теоретически SecurityTokenDescriptor (пример 1) позволяет гибко изменять свойства, тогда как JwtSecurityToken (пример 2) не позволяет гибко изменять свойства. Убедиться, что я понимаю