У меня не работает аутентификация роли 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;
}
}