Определите роли с помощью SPA и. NET Core 3 - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть приложение, использующее. NET Core 3.1, а также интерфейс, использующий приложение React по умолчанию, сгенерированное из этой ссылки .

В базовом приложении. NET у меня настроен Identity Server с пользователями и ролями.

Когда я нахожусь в приложении React, я хотел бы знать роли от пользователя. Я вижу, что в настоящее время используется библиотека под названием oidc-client.

Из ответов, которые я могу отлаживать при авторизации пользователя, я вижу, что возвращаются некоторые области.

scope: "openid profile [Name of the app]"

Вот полный ответ.

enter image description here

Как узнать роли этого пользователя? Нужно ли добавлять его где-нибудь в мое приложение. NET Core? Или я могу понять это из access_token в ответе?

1 Ответ

1 голос
/ 14 апреля 2020

Этот шаблон использует ASP. NET Core Identity для управления пользователями / ролями. Итак, в первую очередь нужно включить роли:

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

Создание пользовательской службы Profile для включения пользовательских утверждений в конечную точку токенов и userinfo:

public class ProfileService : IProfileService
{
    protected readonly UserManager<ApplicationUser> _userManager;


    public ProfileService(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        ApplicationUser user = await _userManager.GetUserAsync(context.Subject);

        IList<string> roles = await _userManager.GetRolesAsync(user);

        IList<Claim> roleClaims = new List<Claim>();
        foreach (string role in roles)
        {
            roleClaims.Add(new Claim(JwtClaimTypes.Role, role));
        }

        //add user claims

        roleClaims.Add(new Claim(JwtClaimTypes.Name, user.UserName));
        context.IssuedClaims.AddRange(roleClaims);
    }

    public Task IsActiveAsync(IsActiveContext context)
    {
        return Task.CompletedTask;
    }
}

И регистрация в Startup.cs:

services.AddIdentityServer()
        .AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
        .AddProfileService<ProfileService>(); 

Теперь заявки будут включены в конечную точку userinfo, ваше приложение реакции автоматически запросит конечную точку userinfo, чтобы получить профиль пользователя в функции getUser файла AuthorizeService.js, отследите _user.profile, чтобы получить новый претензии Кроме того, утверждения о ролях включены в маркер доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...