У меня есть два утверждения (также и другие, но это не входит в объем задачи) для веб-приложения, которое я создаю: (Пользователь)Имя и Роль.
Имя используется для идентификации пользователя с помощью @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
Мобильная версия