Я могу пройти аутентификацию с помощью JWT, но мое имя не распознается в моем приложении ASP.NET Core

Я могу пройти аутентификацию в своем веб-API ASP.NET Core 2.2 с помощью JWT, но свойство Name для Identity равно null.

Хотя претензия есть.

Вот 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
}

и вот что видит сервер:

Я могу пройти аутентификацию с помощью JWT, но мое имя не распознается в моем приложении ASP.NET Core

также .. кажется, что он «признает» мою претензию по электронной почте? (примечание: я только что запутал реальное значение электронной почты)

Я могу пройти аутентификацию с помощью JWT, но мое имя не распознается в моем приложении ASP.NET Core

Поэтому я подумал, что name не является общепризнанным заявлением ... поэтому я попытался посмотреть, есть ли для этого какие-то стандартные правила, и нашел У IANA есть список зарезервированных и пользовательских утверждений.. name является первым для пользовательских претензий.

Есть ли какой-то трюк, который мне нужно сделать, чтобы система безопасности ASP.NET Core распознала мою name претензию как NameClaimType ?

Почему претензия email признается?

Не вчитываясь во все подробности (сейчас не так много времени), я вспоминаю более старый случай: stackoverflow.com/questions/41830898/…, помогает ли это?

jps 02.07.2019 14:15

Вы можете установить NameClaimType в схеме аутентификации через ее настройки проверки AFAIK. Теперь ожидается другой тип заявки.

juunas 02.07.2019 14:19

@juunas >Теперь ожидается другой тип заявки. У вас есть дополнительная информация, чтобы объяснить, что вы предлагаете?

Pure.Krome 02.07.2019 14:23

Вы можете установить как: .AddJwtBearer(o => o.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "name" }). Это изменит утверждение, которое оно использует для заполнения имени.

juunas 02.07.2019 14:25

Хорошо, вау, это сработало @juunas! Опубликуйте это как ответ, пожалуйста. Кроме того, почему это сработало, когда настройки «по умолчанию» не работают? странно, что заявление "электронная почта" найдено, но не имя ??

Pure.Krome 02.07.2019 14:35

Существует набор сопоставлений из утверждений JWT в утверждения MS здесь. Как видите, есть отображение из email, но не из name, поэтому одно работает, а другое нет. Вы также увидите, что unique_name — это то, что сопоставлено с более подробной версией утверждения name.

Kirk Larkin 02.07.2019 15:29

@KirkLarkin, вау! это отличная находка! И... какого черта этот класс JWT находится в репозитории ActiveDirectory? о ничего себе ... есть так много конкретных требований AD: / Наконец, является ли unique_name общим соглашением об именах для этого утверждения? или чаще используется утверждение name? Этот документ где-нибудь есть? Я думал, что мой документ IANA (iana.org/assignments/jwt/jwt.xhtml) был предложенным стандартом... который, как я думал, будет обычным способом?

Pure.Krome 03.07.2019 04:14

Также обратите внимание, @KirkLarkin, что вы предоставили ссылку на SYSTEM.IdentityModel.Tokens.Jwt .. которую я не использую. Я использую MICROSOFT.IdentityModel.Tokens.

Pure.Krome 03.07.2019 05:13

Я не знаю, почему это unique_name, но я видел name только "в дикой природе". Вокруг всего этого много истории и наследия. Эта проблема GitHub может пролить свет на это. Хотя это может сбивать с толку, ссылка на исходный код, которую я разместил, верна, если вы используете AddJwtBearer. Вы можете убедиться в этом, следуя исходному коду и его цепочке зависимостей. Я не могу объяснить все это в комментарии, и у вас уже есть правильный ответ. :)

Kirk Larkin 03.07.2019 10:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
1 211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он ожидает другого типа претензии, чем то, что у вас есть. Вы можете установить как:

.AddJwtBearer(o => o.TokenValidationParameters = new TokenValidationParameters
{
    NameClaimType = "name"
})

Это изменит утверждение, которое оно использует для заполнения имени.

Другие вопросы по теме