У меня есть два разных токена аутентификации jwt от двух разных провайдеров, которые принимает мой API, настроив их так:
services.AddAuthentication()
.AddJwtBearer("auth provider1", options =>
{
options.Audience = authSettings.Audience1;
options.Authority = authSettings.Authority1;
options.ClaimsIssuer = authSettings.Issuer1;
})
.AddJwtBearer("auth provider2", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ClockSkew = TimeSpan.FromMinutes(5),
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authSettings.SymmetricKey)),
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true,
ValidateAudience = true,
ValidAudience = authSettings.Audience2,
ValidateIssuer = true,
ValidIssuer = authSettings.Issuer2
};
});
Эти провайдеры аутентификации имеют доступ к разным API, поэтому, когда токен доступа пытается получить доступ к API, этоя не могу выбросить 403. Я выполняю это с помощью следующей настройки политики
services.AddAuthorization(options =>
{
// Blocks auth provider 2 tokens by returning 403 because it does not have claim only present in tokens from auth provider 1
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireClaim(Constants.CLAIM_ONLY_IN_AUTH_1)
.AddAuthenticationSchemes("auth provider1", "auth provider2")
.Build();
// Accepts both auth provider tokens
options.AddPolicy("accept both auth1 and auth2 policy", new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("auth provider1", "auth provider2")
.Build());
});
Я использую следующее исключение при использовании любой из этих политик, поскольку считаю, что конвейер пытается проверить аутентификациюмаркер передан в обеих схемах аутентификации.
IDX10501: Ошибка проверки подписи.Невозможно сопоставить 'kid':
Исключение не всплывает и не завершает запросы, оно просто добавляет много шума в мою регистрацию. Кто-нибудь сталкивался с этим исключением при использовании нескольких схем аутентификации в одной политике?