У меня есть ASP. NET Core API, который использует аутентификацию JWT. Простая настройка:
....
string authority = $"https://{configuration["Auth:Authority"]}";
string audience = configuration["Auth:Audience"];
return builder.AddJwtBearer(options =>
{
options.Authority = authority;
options.Audience = audience;
options.TokenValidationParameters = new TokenValidationParameters
{
// NameClaimType = "http://schemas.org/email"
// NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email"
// NameClaimType = "sub"
};
});
(как вы можете видеть закомментированный код, я пробовал несколько настроек)
Когда я декодирую JWT (используя jwt.io), я вижу, что есть претензия "sub "в JWT и имеет строковое значение (внутренний идентификатор пользователя в dbo)
{
"nbf": 1592585433,
"exp": 1592585763,
"iss": "https://*************",
"aud": "api_10",
"sub": "142",
"scope": [
"openid",
"api_10"
]
}
Проблема в том, что tnet переключить подпрограмму на утверждение имени. Это не возвращает результатов (0):
principal.Claims.Where(w => w.Type == "sub")
Это возвращает userId Мне нужно «142»:
principal.Claims.Where(w => w.Type == ClaimTypes.Name || ClaimTypes.NameIdentifier)
Что происходит на?! Куда пропала моя дополнительная претензия?