asp.net-core - 将 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);
解决方案
要在启动期间获取您在身份验证方案中注册的选项,您必须使用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
推荐阅读
- azure - Azure IoT Central 中 IoT Edge 模块的可写属性
- python - 如何用其他值 django 模型覆盖默认值
- python - 如何在 python 3 中编译 pygame
- android - 无法在 Windows 10 中安装颤振询问权限并在授予权限时出错
- c# - MailKit MailKit.Net.Smtp.SmtpClient.OnSenderNotAccepted 错误
- azure-devops - 第 47 行,在 schemachange 中引发 ValueError("Invalid root folder: %s" % rootfolder) ValueError: Invalid root folder: /home/vsts/work/1/s/migrations
- javascript - 我写的一个扩展停止工作。有人可以帮我解决吗?
- flutter - Flutter - 在使用 Transform.rotate 旋转容器后,它的子手势检测器 ontap 方法不起作用
- python - 如何检查熊猫中的两列在逻辑上是否相同?
- rust - 在没有发送/同步特征的结构上采用 AtomicPtr