Azure AD: Как сделать так, чтобы токены имели претензию "hasgroups"? - PullRequest
0 голосов
/ 18 сентября 2018

Наше приложение позволяет назначать разрешения для групп, что означает для каждого пользователя, мы должны надежно определить членство в группе. Пользователь представляет токен, регулярно полученный с помощью 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 претензию?

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

  • Тип приложения Native (не WebApi).
  • Манифест говорит "oauth2AllowImplicitFlow": true.
  • Приложению предоставляется доступ к хранилищу ключей Azure.

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

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

Где:

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

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

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Для тех, кто ищет больше об этом. Пожалуйста, обратитесь Doc saml-токены

enter image description here

Примечание enter image description here

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

0 голосов
/ 18 сентября 2018

Где: • _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» будет отправлено как true (как неявный поток предоставления для SPA)

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

Заявки в id_tokens enter image description here

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