Как получить группы Azure AD для текущего пользователя, не требующего администратора домена, чтобы предоставить моему приложению какие-либо права? - PullRequest
2 голосов
/ 20 марта 2019

Точнее, : у меня есть небольшое Azure AD, под которым я зарегистрировал свое приложение.Приложение помечено как мультитенантное, так как я хочу, чтобы люди могли входить в него со своими корпоративными учетными записями.Я хотел бы получить членство в группах для пользователей, которые входят в систему, используя делегированные права доступа, которые не требуют согласия администратора, потому что я не хочу, чтобы процесс адаптации новых арендаторов AAD требовал от администратора предоставления там моего приложения специальногоразрешения.

Вот что я попробовал:

Получение информации непосредственно в токенах

Путем настройки поля groupMembershipClaims в моем манифесте приложения на All как задокументировано здесь .Я могу получить группы в моем токене.Это может быть сделано без какого-либо согласия администратора.на самом деле единственными необходимыми делегированными правами являются openid, т.е. вход пользователя в систему.

Однако этот подход ограничивает меня получением групп для пользователей, которые являются членами менее 200 групп.В противном случае я вообще ничего не получаю, а вместо этого получаю конечную точку для API-интерфейса Graph Azure, где я могу их получить.

Это приводит нас ко второму подходу.

Использование Microsoft Graph API

К сожалению, old Azure Graph API и новый Microsoft Graph API Кажется, для получения групп требуются разрешения с согласия администратора.

Документация для пользователя : getMemberGroups состояния вызовачто мы должны иметь возможность с делегированным User.Read разрешением сделать этот вызов.Однако это не работает и на самом деле Directory.Read.All является наименее разрешающим разрешением, которое действительно работает.Смотрите документацию проблема на GitHub .

Глядя на историю документации, мы видим, что раньше это считали известной ошибкой , а не проблемой документации.Возвращение в прошлое, по-видимому, подразумевает, что как минимум User.Read и Group.Read.All требовались вместе.

Это оставляет меня в некотором роде застрявшим.В идеале я бы предпочел использовать график api во всех случаях, а не только в случае с более чем 200, потому что в противном случае мои токены могут стать слишком большими для некоторых случаев, несмотря на установленный лимит microsoft. Но я не уверен, каково реальное намерение здесь в отношениичтобы получить согласие администратора для такого рода запросов.

У кого-нибудь есть другие идеи?

1 Ответ

1 голос
/ 21 марта 2019

В настоящее время нет способа (2019-03-20) получить информацию о членстве в группе для вошедшего в систему пользователя без согласия администратора каталога Azure AD на делегированное разрешение Directory.Read.All .(В этом сценарии планируется поддерживать разрешение с меньшими привилегиями, хотя по-прежнему может потребоваться согласие администратора по умолчанию.)

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

Моя рекомендация следующая:

  1. Перед отправкой пользователя для входа в систему уточните, что политика его организации может не разрешать ему входить в систему (и в этом случае предложите обратиться к своей ИТ-команде).(В будущем появятся дополнительные возможности для пользователей, столкнувшихся с ошибкой «извините, вам не разрешено давать согласие» ...)
  2. Рассмотрим вариант с only , запрашивающий User.Read (и претензии групп), и только "повышение" до Directory.Read.All позже в приложении.Это увеличит вероятность (хотя и не гарантирует) того, что пользователь сможет хотя бы войти в систему, и может позволить вам предложить им более подробные инструкции о том, как попросить свою ИТ-команду проверить ваше приложение.

Дополнительное руководство можно найти по адресу: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#using-the-admin-consent-endpoint

...