C# 我可以通过JWT进行身份验证,但我的ASP.NET核心应用程序无法识别我的姓名声明
我可以使用JWT对我的ASP.NET Core 2.2 web api进行身份验证,但是C# 我可以通过JWT进行身份验证,但我的ASP.NET核心应用程序无法识别我的姓名声明,c#,authentication,asp.net-core,jwt,bearer-token,C#,Authentication,Asp.net Core,Jwt,Bearer Token,我可以使用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>
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
}
{
“id”:“1-A”,
“名称”:“纯克朗”,
“电子邮件”:“,
“图片”:“https://”,
“区域设置”:“en au”,
“权限”:[
],
“iss”:“,
“sub”:“google-oauth2 |”,
“澳元”:“,
“经验”:1597609078,
“iat”:1496325742
}
下面是服务器看到的内容:
还有。。不过,它似乎“承认”了我的电子邮件声明?(注意:我刚刚混淆了真正的电子邮件值)
所以我想,name
不是公认的说法。。所以我试着看看是否有一些标准的规则<代码>名称是第一个用于自定义索赔的名称
要让ASP.NET核心安全性将我的name
声明识别为NameClaimType
,是否需要一些技巧
为什么
电子邮件
索赔得到认可?它期望的索赔类型与您的索赔类型不同。
您可以设置为:
.AddJwtBearer(o => o.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name"
})
这将更改它用于填充名称的声明。没有阅读所有详细信息(现在时间不多),我记得一个旧案例:,这有帮助吗?您可以通过验证设置AFAIK在身份验证方案上设置NameClaimType。它现在需要不同的索赔类型。@juunas>它现在需要不同的索赔类型。你有一些额外的信息来解释你的建议吗?你可以设置如下:
.AddJwtBearer(o=>o.TokenValidationParameters=newtokenvalidationparameters{NameClaimType=“name”})
。这将改变它用来填充名称的声明。有一组从JWT声明到MS声明的映射。正如您所看到的,有一个来自电子邮件
的映射,而不是来自名称
,这就是为什么一个有效,而另一个无效。您还将看到,unique\u name
是映射到更详细版本的name
声明的内容。