将JwtBearerOptions注入控制器

时间:2019-07-09 11:44:20

标签: asp.net-core dependency-injection .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
    };
});

在我的一个控制器中,我想获得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);

1 个答案:

答案 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