Пользовательская схема аутентификации 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 Функция даже предназначена для.

Другие вопросы по тегам