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 Запрос?

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

  • Тип приложения 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,

1 ответ

Где: • _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 введите описание изображения здесь

Для всех, кто интересуется этим. Обратитесь к Doc saml-tokens

Запись

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

Другие вопросы по тегам