Доступ к клиентам Партнерского центра через API

Во-первых, мой вопрос аналогичен этому сообщению на форумах MS, но никто его не решил.

Я пытаюсь получить доступ к любому API, который позволяет мне просматривать количество пользователей для всех наших клиентов, API Graph или Partner Center.

Мои два основных требования:

  • Прочитайте полный список клиентов в Партнерском центре.
  • Возможность использовать единые учетные данные приложения для создания токена доступа к API Graph, чтобы любой клиент Центра партнеров мог получить доступ к своим спискам пользователей.

Я прочитал документацию по 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"}.

Проверьте это Learn.microsoft.com/en-us/answers/questions/53712/…

Rukmini 21.08.2024 06:50

@Rukmini Спасибо, мы искали «Настройки разработчика» или «Управление приложениями» на портале Центра партнеров, но так и не смогли их найти. Даже из учетной записи глобального администратора. Кнопки просто не там, где указано в документации.

chrispytoes 21.08.2024 15:24

Microsoft удалила ссылку на «Управление приложениями» на боковой панели, но их прямая ссылка по-прежнему работает: aka.ms/accountexp/appMgmt Это перенаправляет меня на Partner.microsoft.com/dashboard/v2/account-settings/…

Rukmini 21.08.2024 15:25

Даже я столкнулся с той же проблемой при воспроизведении в своей среде. Попробуйте использовать прямую ссылку и дайте мне знать

Rukmini 21.08.2024 15:25

@Rukmini Извините, что это заняло так много времени, мне пришлось попросить администратора протестировать это для меня, просто чтобы быть уверенным. Страница больше не работает. Нажатие кнопки добавления веб-приложения или собственного приложения ничего не дает, оно просто загружается на секунду и останавливается.

chrispytoes 21.08.2024 18:37

Да, можете ли вы использовать модель токена обновления для вызова API? Это осуществимо для вас?

Rukmini 21.08.2024 18:38

@Rukmini Я так не думаю, нам нужно вызвать эту серверную часть, используя учетные данные приложения. Есть ли способ использовать одни учетные данные приложения для создания токенов доступа к API Graph для другого клиента? Я попытался использовать идентификатор клиента клиента в запросе OAuth и получил следующее: Клиентскому приложению <мой идентификатор клиента> отсутствует субъект-служба в клиенте <идентификатор клиента клиента>. По сути, это, а также возможность получить список всех клиентов-арендаторов — это то, что я ищу.

chrispytoes 21.08.2024 18:42

Да, вы можете это сделать, можете ли вы указать, какой API Microsoft Graph вы вызываете?

Rukmini 21.08.2024 18:43

@Rukmini Прямо сейчас мне просто нужно прочитать основной список пользователей для наших клиентских арендаторов, но как только я это заработаю, их, вероятно, будет больше. Затем мне также нужен способ составить список всех клиентов, чтобы получить их идентификаторы арендаторов.

chrispytoes 21.08.2024 18:45

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

Rukmini 21.08.2024 18:49

@Rukmini Добавлены требования. Мы являемся MSP, который управляет многими клиентами Azure через Центр партнеров. Я всего лишь программист, а не эксперт по Azure, поэтому я не знаком с терминологией на 100%.

chrispytoes 21.08.2024 18:52

Конечно, вы являетесь клиентом-арендатором?

Rukmini 21.08.2024 18:53

@Rukmini Я являюсь участником арендатора верхнего уровня, а приложение находится в составе арендатора верхнего уровня.

chrispytoes 21.08.2024 18:54

Чтобы выполнить ваше требование, администратор клиента клиента должен принять согласие. Возможно ли это в вашем сценарии?

Rukmini 21.08.2024 18:55

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

Rukmini 21.08.2024 18:55

@Rukmini У нас уже есть согласие GDAP на все разрешения для всех наших арендаторов. У нас есть все учетные данные администратора арендатора клиента. Я просто не хочу управлять отдельными учетными записями приложений для каждого арендатора. Я хочу получить доступ ко всем арендаторам с одинаковыми учетными данными.

chrispytoes 21.08.2024 18:57

Отлично, в ближайшее время я опубликую пошаговый ответ, чтобы привлечь пользователей других арендаторов.

Rukmini 21.08.2024 18:58
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
17
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка «В клиентском приложении 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:

  • Вы также можете напрямую сгенерировать токен доступа, используя учетную запись глобального администратора, и вы получите экран согласия для принятия разрешений вместо создания субъекта-службы на конечной точке.
  • Вы можете использовать модель токена обновления для доступа к клиентам в Центре партнеров Microsoft. Обратитесь к этой SO Thread от меня.

Ссылки:

azure — поиск информации о пользователе среди разных арендаторов Microsoft — 2 Ответа от Tiny Wang

azure — Можно ли создать пользователя (Microsoft Entra ID) для арендатора B из арендатора A? - Переполнение стека от меня

Это сработало! Спасибо. Однако теперь вторая часть моего вопроса заключалась в том, как получить список всех наших арендаторов? Мне нужен способ получить идентификаторы арендаторов для аутентификации. Я обнаружил, что у нас нет доступа к API Центра партнеров, поскольку мы являемся косвенным партнером по выставлению счетов.

chrispytoes 22.08.2024 16:06

Пожалуйста, задайте новый вопрос со всеми подробностями. Я помогу вам там и вставьте ссылку на вопрос здесь.

Rukmini 22.08.2024 16:14

Готово, спасибо stackoverflow.com/questions/78902051/…

chrispytoes 22.08.2024 16:19

Конечно проверю

Rukmini 22.08.2024 16:20

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