вернуть роль пользователя в ответе токена, используя CustomTokenRequestValidationContext на сервере идентификации 4 - PullRequest
0 голосов
/ 11 апреля 2020

Я использую Identity Server 4.0 с Identity Core, мне нужна роль пользователя вместе с ответом токена.

ниже прикрепленного изображения для справки

1 Ответ

0 голосов
/ 04 мая 2020

Это неправильная концепция из-за нарушения протокола OAuth2 и требует изменения внутренних компонентов IS4.

Но вы можете реализовать получение роли от: - конечной точки информации о пользователе (http://docs.identityserver.io/en/3.1.0/endpoints/userinfo.html) - токена доступа

Для последнего варианта вам следует переопределить службу профиля (http://docs.identityserver.io/en/3.1.0/reference/profileservice.html) |

Например:

publi c class MyProfileService: IProfileService {private readonly UserManager _userManager;

    public MyProfileService(UserManager<User> userManager)
    {
        _userManager = userManager;
    }

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

        var claims = new List<Claim>
        {
            new Claim(JwtClaimTypes.Email, user.Email),
            new Claim(JwtClaimTypes.GivenName, user.FirstName),
            new Claim(JwtClaimTypes.FamilyName, user.LastName),
            new Claim(JwtClaimTypes.Name, $"{user.FirstName} {user.LastName}"),
            new Claim(JwtClaimTypes.Locale, user.PreferredLanguage)
        };
        claims.AddRange(roles.Select(role => new Claim(JwtClaimTypes.Role, role)));

        context.IssuedClaims.AddRange(claims);
    }

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

И дон не забудьте зарегистрировать

            services.AddIdentityServer(options =>
            {
                ...
            })
            .AddProfileService<MyProfileService>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...