Azure AD: как сделать так, чтобы у токенов было требование hasgroups?

Наше приложение позволяет назначать разрешения группам, что означает, что для каждого пользователя мы должны надежно определять членство в группе. Пользователь представляет токен, регулярно получаемый с помощью ADAL (некоторые используют .NET, другие используют NodeJS, другие используют CLI).

Некоторые пользователи, похоже, отправляют токен со следующим заявлением:

"hasgroups": true,

Это утверждение задокументировано в Справочник по токенам Azure AD.

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

"_claim_names": {
  "groups": "src1"
},
"_claim_sources": {
  "src1": {
    "endpoint": "https://graph.windows.net/{redacted}/users/{redacted}/getMemberObjects"
  }
},

Что не так с нашей настройкой? Почему мы не можем получить hasgroups иск?

Вот дополнительная информация:

  • Тип приложения - Собственное (не WebApi).
  • В манифесте говорится "oauth2AllowImplicitFlow": true.
  • Приложению предоставляется доступ к Azure Key Vault.

Мы используем следующий код для получения токена (на C #):

var userCredential = new UserCredential( _userName, _password );
result = context.AcquireToken( _resource, _clientId, userCredential );

Где:

  • _userName и _password принадлежат пользователю с большим количеством групп.
  • _clientId - это идентификатор собственного приложения, то есть с "oauth2AllowImplicitFlow": true.
  • _resource is https://vault.azure.net.

Токен выпущен правильно. Единственная проблема в том, что он показывает _claim_names и _claims_sources вместо hasgroups.


person fernacolo    schedule 18.09.2018    source источник


Ответы (2)


Где: • _userName и _password от пользователя с большим количеством групп.

Поскольку пользователь является частью множества групп (предполагается, что здесь 6 или более). Токен Azure AD вернется с индикатором превышения количества групп вместо фактических идентификаторов групп в заявлении «группы». Думаю, вы это знаете и, следовательно, делаете это намеренно.

var userCredential = new UserCredential( _userName, _password );
result = context.AcquireToken( _resource, _clientId, userCredential );

Поскольку вы получаете токен в приложении на основе .NET с использованием кода C #, ответ токена на самом деле не ограничен по длине (например, в случаях для веб-SPA, где он возвращается как фрагмент URI, а длина URL-адреса имеет ограничения)

Глядя на документацию, утверждения «hasgroups» и «groups: src1» имеют одно и то же намерение сообщить, что существует слишком много групп, которые нужно возвращать как часть токена. Хотя есть небольшая разница:

  • в случаях, когда применяется ограничение URL, hasgroups будут отправлены как истинные (например, неявный поток предоставления для SPA)

  • в случаях, когда длина не ограничена (например, в вашем случае), Azure AD все равно не вернет все группы, чтобы убедиться, что токен не станет слишком большим, но отправит немного больше информации о том, как добраться до всех групп. отправив информацию о том, как вы можете запросить все свои группы. В этом случае он отправляет "groups: src1" и "_claim_sources" с исходной информацией, а не просто "hasgroups".

Претензии в id_tokens  введите описание изображения здесь

person Rohit Saigal    schedule 18.09.2018
comment
В этом есть смысл. Вы знаете, как AAD узнает, ограничен ли запрос токена по длине или нет? Я смотрю на token REST API и не смог найти параметр, ограничивающий запрос. Стоит ли использовать стандартный HTTP-заголовок? - person fernacolo; 18.09.2018
comment
Я думаю, это будет решено в зависимости от того, какой грант OAuth будет использован. Таким образом, ограничение URL-адресов будет актуально только для неявного потока грантов от SPA в соответствии с документацией. - person Rohit Saigal; 18.09.2018
comment
Подозреваю, что это решено на основании параметра response_mode. Я обнаружил, что ADAL для .NET не отправляет его, а неявный грант требует, чтобы это было fragment: ссылка. Но мне еще предстоит проверить, чтобы подтвердить. - person fernacolo; 18.09.2018
comment
к сожалению нет. Похоже, что единственный способ получить такой токен - использовать интерактивный вход через Интернет ... - person fernacolo; 24.09.2018

Для всех, кто интересуется этим. См. Документ saml-tokens

введите здесь описание изображения

Примечание  введите описание изображения здесь

Источник: Ссылка на образец Azure

person cwishva    schedule 15.03.2019