将 JwtBearerOptions 注入控制器

Ale*_*lex 7 dependency-injection .net-core asp.net-core

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
    };
});
Run Code Online (Sandbox Code Playgroud)

在我的一个控制器中,我想获取配置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);
Run Code Online (Sandbox Code Playgroud)

Fre*_*din 9

要获取在启动期间使用身份验证方案注册的选项,您必须使用 来IOptionsMonitor提取命名选项。

在你的控制器中,像这样注入

public YourController(IOptionsMonitor<JwtBearerOptions> jwtOptions, ...) { ... }
Run Code Online (Sandbox Code Playgroud)

然后,当您想要获取选项的实例时,您可以使用与注册身份验证方案相同的名称来获取它。就像你的情况一样:

var yourOptions = _jwtOptions.Get(JwtBearerDefaults.AuthenticationScheme);
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关 aspnet core 中的选项模式的更多信息:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options ?view=aspnetcore-2.2