Найти в Дзене

invalid_token - The signature key was not found. ASP.NET Core 8, Minimal API

Собственно, в процессе написания автотестов с WebApplicationFactory наткнулся на такую ошибку (см. заголовок). Для тестирования вызовов с авторизацией использовал собственную генерацию токенов JWT: public static class MockJwtTokens
{
public const string StaticIssuer = "MockIssuer"; public static string Issuer { get; } = StaticIssuer; //Guid.NewGuid().ToString();
// Random issuer public static SecurityKey SecurityKey { get; } static MockJwtTokens()
{
var key = new byte[32]; using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(key);
} SecurityKey = new SymmetricSecurityKey(key) { KeyId = Guid.NewGuid().ToString()
};
} public static string GenerateJwtToken(IEnumerable<Claim> claims)
{
var credentials = new SigningCredentials(SecurityKey, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(
issuer: Issuer,
audience: "account", // Match your API's audience
claims: claims,

Собственно, в процессе написания автотестов с WebApplicationFactory наткнулся на такую ошибку (см. заголовок). Для тестирования вызовов с авторизацией использовал собственную генерацию токенов JWT:

public static class MockJwtTokens
{
public const string StaticIssuer = "MockIssuer";
public static string Issuer { get; } = StaticIssuer; //Guid.NewGuid().ToString();
// Random issuer
public static SecurityKey SecurityKey { get; }
static MockJwtTokens()
{
var key = new byte[32];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(key);
}
SecurityKey = new SymmetricSecurityKey(key) { KeyId = Guid.NewGuid().ToString()
};
}
public static string GenerateJwtToken(IEnumerable<Claim> claims)
{
var credentials = new SigningCredentials(SecurityKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: Issuer,
audience: "account", // Match your API's audience
claims: claims,
expires: DateTime.UtcNow.AddMinutes(60),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}

TokenValidationParameters.ValidateIssuerSigningKey = false - не помогло.

А вот что помогло - так это: TokenValidationParameters.IssuerSigningKey = MockJwtTokens.SecurityKey. То есть, передача именно того ключа, которым подписан токен.

Загадочно, но проблема возникает только для Minimal API. При использовании контроллеров все работает и без этой опции.