在Startup.cs
中,我启用了JWT身份验证,该功能可以在我的应用程序中完美运行。
b.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, o =>
{
o.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = key,
ValidateIssuer = true,
ValidIssuer = JwtConstants.Issuer,
ValidateAudience = true,
ValidAudience = JwtConstants.Audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
在我的一个控制器中,我想获得TokenValidationParameters
配置中设置的Startup.cs
的句柄。我以为可以通过向控制器构造函数提供IOptions<JwtBearerOptions> options
并读取options.Value.TokenValidationParameters
来做到这一点,但是,当注入时,属性与Startup.cs
中设置的值不匹配。
我的最终目标是手动验证JWT令牌,如下所示。
var handler = new JwtSecurityTokenHandler();
var user = handler.ValidateToken(token, validationParameters, out var validatedToken);
答案 0 :(得分:1)
要获取在启动过程中向身份验证方案注册的选项,您必须使用IOptionsMonitor
提取命名的选项。
在您的控制器中,像这样注入
public YourController(IOptionsMonitor<JwtBearerOptions> jwtOptions, ...) { ... }
然后,当您要获取选项的实例时,可以使用与注册身份验证方案相同的名称来获取它。在您的情况下是这样的:
var yourOptions = _jwtOptions.Get(JwtBearerDefaults.AuthenticationScheme);
您可以在此处了解有关aspnet核心中选项模式的更多信息:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.2