Проверка access_token, когда сервер идентификации отключен - PullRequest
0 голосов
/ 04 июня 2019

У меня есть настройка IdentityServer4. Насколько я понимаю, мой webapi, который нуждается в защите, получает открытый ключ от IdentityServer4 и использует этот ключ для проверки ключа подписи JWT. Я не могу найти какую-либо документацию, которая описывает, как часто запрашивается открытый ключ. Это запрашивается при каждой проверке? Кэшируется ли он на веб-API, который нуждается в проверке?

Могу ли я применить какое-либо кэширование открытого ключа или это происходит автоматически?

Для веб-API я использую стандартную идентификацию .NET Core для проверки правильности предъявителя:

        services.AddAuthentication("JWT")
                .AddJwtBearer("JWT", options =>
                {
                    options.Authority = "https://identityserver4.tld";
                    options.RequireHttpsMetadata = false;
                    options.Audience = "webapi";
                });

Кажется, что я могу использовать этот код отсюда: https://devblogs.microsoft.com/aspnet/jwt-validation-and-authorization-in-asp-net-core/:

var tokenValidationParameters = new TokenValidationParameters
{
    ValidateIssuerSigningKey = true,
    ValidateIssuer = true,
    ValidIssuer = "http://localhost:5000/",
    IssuerSigningKey = new X509SecurityKey(new X509Certificate2(certLocation)),
};

app.UseJwtBearerAuthentication(new JwtBearerOptions()
{
    Audience = "http://localhost:5001/", 
    AutomaticAuthenticate = true,
    TokenValidationParameters = tokenValidationParameters
});

Это даст мне открытый ключ локально, но все же: как часто выбирается открытый ключ, когда не используются вышеуказанные tokenValidationParameters?

1 Ответ

1 голос
/ 04 июня 2019

Промежуточное программное обеспечение аутентификации по умолчанию в ASP.Net Core вызовет конечную точку обнаружения на вашем options.Authority uri и будет кешировать открытый ключ (а также другую информацию о конфигурации), указанную поставщиком удостоверений. Кэширование в настоящее время происходит, когда аутентификация происходит впервые. В прошлый раз, когда я проверял, в кеше памяти использовалась конфигурация провайдера идентификации (например, открытый ключ).

Похоже, что в настоящее время это происходит в PostConfigure(...) функции здесь .

Очевидно, что теоретически вы можете подключить собственное управление конфигурацией провайдера идентификации, предоставив реализацию интерфейса ниже в вашем JwtBearerOptions в соответствии с исходным кодом .

    /// <summary>
    /// Responsible for retrieving, caching, and refreshing the configuration from metadata.
    /// If not provided, then one will be created using the MetadataAddress and Backchannel properties.
    /// </summary>
    public IConfigurationManager<OpenIdConnectConfiguration> ConfigurationManager { get; set; }

Реализация по умолчанию использует OpenIdConnectConfigurationRetriever, для которого вы можете найти исходный код здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...