我已经设置了一个身份验证方案。我正在尝试从启动类传递选项。
在我的启动中,我有:
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功能不设置该值?
根据https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options,我需要使用Configure
函数设置选项。
services.Configure<TokenAuthenticationOptions>(o => {
o.AuthQueryKey = "jwt";
});
仍然很奇怪,尽管我无法弄清楚AddScheme
功能内部的LAMDA甚至是指的目的。