Я генерирую токены JWT в своем API .NET8 для выдачи при входе пользователя в систему.
Логика, которая обрабатывает генерацию токена, по-видимому, может генерировать действительный токен при тестировании в jwt.io, однако непосредственно после создания токена я пытаюсь проверить его, используя те же параметры проверки, которые содержатся в моем классе program.cs. и получите следующее исключение:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidIssuerException: IDX10211: невозможно проверить эмитента. Параметр 'issuer' имеет значение null или пробел
Похоже, что декодер не может найти утверждение iss: в моих полезных данных, хотя оно определенно присутствует внутри jwt.io
Код токена –
var authConfig = new JwtConfig();
_configuration.GetSection("JwtConfig").Bind(authConfig);
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authConfig.Key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var userClaims = new List
{
new(ClaimTypes.NameIdentifier, input.Id.ToString()),
new(ClaimTypes.Name, input.Name),
new(ClaimTypes.Email, input.Email)
};
foreach (var role in input.Roles)
{
userClaims.Add(new(ClaimTypes.Role, role));
}
var tokenConfig = new JwtSecurityToken(
issuer: authConfig.Issuer,
audience: authConfig.Audience,
claims: userClaims,
expires: DateTime.UtcNow.AddMinutes(authConfig.JwtTimeoutInMinutes),
signingCredentials: credentials);
var token = new JwtSecurityTokenHandler().WriteToken(tokenConfig);
// temporary testing
var handler = new JwtSecurityTokenHandler();
var validation = new TokenValidationParameters
{
ValidIssuer = "https://localhost:7208",
ValidAudience = "https://localhost:7208",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("82551957-F31C-465F-895F-99DD9B40507C")),
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true
};
SecurityToken validatedToken;
var test1 = handler.ReadJwtToken(token);
var test = handler.ValidateToken(token, validation, out validatedToken);
Подробнее здесь: https://stackoverflow.com/questions/784 ... ed-net-8-0