Получить всех пользователей из мультитенантного приложения AD с помощью API Graph - PullRequest
3 голосов
/ 17 июня 2019

Я пытаюсь получить всех пользователей для мультитенантного приложения с помощью API Graph. Для этого я сгенерировал токен доступа с помощью запроса:

POST https://login.microsoftonline.com/common/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

Примечание: Обратите внимание, что в приведенном выше запросе я использовал common вместо {tenantID}. Это был просто хит и попытка, так как то же самое было предложено для adminConsent в doc .

Используя вышеупомянутый сгенерированный токен доступа, я запросил пользовательский API и получил следующую ошибку

{
    "error": {
        "code": "Authorization_IdentityNotFound",
        "message": "The identity of the calling application could not be established.",
        "innerError": {
            "request-id": "56141b7d-dd5e-44b1-9395-cd15d02b52de",
            "date": "2019-06-17T12:42:19"
        }
    }
}

И когда я генерирую токен с использованием идентификатора клиента, он возвращает пользователей только одного активного каталога.

Кто-нибудь может подсказать, где я ошибаюсь?

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

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

Примечание: Когда вы используете поток предоставления кода авторизации (получите доступ от имени пользователя), вам нужно предоставить делегированное разрешение вместо разрешения приложения.

enter image description here

получить токен доступа

enter image description here

0 голосов
/ 19 июня 2019

В мультитенантном приложении объекты субъекта службы создаются в каждом клиенте, который обращается к приложению. Эти объекты субъекта службы будут содержать объекты согласия (пользователь / администратор), которые являются специфическими для этого арендатора, и секрет также связан с этими объектами.

Таким образом, когда вы получаете токен, он всегда специфичен для арендатора, и вам необходимо получить отдельные токены для каждого арендатора, чтобы выполнить любую операцию в этом арендаторе.

Пример. Предположим, что у вас есть мультитенантное приложение, зарегистрированное в арендаторе A, которое также используется арендаторами B, C и D. Это также создаст объекты SP в арендаторах B, C и D.

Поэтому, если вам нужно выполнить какую-либо операцию в арендаторе B, вам нужен токен для SP B и использовать связанный с ним секрет.

Короче говоря, вам нужны кредиты от всех арендаторов, если вы хотите выполнять эти операции в контексте приложения.

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