Поделиться через


Создание безопасного партнерского приложения

Платформу "Безопасная модель приложений" можно реализовать, создав приложение для поставщиков облачных решений (CSPs) или поставщиков панели управления (CPV).

Реализация модели безопасного приложения

шаги для включения модели безопасных приложений

Важный

Azure Active Directory (Azure AD) Graph не рекомендуется использовать с 30 июня 2023 г. В дальнейшем мы не будем делать дальнейших инвестиций в Azure AD Graph. API Azure AD Graph не имеют обязательств по соглашению об уровне обслуживания (SLA) или по обслуживанию, за исключением устранения неполадок, связанных с безопасностью. Инвестиции в новые функции и функциональные возможности будут сделаны только в Microsoft Graph.

Мы будем выводить из эксплуатации Azure AD Graph постепенно, чтобы у вас было достаточно времени для переноса ваших приложений на API Microsoft Graph. На более позднюю дату, которую мы объявим, мы заблокируем создание новых приложений с помощью Azure AD Graph.

Дополнительные сведения см. в статье Важно: прекращение использования Azure AD Graph и прекращение использования модуля PowerShell.

Создание принципала службы Партнерского центра

Сначала создайте учетную запись службы Центра партнеров Майкрософт в арендаторе партнера CSP, где будет создано многоарендное приложение.

Для арендаторов-партнеров CSP этот принципал службы уже должен существовать. Если нет, создайте, используя следующие шаги.

В окне Администратора PowerShell выполните следующие команды.

  1. Установите модуль AzureAD. Install-Module Microsoft.Graph
  2. Запустите Connect-MgGraph, это запросит имя пользователя и пароль. Введите учетные данные администратора клиента. Connect-MgGraph
  3. Создайте представителя службы в Центре партнеров Microsoft. New-MgServicePrincipal -DisplayName "Microsoft Partner Center" -AppId 00001111-aaaa-2222-bbbb-3333cccc4444

Создание мультитенантного приложения в клиенте партнера CSP

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

  1. Вход в portal.azure.com
  2. Выберите идентификатор Microsoft Entra и регистрации приложений, чтобы создать новые регистрации с поддержкой многопользовательского режима.

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

  1. Выберите отображаемое имя пользователя для приложения.
  2. Выберите поддерживаемый тип учетной записи: учетные записи в любом каталоге организации (любой каталог Microsoft Entra — Multitenant).
  3. Выберите тип платформы "Web."
  4. URL-адрес перенаправления должен быть URL-адресом перенаправления вашего приложения, который отобразит партнеру сообщение об успешном согласии и соберет маркер обновления. Убедитесь, что URL-адрес перенаправления приложения установлен в конечную точку, в которой выполняется динамическое веб-приложение. Для этого приложения необходимо принять код авторизации из запроса на вход в Microsoft Entra.
  5. Перейдите к разделу Управление>Сертификатами и & секретами>, +Новый секрет клиента на вкладке секретов клиента.

Заметка

Вам потребуется следующая информация из параметров веб-приложения в идентификаторе Microsoft Entra:

  • Идентификатор приложения
  • Секретный ключ приложения

снимок экрана: сертификаты и секреты.

Применение разрешений

Убедитесь, что для мультитенантного приложения заданы следующие разрешения.

В разделе разрешения API:

  • Не должно быть никаких прямых разрешений приложений в мультитенантном приложении.

  • Выполните приведенный ниже путь для добавления делегированных разрешений для Microsoft Graph:

    • разрешения API>Добавить разрешение>API Майкрософт>Microsoft Graph>делегированные разрешения
      • DelegatedAdminRelationship.ReadWrite.All User.Read.All

    снимок экрана с разрешениями API запроса партнерского приложения.

    • Следуйте приведенному ниже пути для добавления делегированных разрешений для Центра партнеров Майкрософт . Предоставление разрешений Центру партнеров Access в разделе Делегированные разрешения:
      • Разрешения API>Добавить разрешение>API, которые использует моя организация>Microsoft Partner Center>Делегированные разрешения>Олицетворение пользователей

    снимок экрана с разрешениями партнерского приложения A P I.

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

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

Мультитенантное приложение

Смените многопользовательский идентификатор ApplicationID на идентификатор вашего приложения.

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

Снимок экрана, показывающий клиента партнера Microsoft Entra.

Получение кода авторизации

Код авторизации для вашего веб-приложения необходимо получить через вызов входа Microsoft Entra.

  1. Войдите в Microsoft Entra ID.
  2. Замените идентификатор приложения идентификатором приложения Microsoft Entra (GUID).
  3. При получении уведомления войдите в учетную запись, где настроена многофакторная аутентификация.
  4. При появлении запроса введите другие данные многофакторной аутентификации (MFA) — номер телефона или адрес электронной почты — чтобы подтвердить вашу учетную запись.
  5. После входа браузер перенаправит вызов в конечную точку веб-приложения с кодом авторизации. Например, следующий пример кода перенаправляется на https://localhost:44395/.
GET https://login.microsoftonline.com/common/oauth2/authorize?&client_id=<CSPApplicationId>&response_type=code&redirect_url=https://<CSPApplicationUrl_which_collects_refreshtoken>

или

GET https://login.microsoftonline.com/common/oauth2/authorize?&client_id=<CSPApplicationId>&response_type=code

Для Китая используйте следующую ссылку:

GET https://login.chinacloudapi.cn/common/oauth2/authorize ?&client_id= <CSPApplicationId>&response_type=code&redirect_url= https://<CSPApplicationUrl_which_collects_refreshtoken>

или

GET https://login.chinacloudapi.cn/common/oauth2/authorize?&client_id= <CSPApplicationId>&response_type=code

Трассировка вызова кода авторизации: https://localhost:44395/?code=<authorization_code>&<rest of properties for state>

Получение токена обновления

Затем необходимо использовать код авторизации для получения токена обновления.

  1. Выполните POST-запрос к конечной точке входа Microsoft Entra https://login.microsoftonline.com/CSPTenantID/oauth2/token с кодом авторизации. Например, см. следующий пример вызова.
  2. Обратите внимание на токен обновления, который возвращается.
  3. Сохраните маркер обновления в Azure Key Vault. Дополнительные сведения см. в документации по API Key Vault .

Заметка

Ресурсы, упомянутые в приведенном ниже примере вызова POST, предназначены для GDAP-Graph API.

Ресурсы для других API ПК приведены следующим образом:

API Центра партнеров (https://api.partnercenter.microsoft.com)

GDAP API

API партнеров (https://api.partner.microsoft.com)

Пример вызова

POST  'https://login.microsoftonline.com/<partnerTenantId>/oauth2/token' \
--header 'content-type: application/x-www-form-urlencoded' \
--form 'grant_type="authorization_code"' \
--form 'client_id=<application_id or client_id>' \
--form 'resource="https://graph.microsoft.com"' \
--form 'code="<authorization_code>"'   
Response Body:

{
    "token_type": "Bearer",
    "scope": "DelegatedAdminRelationship.ReadWrite.All User.Read.All",
    "expires_in": "4549",
    "ext_expires_in": "4549",
    "expires_on": "1652886571",
    "not_before": "1652881721",
    "resource": "https://graph.microsoft.com",
    "access_token": "Access_token",
    "refresh_token": "Refresh_token",    
    "id_token": "Id_token"
}

Настройка хранилища ключей

Сначала создайте веб-приложение в клиенте партнера CSP. Если приложение CPV используется для вызова API Центра партнеров, CPV должен создать новое веб-приложение в клиенте партнера CPV.

Если вы используете Azure Key Vault:

  1. Создайте Azure Key Vault с соответствующим <key-vault-name>, что приводит к DNS-именованию наподобие: https://<key-vault-name>.vault.azure.net
  2. Добавьте токен обновления в хранилище ключей.

Предоставление доступа к хранилищу ключей

В политике доступа хранилища ключей добавьте KeyVaultAccessApp с разрешениями только для управления аспектами Get и Set для секрета.

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

Настройка прототипа

Прототип имеет два приложения:

  • Согласие партнера: представляет веб-приложение, предназначенное для получения согласия от партнера CSP и отображения сообщения об успешности.
    • Это приложение настраивает согласие и записывает маркер обновления согласия пользователя.
    • Маркер обновления согласия пользователя используется для создания маркера доступа для клиента партнера CSP.
  • приложение CSP или приложение CPV: это основное приложение, которое вызывает API Центра партнеров и граф.
    • API для выполнения коммерческих и пользовательских действий от имени партнера.

Это приложение получает маркер доступа для определенной аудитории (API Центра партнеров или Graph) перед вызовом соответствующих API. Он использует маркер обновления, который хранится безопасно в хранилище ключей.

Веб-конфигурация CSP

Для приложения партнера CSP файл web.config содержит следующие разделы. Замените эти значения соответствующими идентификаторами приложений и секретными ключами. Для основного приложения используйте "сертификат" в качестве секрета веб-приложения вместо простых секретов, так как он обеспечивает дополнительный уровень безопасности.

<!-- AppID that represents CSP application -->
<add key="ida:CSPApplicationId" value="CSPApplicationIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment.
The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:CSPApplicationSecret" value="CSPApplicationSecretValue" />
<!-- AppID that is given access for keyvault to store the refresh tokens --> <add key="ida:KeyVaultClientId" value="KeyVaultClientIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment.
The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:KeyVaultClientSecret" value="KeyVaultClientSecretValue" />
<!-- AAD instance: Global is .com, for different national clouds it changes German cloud: .de, China cloud: login.chinacloudapi.cn -->
<add key="ida:AADInstance" value="https://login.microsoftonline.com/" />

Конфигурация приложения CSP

Для партнерского приложения CSP в файле app.config указаны следующие разделы. Обновите значения, используя соответствующие идентификаторы приложений и секреты. Для основного приложения используйте "сертификат" в качестве секрета веб-приложения вместо простых секретов, так как он обеспечивает дополнительный уровень безопасности.

<!-- AppID that represents CSP application -->
<add key="ida:CPVApplicationId" value="CPVApplicationIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment. The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:CPVApplicationSecret" value="CPVApplicationSecretValue" />
<!-- AppID that is given access for keyvault to store the refresh tokens -->
<add key="ida:KeyVaultClientId" value="KeyVaultClientIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment. The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:KeyVaultClientSecret" value="KeyVaultClientSecretValue" />
<!-- AAD instance: Global is .com, for different national clouds it changes German cloud: .de,
China cloud: login.chinacloudapi.cn -->
<add key="ida:AADInstance" value="https://login.microsoftonline.com/" />

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

Веб-конфигурация CPV

Для приложения партнера CSP файл web.config содержит следующие разделы. Замените эти значения соответствующими идентификаторами приложений и секретными ключами. Для основного приложения используйте "сертификат" в качестве секрета веб-приложения вместо простых секретов, так как он обеспечивает дополнительный уровень безопасности.

<!-- AppID that represents Control panel vendor application -->
<add key="ida:CPVApplicationId" value="CPVApplicationIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment. The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:CPVApplicationSecret" value="CPVApplicationSecretValue" />
<!-- AppID that is given access for keyvault to store the refresh tokens -->
<add key="ida:KeyVaultClientId" value="KeyVaultClientIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment. The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:KeyVaultClientSecret" value="KeyVaultClientSecretValue" />
<!-- AAD instance: Global is .com, for different national clouds it changes German cloud: .de, China cloud: login.chinacloudapi.cn -->
<add key="ida:AADInstance" value="https://login.microsoftonline.com/" />

Конфигурация приложения CPV

Для партнёрского приложения CPV в файле app.config выделены следующие разделы. Обновите значения, заменив их соответствующими идентификаторами приложений и секретами. Для основного приложения используйте "сертификат" в качестве секрета веб-приложения вместо простых секретов, так как он обеспечивает дополнительный уровень безопасности.

<!-- AppID that represents Control panel vendor application -->
<add key="ida:CPVApplicationId" value="CPVApplicationIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment. The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:CPVApplicationSecret" value="CPVApplicationSecretValue" />
<!-- AppID that is given access for keyvault to store the refresh tokens -->
<add key="ida:KeyVaultClientId" value="KeyVaultClientIdValue" />
<!--
Please use certificate as your client secret and deploy the certificate to your environment. The following application secret is for sample application only. please do not use secret directly from the config file.
-->
<add key="ida:KeyVaultClientSecret" value="KeyVaultClientSecretValue" />
<!-- AAD instance: Global is .com, for different national clouds it changes German cloud: .de, China cloud: login.chinacloudapi.cn -->
<add key="ida:AADInstance" value="https://login.microsoftonline.com/" />