Как вернуть разные области для разных ролей в IdentityServer 4? - PullRequest
0 голосов
/ 10 мая 2018

Я использую IdentityServer4 для защиты моего основного приложения .net. Я хотел бы использовать авторизация на основе политик

Вот пример одной политики, которую я сделал

 options.AddPolicy("api.order.write", builder =>
                builder.RequireScope(
                    "app.write", "app.read", "app.order.read"));

Я бы хотел предоставить разные возможности для разных ролей. Например, пользователь с ролью Viewer будет иметь только область app.read. Поэтому во время запроса на вход в систему веб-клиент отправляет запрос на идентификацию со списком всех областей, которые у нас есть в приложении, но затем он должен обработать и вернуть токен с областями на основе ролей. Я думаю, что могу реализовать пользовательский IProfileService и проверить там роли пользователей и добавить претензии с областями действия, но, возможно, уже есть решение для этого. У вас есть идеи?

UPD: я создал пользовательский IProfileService, и я проверяю роль пользователя и затем устанавливаю определенный список областей, таких как

                //removing existing scopes if such exist already 
                context.IssuedClaims = context.IssuedClaims.Where(x => x.Type != "scope").ToList();

                foreach (var scope in viewerScopes)
                {
                    context.IssuedClaims.Add(new Claim("scope", scope));
                }

но я все еще получаю все области (не для каждой роли), тот же список областей, который веб-клиент отправляет во время запроса на вход.

1 Ответ

0 голосов
/ 10 мая 2018

Вы смешиваете авторизацию клиента (то есть области на языке OAuth / OIDC) и авторизацию пользователя здесь.

Проверка авторизации пользователя должна выполняться внутри самого API / ресурса (и после проверки базовой области), а не в службе IDS4 в точке выдачи токенов.

https://leastprivilege.com/2016/12/16/identity-vs-permissions/

...