Во-первых, мой вопрос аналогичен этому сообщению на форумах MS, но никто его не решил.
Я пытаюсь получить доступ к любому API, который позволяет мне просматривать количество пользователей для всех наших клиентов, API Graph или Partner Center.
Мои два основных требования:
Я прочитал документацию по API Центра партнеров и следую примеру аутентификации REST, но API Центра партнеров возвращает ошибку 403 независимо от того, как я пытаюсь пройти аутентификацию.
Я использую OAuth 2.0 для аутентификации по маршруту https://login.microsoftonline.com/{tenantId}/oauth2/token
с помощью grant_type: client_credentials
и resource: https://graph.windows.net
, как указано в документации, указанной выше.
Это успешно возвращает токен, однако, когда я использую его в качестве носителя для маршрута https://api.partnercenter.microsoft.com/v1/customers
, я получаю ошибку 403 Forbidden.
Я также нашел другой маршрут токена, на который нет ссылок в другой документации. Когда я пытаюсь отправить POST на https://api.partnercenter.microsoft.com/generatetoken
с этим токеном доступа в качестве носителя и grant_type: jwt_token
, я получаю обратно {"error": "invalid_grant", "error_description": "Invalid authorization bearer is passed"}
.
@Rukmini Спасибо, мы искали «Настройки разработчика» или «Управление приложениями» на портале Центра партнеров, но так и не смогли их найти. Даже из учетной записи глобального администратора. Кнопки просто не там, где указано в документации.
Microsoft удалила ссылку на «Управление приложениями» на боковой панели, но их прямая ссылка по-прежнему работает: aka.ms/accountexp/appMgmt Это перенаправляет меня на Partner.microsoft.com/dashboard/v2/account-settings/…
Даже я столкнулся с той же проблемой при воспроизведении в своей среде. Попробуйте использовать прямую ссылку и дайте мне знать
@Rukmini Извините, что это заняло так много времени, мне пришлось попросить администратора протестировать это для меня, просто чтобы быть уверенным. Страница больше не работает. Нажатие кнопки добавления веб-приложения или собственного приложения ничего не дает, оно просто загружается на секунду и останавливается.
Да, можете ли вы использовать модель токена обновления для вызова API? Это осуществимо для вас?
@Rukmini Я так не думаю, нам нужно вызвать эту серверную часть, используя учетные данные приложения. Есть ли способ использовать одни учетные данные приложения для создания токенов доступа к API Graph для другого клиента? Я попытался использовать идентификатор клиента клиента в запросе OAuth и получил следующее: Клиентскому приложению <мой идентификатор клиента> отсутствует субъект-служба в клиенте <идентификатор клиента клиента>. По сути, это, а также возможность получить список всех клиентов-арендаторов — это то, что я ищу.
Да, вы можете это сделать, можете ли вы указать, какой API Microsoft Graph вы вызываете?
@Rukmini Прямо сейчас мне просто нужно прочитать основной список пользователей для наших клиентских арендаторов, но как только я это заработаю, их, вероятно, будет больше. Затем мне также нужен способ составить список всех клиентов, чтобы получить их идентификаторы арендаторов.
Пожалуйста, отредактируйте вопрос, касающийся этого требования, указав сведения о создании токена, ошибку и используемые API.
@Rukmini Добавлены требования. Мы являемся MSP, который управляет многими клиентами Azure через Центр партнеров. Я всего лишь программист, а не эксперт по Azure, поэтому я не знаком с терминологией на 100%.
Конечно, вы являетесь клиентом-арендатором?
@Rukmini Я являюсь участником арендатора верхнего уровня, а приложение находится в составе арендатора верхнего уровня.
Чтобы выполнить ваше требование, администратор клиента клиента должен принять согласие. Возможно ли это в вашем сценарии?
И чтобы перечислить пользователей в арендаторе клиента, нужно быть членом арендатора клиента.
@Rukmini У нас уже есть согласие GDAP на все разрешения для всех наших арендаторов. У нас есть все учетные данные администратора арендатора клиента. Я просто не хочу управлять отдельными учетными записями приложений для каждого арендатора. Я хочу получить доступ ко всем арендаторам с одинаковыми учетными данными.
Отлично, в ближайшее время я опубликую пошаговый ответ, чтобы привлечь пользователей других арендаторов.
Ошибка «В клиентском приложении TenantID отсутствует субъект-служба в клиенте CustomerTenantID» обычно возникает, если мультитенантное приложение отсутствует в клиенте-клиенте в качестве субъекта-службы.
Чтобы получить доступ ко всем арендаторам с помощью одного и того же приложения, проверьте следующее:
Предполагая, что ваш арендатор — TenantA
, а клиент — CustomerTenant
.
Создали многотенантное приложение в TenantA
, выбрав «Учетные записи в любом каталоге организации (любой клиент Microsoft Entra ID — мультитенант)» и предоставив User.Read.All
разрешение Microsoft Graph API:
Теперь, чтобы устранить ошибку, используйте приведенную ниже конечную точку и войдите в систему с учетной записью глобального администратора CustomerTenant
, чтобы создать субъект службы в CustomerTenant
*:
https://login.microsoftonline.com/CustomerTenantTenantID/adminconsent?client_id=ClientIDOFAPPinTenantA
OR
https://login.microsoftonline.com/organizations/adminconsent?client_id=ClientIDOFAPPinTenantA
После этого вы нажимаете «Принять» и переходите в CustomerTenant
-> Корпоративные приложения -> Поиск приложения:
Субъект службы создается в CustomerTenant
и предоставляются разрешения API:
Теперь сгенерируйте токен доступа для Microsoft Graph API, чтобы получить доступ к пользователям CustomerTenant
.
GET https://graph.microsoft.com/v1.0/users
Grant type: Authorization code
Callback URL: https://oauth.pstmn.io/v1/callback
Auth URL: https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize
Token URL : https://login.microsoftonline.com/organizations/oauth2/v2.0/token
Client ID : ClientID
Client Secret : ClientSecret
Scope: https://graph.microsoft.com/.default
Я вошел в систему с учетной записью CustomerTenant
и смог успешно получить данные пользователя для CustomerTenant
:
Теперь, чтобы проверить, я вошел в систему с учетной записью TenantA
и получил пользователей TenantA
:
Ссылки:
azure — поиск информации о пользователе среди разных арендаторов Microsoft — 2 Ответа от Tiny Wang
Это сработало! Спасибо. Однако теперь вторая часть моего вопроса заключалась в том, как получить список всех наших арендаторов? Мне нужен способ получить идентификаторы арендаторов для аутентификации. Я обнаружил, что у нас нет доступа к API Центра партнеров, поскольку мы являемся косвенным партнером по выставлению счетов.
Пожалуйста, задайте новый вопрос со всеми подробностями. Я помогу вам там и вставьте ссылку на вопрос здесь.
Готово, спасибо stackoverflow.com/questions/78902051/…
Конечно проверю
Проверьте это Learn.microsoft.com/en-us/answers/questions/53712/…