Использование нескольких схем аутентификации в политике приводит к ошибкам проверки подписи - PullRequest
0 голосов
/ 18 октября 2018

У меня есть два разных токена аутентификации 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':

Исключение не всплывает и не завершает запросы, оно просто добавляет много шума в мою регистрацию. Кто-нибудь сталкивался с этим исключением при использовании нескольких схем аутентификации в одной политике?

...