Как смоделировать роли приложения в заявках

У нас есть центральное приложение UserManagerApplication, которое управляет пользователями и ролями для нескольких приложений. В этом приложении мы обычно устанавливаем, что

  • UserA находится в роли администратора для Application1
  • UserA находится в роли Reader для Application2

Проблема. Когда Application2 запрашивает область (скажем, scopeApp1), включающую роли, будет возвращено утверждение ролей Reader и Admin, поскольку они отфильтрованы по типам утверждений, а не по области.

Вопрос: Как я могу запросить только подмножество ролей?

Мы используем пользовательскую службу пользователя, и, насколько я понимаю, место, где я мог бы отфильтровать возвращенные утверждения, находится в этом методе, и я не могу найти способ выяснить, какую область запросил клиент:

public override Task GetProfileDataAsync(ProfileDataRequestContext context)

Насколько я вижу, мои варианты:

  • Включить имя приложения, включенное в роль (App1Admin, App2Reader и т. д.)
  • Создайте новый ClaimType для каждого приложения. App1Role, App2Role
  • Я пропустил что-то очевидное, и мне нужно лучше понять

Спасибо за любую помощь

Ларси


person Larsi    schedule 27.01.2016    source источник
comment
Контекст должен иметь идентификатор клиента.   -  person leastprivilege    schedule 27.01.2016
comment
@меньшая привилегия, спасибо. Я добавил ответ, чтобы вопрос можно было закрыть   -  person Larsi    schedule 28.01.2016


Ответы (1)


Мне указали на хорошее чтение по адресу https://github.com/IdentityServer/IdentityServer3/issues/474, описывающий проблему.

Кроме того, я добавлял утверждения в CustomUserService, где области недоступны. Когда я вместо этого добавляю утверждения в пользовательский ClaimsProvider, я получаю немного другую подпись.

 public override async Task<IEnumerable<Claim>> GetAccessTokenClaimsAsync(ClaimsPrincipal subject, Client client, IEnumerable<Scope> scopes, ValidatedRequest request)

Это позволяет мне выяснить запрошенные области.

person Larsi    schedule 28.01.2016