我可以使用我的 JWT 进行身份验证,但我的名称声明在我的 ASP.NET Core 应用程序中无法识别
Posted
技术标签:
【中文标题】我可以使用我的 JWT 进行身份验证,但我的名称声明在我的 ASP.NET Core 应用程序中无法识别【英文标题】:I can Authenticate with my JWT but my Name claim is not recognised in my ASP.NET Core application 【发布时间】:2019-11-13 01:59:58 【问题描述】:我可以使用 JWT 对我的 ASP.NET Core 2.2 Web api 进行身份验证,但 Identity
的 Name
属性为空。
不过,声明就在那里。
这是被分解的 JWT:
"id": "1-A",
"name": "Pure Krome",
"email": "<snip>",
"picture": "https://<snip>",
"locale": "en-au",
"permissions": [
<snip>
],
"iss": "<snip>",
"sub": "google-oauth2|<snip>",
"aud": "<snip>",
"exp": 1597609078,
"iat": 1496325742
这是服务器所看到的:
也..它似乎“识别”了我的电子邮件声明,但是? (注意:我只是混淆了真正的电子邮件值)
所以我认为name
不是公认的声明.. 所以我尝试查看是否有一些标准规则并找到IANA has a list of reserved and custom claims。 name
是自定义声明的第一个。
我需要做一些技巧来让 ASP.NET Core 安全性将我的 name
声明识别为 NameClaimType
吗?
为什么email
声明会得到认可?
【问题讨论】:
没有阅读所有细节(现在时间不多),我记得一个较旧的案例:***.com/questions/41830898/…,这有帮助吗? 您可以通过其验证设置 AFAIK 在身份验证方案上设置 NameClaimType。现在期待不同的声明类型。 @juunas >现在期待不同的索赔类型。你有一些额外的信息来解释你的建议吗? 您可以设置为:.AddJwtBearer(o => o.TokenValidationParameters = new TokenValidationParameters NameClaimType = "name" )
。这将改变它用于填充名称的声明。
有一组从 JWT 声明到 MS 声明 here 的映射。如您所见,有一个来自email
的映射,但不是来自name
的映射,这就是为什么一个有效而另一个无效的原因。您还会看到 unique_name
映射到更详细的 name
声明版本。
【参考方案1】:
它预期的声明类型与您的声明类型不同。 你可以这样设置:
.AddJwtBearer(o => o.TokenValidationParameters = new TokenValidationParameters
NameClaimType = "name"
)
这将改变它用于填充名称的声明。
【讨论】:
以上是关于我可以使用我的 JWT 进行身份验证,但我的名称声明在我的 ASP.NET Core 应用程序中无法识别的主要内容,如果未能解决你的问题,请参考以下文章