Microsoft Graph — многопользовательское демоническое приложение. Не удается получить доступ ко всем пользователям

#azure-active-directory #microsoft-graph-api #multi-tenant

#azure-active-directory #microsoft-graph-api #многопользовательский

Вопрос:

Я создал многопользовательское демоническое приложение в Azure, из которого, как я предполагал, я мог бы получить доступ к GET /users / и получить всех пользователей во всех подключенных клиентах. Однако, когда этот запрос отправляется, все, что я получаю, — это список пользователей от одного клиента (того, где создано приложение). У меня есть все необходимые разрешения API, и я предоставил им доступ.

Я предполагаю, что я не понимаю, как должен работать рабочий процесс Graph, но после нескольких часов поиска в Google я не стал мудрее. На данный момент я просто пытаюсь заставить это работать в Postman. Любой совет был бы по-настоящему оценен.

Комментарии:

1. Это невозможно. Ваше приложение будет знать информацию о клиенте только при входе в систему. Если пользователь A из клиента вошел в систему, вы можете получить пользователей только из клиента. Токен всегда зависит от клиента

2. В этом случае нет пользователей, а есть приложение. И если мне нужно повторно пройти аутентификацию для каждого клиента, это нормально.

3. Пожалуйста, обратитесь к этому аналогичному сценарию . Надеюсь, это поможет вам

4. Привет, у вас была возможность ознакомиться с моим ответом? Полезно ли это?

Ответ №1:

Вы неправильно понимаете многопользовательское приложение.

Многопользовательское приложение предназначено для предоставления программного обеспечения как услуги (SaaS) многим организациям. Это не означает, что исходное приложение может получить доступ к ресурсам от других пользователей, которые дали согласие. Это может позволить только этим пользователям получать доступ к своим собственным ресурсам.

Когда администратор другого клиента (отличный от первоначального клиента) даст согласие на это многопользовательское приложение, к этому клиенту будет добавлено корпоративное приложение, имеющее разрешения Graph. Только это корпоративное приложение имеет доступ к данным этого клиента.

Итак, в вашем случае вы используете поток учетных данных клиента (только приложение без пользователя), с согласия администратора других клиентов вы можете использовать корпоративное приложение, добавленное к этим клиентам, для доступа к их пользователям.

Во-первых, я предполагаю, что вы создаете многопользовательское приложение в tenant A. Убедитесь, что у вашего многопользовательского приложения есть разрешение приложения User.Read.All .

Затем выполните согласие администратора для клиента B, используя конечную точку согласия администратора (перейдите по следующему URL-адресу в браузере):

 https://login.microsoftonline.com/{tenant-id of tenant B}/adminconsent?client_id={client-id of the multi-tenant app}
  

Войдите с учетной записью администратора из клиента B, чтобы получить согласие администратора. Это добавит корпоративное приложение в клиент B.

Теперь вы можете получить токен следующим образом:

 POST https://login.microsoftonline.com/{tenant id of tenant B}/oauth2/v2.0/token

client_id={client id of the multi-tenant app}
amp;scope=https://graph.microsoft.com/.default
amp;client_secret={client secret}
amp;grant_type=client_credentials
  

Токен доступа сможет отображать список пользователей клиента B.