C# 我可以通过JWT进行身份验证,但我的ASP.NET核心应用程序无法识别我的姓名声明

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>

我可以使用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
}
{
“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
声明的内容。