JwtBearerHandler кэширует OpenIdConnectConfiguration 'навсегда' - PullRequest
0 голосов
/ 12 декабря 2018

In JwtBearerHandler OpenIdConnectConfiguration загружается только один раз и кэшируется «навсегда» (до тех пор, пока приложение не запустится снова).

Каков рекомендуемый способ ротации ключей подписи?Перезапуск приложения у меня не работает.

1 Ответ

0 голосов
/ 12 декабря 2018

Обработчики схемы зарегистрированы как переходные зависимости , поэтому _configuration внутри JwtBearerHandler фактически вообще не кэшируется.

Что делает кешируетКонфигурация - это IConfigurationManager<OpenIdConnectConfiguration>, которая используется для получения конфигурации из органа.Этот диспетчер конфигурации представляет собой Microsoft.IdentityModel.Protocols.ConfigurationManager<>, который имеет внутренний механизм обновления, который позволяет ему периодически обновлять конфигурацию.

По умолчанию этот интервал автоматического обновления равен единице.день, поэтому менеджер конфигурации будет получать конфигурацию один раз в день.Однако вы можете изменить его, чтобы он обновлялся чаще.

Для этого вы можете настроить свойство AutomaticRefreshInterval диспетчера конфигурации.Чтобы избежать необходимости создавать диспетчер конфигурации самостоятельно, вы можете добавить действие после настройки, чтобы настроить диспетчер конфигурации после его создания.Примерно так должно работать:

services.PostConfigure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
    if (options.ConfigurationManager is ConfigurationManager<OpenIdConnectConfiguration> manager)
    {
        manager.AutomaticRefreshInterval = TimeSpan.FromHours(6);
    }
});

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

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

...