自定义身份验证方案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",最后是HandleAuthenticateAsyncAuthQueryKey为什么不获取" JWT"值?

我需要使用选项的原因是因为我在两个具有不同属性的项目中重复了身份验证。我的下一个度假胜地是将另一个单身人士用于选项,但是为什么此LAMDA功能不设置该值?

根据https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options,我需要使用Configure函数设置选项。

services.Configure<TokenAuthenticationOptions>(o => {
    o.AuthQueryKey = "jwt";
});

仍然很奇怪,尽管我无法弄清楚AddScheme功能内部的LAMDA甚至是指的目的。

相关内容

  • 没有找到相关文章

最新更新