У меня не работает аутентификация роли Blazor WASM CORE-6

Мой проект находится в VS-2022 и использует теги ниже.

Может кто-нибудь объяснить, что означает приведенная ниже ссылка на фрагмент кода в файле SERVER program.cs? Для чего предназначен этот фрагмент.
В частности, к чему относятся «имя» и «роль». Я уже создал четыре роли в таблице AspNetRoles, а также AspNetRoleClaims и AspNetUserClaims. Однако следующее условие страницы Blazor НЕ работает. : @attribute [Authorize(Roles = "Owner,Admin,Lead,User")]

Я нашел следующий сегмент кода в предположении, что мне нужен этот код для работы авторизации роли.

При использовании я получаю ошибку времени выполнения «Последовательность не содержит элементов» в строке, содержащей: options.ApiResources.Single().UserClaims.Add("name");

Я не в состоянии знать, что нужно в разделах файла program.cs, ранее называвшихся startup.cs, из-за чтения онлайн-руководств по Core3.1 и .Net-5, чтобы перенести мой проект на Core-6 и WASM. Многое изменилось за последние два года, особенно с Blazor и Core-6.

Я приветствую вопросы, комментарии и решения по работе авторизации ролей в моем проекте.

      builder.Services.AddIdentityServer()
        .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options => {
           options.IdentityResources["openid"].UserClaims.Add("name");
           options.ApiResources.Single().UserClaims.Add("name");
           options.IdentityResources["openid"].UserClaims.Add("role");
           options.ApiResources.Single().UserClaims.Add("role");
        });

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("role");

1 ответ

Там слишком много слишком умных вариаций.

Попробуйте этот официальный документ.

Утверждение имени и роли с авторизацией API

Профиль службы один.

Создайте ProfileService.cs в рамках серверного проекта.

      using IdentityModel;
using Duende.IdentityServer.Models;
using Duende.IdentityServer.Services;
using System.Threading.Tasks;

public class ProfileService : IProfileService
{
    public ProfileService()
    {
    }

    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        var nameClaim = context.Subject.FindAll(JwtClaimTypes.Name);
        context.IssuedClaims.AddRange(nameClaim);

        var roleClaims = context.Subject.FindAll(JwtClaimTypes.Role);
        context.IssuedClaims.AddRange(roleClaims);

        await Task.CompletedTask;
    }

    public async Task IsActiveAsync(IsActiveContext context)
    {
        await Task.CompletedTask;
    }
}
Другие вопросы по тегам