首页 > 解决方案 > 将 JwtBearerOptions 注入控制器

问题描述

Startup.cs我启用 JWT auth 时,它可以在我的应用程序中完美运行。

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);

标签: asp.net-coredependency-injection.net-core

解决方案


要在启动期间获取您在身份验证方案中注册的选项,您必须使用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


推荐阅读