ASP. NET Основные изменения аутентификации JWT Заявления (под) - PullRequest
0 голосов
/ 19 июня 2020

У меня есть 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)

Что происходит на?! Куда пропала моя дополнительная претензия?

1 Ответ

1 голос
/ 19 июня 2020

Просто добавьте JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); в метод API ConfigureServices. Его также предложили по другому комментарию. Я проверил это на моем образце репозитория .

Эта проблема связана с тем, что OID C StandardClaims переименованы в обработчике токенов JWT. Добавив JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();, вы очистите карту типов входящих заявок в обработчике токенов JWT.

Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...