jwt - OpenIddict 3 验证选项
问题描述
在 OpenIddict 3.1.1 中,我想了解在验证令牌以将 NameClaimType 映射到 Subject 声明时修改 TokenValidationParameters 的推荐方法是什么。
我正在从 OpenIddict 版本 2 升级到 3.1.1。我在我们的解决方案中配置了使用 OpenIddict 版本 2 来使用 JWT 令牌的东西,如 OpenIddict 示例项目中所示。该项目的代码如下所示:
// If you prefer using JWT, don't forget to disable the automatic
// JWT -> WS-Federation claims mapping used by the JWT middleware:
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = "http://localhost:52698/",
Audience = "resource_server",
RequireHttpsMetadata = false,
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = OpenIdConnectConstants.Claims.Subject,
RoleClaimType = OpenIdConnectConstants.Claims.Role
}
});
注意线
NameClaimType = OpenIdConnectConstants.Claims.Subject,
现在在我所有的 .NET 控制器中,当我引用
User.Identity.Name
该值时,子声明映射到我的身份用户 ID 值,这是我想要的行为。
我知道 JWT 令牌支持现在在 Open Iddict 3.1.1 中配置为默认设置,迁移指南建议升级到 OpenIddict 验证处理程序。按照迁移指南升级到版本 3.1.1 后,我的
User.Identity.Name
值现在映射到我的用户名,而不是 sub 声明。(这破坏了我的很多服务器端功能)
OpenIddict 3.1.1 中修改 TokenValidationParameters 以将 NameClaimType 映射到子声明的推荐方法是什么?
更新
我一直无法弄清楚如何配置它。查看源代码,这似乎是不可配置的-在 OpenIddictValidationOptions.cs 类中,我看到了以下代码:
{
AuthenticationType=TokenValidationParameters.DefaultAuthenticationType,
ClockSkew = TimeSpan.Zero,
NameClaimType = Claims.Name,
RoleClaimType = Claims.Role,
NameClaimType 似乎不是可覆盖的 - 这是它被分配给“名称”声明的地方。
因此,我将更新我的控制器端点以以不同的方式获取 UserId 子声明。
我想我的问题是,为什么在 OpenIddict 示例中必须使用“sub”声明验证 JWT 令牌,而在新版本中它使用“name”声明?
解决方案
推荐阅读
- android - 当我重新启动手机时,AccessibilityService 没有响应
- excel - 为数组公式 if 语句的每一行匹配条件运行用户定义的函数
- php - 父子对象之间的关系
- ios - 如何限制在 Swift 的 Algolia 索引中可以搜索哪些字段?
- mysql - 在案例语句中,我可以告诉它我想查看该值是否为“Y”或 NULL 的其他条件?
- ruby-on-rails - 为 HTTP Verb PATCH 生成的实际 URL Rails 是什么?
- html - form.valid on Angular gets false after the 1st submit
- rest - How to use REST API's
- amazon-web-services - 调用一次 lambda 函数,执行两次
- alexa - 如何修复 Alexa 技能中的“AskSdk.GenericRequestDispatcher 错误:无法找到合适的请求处理程序”错误