Заявления JWT в веб-приложении Blazor не передаютсяC#

Место общения программистов C#
Ответить
Anonymous
 Заявления JWT в веб-приложении Blazor не передаются

Сообщение Anonymous »

Целью этого приложения является создание приложения-шаблона, которое я могу использовать для нескольких приложений в будущем, чтобы мне не приходилось переделывать всю аутентификацию (и некоторые элементы базы данных), чтобы сосредоточиться на более простом и быстром создании веб-приложений в будущем. У меня есть проблема, которую я не могу осознать. Это связано с созданием JWT для аутентификации.
У меня есть два утверждения (также и другие, но это не входит в объем задачи) для веб-приложения, которое я создаю: (Пользователь)Имя и Роль.
Имя используется для идентификации пользователя с помощью @context.User.Identity?.Name для отображения его имени пользователя.
Роль заключается в том, чтобы различать пользователей и администраторы страницы. В основном используется для создания страницы, доступной для использования только администраторами с помощью @attribute [Authorize(Roles=nameof(UserRoles.admin))], а также тега .
Существует два (основных) пакета NuGet, которые могут помочь в создании JWT:
  • Код: Выделить всё

    Microsoft.IdentityModels.Tokens
  • Код: Выделить всё

    System.IdentityModel.Tokens.Jwt
    (это помечено как устаревшее и должно быть заменено приведенным выше)
Я генерирую свой токен с помощью следующего кода:
создание jwt с помощью Microsoft.IdentityModels.Tokens
Проблема этого метода создания заключается в том, что утверждение Name не «сохраняется». context.User.Identity?.Name имеет значение NULL, когда я создаю JWT, хотя я явно добавляю имя в утверждения.
Снимок экрана контекста в отладчике с использованием Microsoft.IdentityModels.Tokens
У меня есть NameClaimType, но свойство Name имеет значение NULL, и утверждение имени не было добавлено к моим утверждениям. В результате имя не отображается в моем приложении Blazor (должно быть в правом верхнем углу --> Здравствуйте, !).
Доступ на основе ролей возможен, имя не отображается
Я много играл и не смог найти удовлетворительного ответа в Интернете, поэтому попробовал создать JWT с помощью устаревшего инструмента. Вот код, который создает JWT:
создание jwt с помощью System.IdentityModel.Tokens.Jwt
Создается следующий контекст:
Снимок экрана контекста в отладчике с использованием System.IdentityModel.Tokens.Jwt
Теперь я получаю имя пользователя, но утверждение Role отсутствует, хотя RoleClaimType установлен, я ничего не вижу в авторизованном представлении. больше:
Код авторизованного просмотра
Имя отображается, но доступ на основе ролей невозможен.
Мне бы хотелось, чтобы решение могло видеть имя и иметь доступ на основе ролей в моем приложении. Честно говоря, я понятия не имею, как это понять, поскольку для меня это не имеет смысла.
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... taken-over
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»