Пользовательская схема аутентификации IOptionsMonitor не работает
Я создал схему аутентификации. Я пытаюсь передать параметры из класса запуска.
В моем запуске я имею:
services.AddAuthentication(TokenAuthentication.SchemeName)
.AddScheme<TokenAuthenticationOptions, TokenAuthentication>
(TokenAuthentication.SchemeName, o => {
o.AuthQueryKey = "jwt";
});
В моем классе схемы у меня есть следующий конструктор:
public TokenAuthentication(IOptionsMonitor<TokenAuthenticationOptions> options, ILoggerFactory logger,
UrlEncoder encoder, ISystemClock clock, LoginManager loginManager)
: base(options, logger, encoder, clock)
{
this.options = options;
this.loginManager = loginManager;
}
Внутри HandleAuthenticateAsync
Я пытаюсь получить доступ к таким параметрам:
var options = this.options.CurrentValue;
if (options.AuthQueryKey == null) // always null
В отладчике я обнаружил, что сначала запускается конструктор, затем o.AuthQueryKey = "jwt"
и наконец HandleAuthenticateAsync
, Почему не AuthQueryKey
получить значение "JWT"?
Причина, по которой мне нужно использовать параметры, заключается в том, что я повторно использую аутентификацию в двух проектах с разными атрибутами. Мой следующий вариант - использовать другой синглтон для опций, но почему эта функция lamda не устанавливает значение?
1 ответ
Согласно https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options, мне нужно установить параметры с помощью Configure
функция.
services.Configure<TokenAuthenticationOptions>(o => {
o.AuthQueryKey = "jwt";
});
Хотя до сих пор странно, что я не могу понять, что такое лямда внутри AddScheme
Функция даже предназначена для.