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


Проверка подлинности в Центре партнеров

Область применения: Центр партнеров | Центр партнеров, управляемый 21Vianet | Центр партнеров для Microsoft Cloud for US Government

Центр партнеров использует Microsoft Entra ID для проверки подлинности. При взаимодействии с API, пакетом SDK или модулем PowerShell Центра партнеров вам нужно правильно настроить приложение Microsoft Entra и получить токен доступа. Для Центра партнеров можно использовать маркеры доступа, полученные в ходе проверки подлинности приложения или приложения и пользователя. Но необходимо учитывать два важных момента.

  • Используйте многофакторную проверку подлинности при доступе к API Центра партнеров с помощью проверки подлинности приложения и пользователя. См. сведения об этом изменении в руководстве по включению Модели безопасных приложений.

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

Внимание

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

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

Дополнительные сведения см. в статье "Важно: выход на пенсию в Azure AD Graph и отключение модуля PowerShell".

Начальная настройка

  1. Для начала вам нужно убедиться, что у вас есть основная учетная запись Центра партнеров и учетная запись Центра партнеров для песочницы интеграции. Дополнительные сведения см. в разделе "Настройка учетных записей Центра партнеров" для доступа к API. Запишите идентификатор регистрации приложения Microsoft Entra и секрет (секрет клиента требуется только для идентификации приложения) для основной учетной записи и учетной записи песочницы интеграции.

  2. Войдите в идентификатор Microsoft Entra из портал Azure. В разделе Разрешения для других приложений установите для Windows Azure Active Directory режим Делегированные разрешения и выберите Доступ к каталогу, аналогичный доступу вошедшего пользователя и Вход в систему и чтение профиля пользователя.

  3. На портале Azure выберите Добавить приложение. Найдите "Центр партнеров Майкрософт", который является приложением Центра партнеров Майкрософт. Для параметра Делегированные разрешения задайте значение Доступ к API Центра партнеров. Если вы используете Центр партнеров для Microsoft Cloud для государственных организаций США, этот шаг является обязательным. Если вы используете глобальный экземпляр Центра партнеров, этот шаг является необязательным. Партнеры CSP могут использовать функцию управления приложениями в Центре партнеров для обхода этого шага для глобального экземпляра Центра партнеров.

Проверка подлинности для приложения

Если вы хотите использовать только проверку подлинности приложений, чтобы обращаться к REST API, API .NET, Java API или модулю PowerShell Центра партнеров, вы можете сделать это, используя приведенные ниже инструкции.

.NET (проверка подлинности приложения)

public static IAggregatePartner GetPartnerCenterTokenUsingAppCredentials()
{
    IPartnerCredentials partnerCredentials =
        PartnerCredentials.Instance.GenerateByApplicationCredentials(
            PartnerApplicationConfiguration.ApplicationId,
            PartnerApplicationConfiguration.ApplicationSecret,
            PartnerApplicationConfiguration.ApplicationDomain);

    // Create operations instance with partnerCredentials.
    return PartnerService.Instance.CreatePartnerOperations(partnerCredentials);
}

Java (проверка подлинности приложения)

Пакет SDK для Java центра партнеров можно использовать для управления ресурсами Центра партнеров. Это проект с открытым исходным кодом, поддерживаемый сообществом партнеров и официально не поддерживаемый корпорацией Майкрософт. При необходимости вы можете получить помощь от сообщества или опубликовать проблему в GitHub.

public IAggregatePartner getAppPartnerOperations()
{
    IPartnerCredentials appCredentials =
        PartnerCredentials.getInstance().generateByApplicationCredentials(
        PartnerApplicationConfiguration.getApplicationId(),
        PartnerApplicationConfiguration.getApplicationSecret(),
        PartnerApplicationConfiguration.getApplicationDomain());

    return PartnerService.getInstance().createPartnerOperations( appCredentials );
}

REST (проверка подлинности приложения)

Запрос REST

POST https://login.microsoftonline.com/{tenantId}/oauth2/token HTTP/1.1
Accept: application/json
return-client-request-id: true
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: login.microsoftonline.com
Content-Length: 194
Expect: 100-continue

resource=https%3A%2F%2Fgraph.windows.net&client_id={client-id-here}&client_secret={client-secret-here}&grant_type=client_credentials

Ответ REST

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 1406

{"token_type":"Bearer","expires_in":"3600","ext_expires_in":"3600","expires_on":"1546469802","not_before":"1546465902","resource":"https://graph.windows.net","access_token":"value-has-been-removed"}

Проверка подлинности приложения и пользователя

Модель безопасного приложения теперь используется для обеспечения безопасной, масштабируемой и будущей проверки подлинности для доступа к API Центра партнеров. Этот подход повышает безопасность с помощью современных механизмов проверки подлинности, таких как маркеры доступа только для приложений и приложений и приложений и пользователей через Azure AD. Дополнительные сведения см. в статье Включение инфраструктуры безопасной модели приложений.

Процесс согласия партнера — это интерактивный процесс, в котором партнер проходит проверку подлинности с помощью многофакторной проверки подлинности, дает согласие приложению, а маркер обновления хранится в защищенном репозитории, например Azure Key Vault. При этом мы рекомендуем использовать специальную учетную запись для интеграции.

Внимание

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

Пример использования проверки подлинности приложения и пользователя

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

.NET (проверка подлинности приложения и пользователя)

Пример проекта с демонстрацией предоставления согласия партнера предоставляет созданный на базе ASP.NET веб-сайт для получения согласия, запрашивания маркера обновления и его безопасного хранения в Azure Key Vault. Чтобы подготовить все предварительные условия для этого примера, выполните следующие действия.

  1. Создайте экземпляр Azure Key Vault с помощью портала Azure или указанных ниже команд PowerShell. Перед выполнением команды не забудьте изменить значения параметров. Имя хранилища должно быть уникальным.

    Login-AzureRmAccount
    
    # Create a new resource group
    New-AzureRmResourceGroup -Name ContosoResourceGroup -Location EastUS
    
    New-AzureRmKeyVault -Name 'Contoso-Vault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East US'
    

    Дополнительные сведения о создании Azure Key Vault см. в кратком руководстве по настройке и извлечению секрета из Azure Key Vault с помощью портал Azure или краткого руководства. Настройка и получение секрета из Azure Key Vault с помощью PowerShell. Затем настройте и получите секрет.

  2. Создайте приложение Microsoft Entra и ключ с помощью портал Azure или следующих команд.

    Connect-MgGraph -Scopes "Application.ReadWrite.OwnedBy"
    
    $Context = Get-MgContext
    
    $app = New-MgApplication -DisplayName 'My Vault Access App' -Web @{ RedirectUris = 'https://$($Context.TenantId)/$((New-Guid).ToString())' }
    $password = Add-MgApplicationPassword -ApplicationId $app.AppId
    
    Write-Host "ApplicationId       = $($app.AppId)"
    Write-Host "ApplicationSecret   = $($password.SecretText)"
    

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

  3. Предоставьте только что созданное приложение Microsoft Entra разрешения на чтение секретов с помощью портал Azure или следующих команд.

    # Connect to Microsoft Graph
    Connect-MgGraph -Scopes "User.Read"
    
    # Get the application
    $app = Get-MgApplication -Filter "appId eq 'ENTER-APP-ID-HERE'"
    
    # Set the Key Vault access policy
    Set-AzKeyVaultAccessPolicy -VaultName ContosoVault -ObjectId $app.Id -PermissionsToSecrets get
    
  4. Создайте приложение Microsoft Entra, настроенное для Центра партнеров. Для выполнения этого шага используйте следующие действия.

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

  5. Клонируйте репозиторий Partner-Center-DotNet-Samples с помощью Visual Studio или приведенной ниже команды.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  6. Откройте проект PartnerConsent из каталога Partner-Center-DotNet-Samples\secure-app-model\keyvault.

  7. Укажите параметры приложения в файле web.config.

    <!-- AppID that represents CSP application -->
    <add key="ida:CSPApplicationId" value="" />
    <!--
        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="" />
    
    <!--
        Endpoint address for the instance of Azure KeyVault. This is
        the DNS Name for the instance of Key Vault that you provisioned.
     -->
    <add key="KeyVaultEndpoint" value="" />
    
    <!-- App ID that is given access for KeyVault to store refresh tokens -->
    <add key="ida:KeyVaultClientId" value="" />
    
    <!--
        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="" />
    

    Внимание

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

  8. При запуске этого примера проекта он запрашивает проверку подлинности. После успешной проверки подлинности маркер доступа запрашивается из идентификатора Microsoft Entra. Сведения, возвращаемые идентификатором Microsoft Entra, включают маркер обновления, хранящийся в настроенном экземпляре Azure Key Vault.

Java (проверка подлинности приложения и пользователя)

Пример проекта с демонстрацией предоставления согласия партнера предоставляет созданный на JSP веб-сайт для получения согласия, запрашивания маркера обновления и его безопасного хранения в Azure Key Vault. Чтобы подготовить все предварительные условия для этого примера, выполните следующее.

  1. Создайте экземпляр Azure Key Vault с помощью портала Azure или указанных ниже команд PowerShell. Перед выполнением команды не забудьте изменить значения параметров. Имя хранилища должно быть уникальным.

    Login-AzureRmAccount
    
    # Create a new resource group
    New-AzureRmResourceGroup -Name ContosoResourceGroup -Location EastUS
    
    New-AzureRmKeyVault -Name 'Contoso-Vault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East US'
    

    Дополнительные сведения о создании Azure Key Vault см. в кратком руководстве по настройке и извлечению секрета из Azure Key Vault с помощью портал Azure или краткого руководства. Настройка и получение секрета из Azure Key Vault с помощью PowerShell.

  2. Создайте приложение Microsoft Entra и ключ с помощью портал Azure или следующих команд.

    Connect-MgGraph -Scopes "Application.ReadWrite.OwnedBy"
    
    $Context = Get-MgContext
    
    $app = New-MgApplication -DisplayName 'My Vault Access App' -IdentifierUri 'https://$($Context.TenantDomain)/$((New-Guid).ToString())'
    $password = Add-MgApplicationPassword -ApplicationId $app.AppId
    
    Write-Host "ApplicationId       = $($app.AppId)"
    Write-Host "ApplicationSecret   = $($password.SecretText)"
    

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

  3. Предоставьте созданному приложению Microsoft Entra разрешения на чтение секретов с помощью портал Azure или следующих команд.

    Connect-MgGraph -Scopes "User.Read"
    $app = Get-MgApplication -Filter "appId eq 'ENTER-APP-ID-HERE'"
    
    Set-AzKeyVaultAccessPolicy -VaultName ContosoVault -ObjectId $app.Id -PermissionsToSecrets get
    
  4. Создайте приложение Microsoft Entra, настроенное для Центра партнеров. Для этого сделайте следующее:

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

  5. Клонируйте репозиторий Partner-Center-Java-Samples с помощью следующей команды.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  6. Откройте проект PartnerConsent из каталога Partner-Center-Java-Samples\secure-app-model\keyvault.

  7. Укажите параметры приложения в файле web.xml.

    <filter>
        <filter-name>AuthenticationFilter</filter-name>
        <filter-class>com.microsoft.store.samples.partnerconsent.security.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>client_id</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>client_secret</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_base_url</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_client_id</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_client_secret</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>keyvault_certifcate_path</param-name>
            <param-value></param-value>
        </init-param>
    </filter>
    

    Внимание

    Конфиденциальные сведения, такие как секреты приложений, нельзя хранить в файлах конфигурации. Здесь это делается, так как мы используем пример приложения. В рабочем приложении мы настоятельно рекомендуем использовать проверку подлинности на основе сертификатов. См. сведения об аутентификации на основе сертификата Key Vault.

  8. При запуске этого примера проекта он запрашивает проверку подлинности. После успешной проверки подлинности маркер доступа запрашивается из идентификатора Microsoft Entra. Сведения, возвращаемые идентификатором Microsoft Entra, включают маркер обновления, хранящийся в настроенном экземпляре Azure Key Vault.

Проверка подлинности в программе "Поставщик облачных решений"

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

Примеры проверки подлинности в программе "Поставщик облачных решений"

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

.NET (проверка подлинности CSP)

  1. Если вы еще этого не сделали, выполните процесс согласия партнера.

  2. Клонируйте репозиторий Partner-Center-DotNet-Samples с помощью Visual Studio или приведенной ниже команды.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Откройте проект CSPApplication из каталога Partner-Center-DotNet-Samples\secure-app-model\keyvault.

  4. Измените параметры приложения в файле App.config.

    <!-- AppID that represents CSP application -->
    <add key="ida:CSPApplicationId" value="" />
    <!--
        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="" />
    
    <!-- Endpoint address for the instance of Azure KeyVault -->
    <add key="KeyVaultEndpoint" value="" />
    
    <!-- AppID that is given access for keyvault to store the refresh tokens -->
    <add key="ida:KeyVaultClientId" value="" />
    
    <!--
        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="" />
    
  5. Установите фактические значения для переменных PartnerId и CustomerId в файле Program.cs.

    // The following properties indicate which partner and customer context the calls are going to be made.
    string PartnerId = "<Partner tenant id>";
    string CustomerId = "<Customer tenant id>";
    
  6. При выполнении этого примера проекта он получает свежий маркер, созданный в процессе предоставления согласия партнера. После этого он запрашивает маркер доступа для взаимодействия с SDK Центра партнеров от имени этого партнера. Наконец, он запрашивает маркер доступа для взаимодействия с Microsoft Graph от имени указанного клиента.

Java (проверка подлинности CSP)

  1. Если вы этого еще не сделали, выполните процесс согласия партнера.

  2. Клонируйте репозиторий Partner-Center-Java-Samples с помощью Visual Studio или приведенной ниже команды.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Откройте проект cspsample из каталога Partner-Center-Java-Samples\secure-app-model\keyvault.

  4. Измените параметры приложения в файле application.properties.

    azuread.authority=https://login.microsoftonline.com
    keyvault.baseurl=
    keyvault.clientId=
    keyvault.clientSecret=
    partnercenter.accountId=
    partnercenter.clientId=
    partnercenter.clientSecret=
    
  5. При выполнении этого примера проекта он получает свежий маркер, созданный в процессе предоставления согласия партнера. После этого он запрашивает маркер доступа для взаимодействия с SDK Центра партнеров от имени этого партнера.

  6. (Необязательно) Раскомментируйте вызовы функций RunAzureTask и RunGraphTask, если вы хотите увидеть пример взаимодействия с Azure Resource Manager и Microsoft Graph от имени клиента.

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

Поставщики панелей управления должны выполнить процесс предоставления согласия партнера для каждого поддерживаемого партнера. После этого для получения доступа к REST API и .NET API Центра партнеров используется маркер обновления, полученный в ходе этого процесса.

Примечание.

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

Примеры проверки подлинности поставщиков панелей управления

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

.NET (проверка подлинности CPV)

  1. Разработайте и разверните процесс, который позволит партнерам по программе "Поставщик облачных решений" предоставить необходимое согласие. См. сведения о предоставлении согласия партнеров.

    Внимание

    Учетные данные пользователя, полученные от партнера CSP, не следует хранить. Маркер обновления, полученный в ходе процесса предоставления согласия партнера, нужно сохранить и использовать для запрашивания маркеров доступа для взаимодействия с любыми API корпорации Майкрософт.

  2. Клонируйте репозиторий Partner-Center-DotNet-Samples с помощью Visual Studio или приведенной ниже команды.

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Откройте проект CPVApplication из каталога Partner-Center-DotNet-Samples\secure-app-model\keyvault.

  4. Измените параметры приложения в файле App.config.

    <!-- AppID that represents Control panel vendor application -->
    <add key="ida:CPVApplicationId" value="" />
    
    <!--
        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="" />
    
    <!-- Endpoint address for the instance of Azure KeyVault -->
    <add key="KeyVaultEndpoint" value="" />
    
    <!-- AppID that is given access for keyvault to store the refresh tokens -->
    <add key="ida:KeyVaultClientId" value="" />
    
    <!--
        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="" />
    
  5. Установите фактические значения для переменных PartnerId и CustomerId в файле Program.cs.

    // The following properties indicate which partner and customer context the calls are going to be made.
    string PartnerId = "<Partner tenant id>";
    string CustomerId = "<Customer tenant id>";
    
  6. При выполнении этого примера проекта предоставляется свежий маркер для указанного партнера. После этого он запрашивает маркер доступа к Центру партнеров и Microsoft Graph от имени этого партнера. Затем выполняется удаление и создание делегированных разрешений в клиенте пользователя. Так как между поставщиком панели управления и клиентом не существует прямых отношений, такие разрешения нужно добавлять через API Центра партнеров. В следующем примере показано, как это сделать.

    JObject contents = new JObject
    {
        // Provide your application display name
        ["displayName"] = "CPV Marketplace",
    
        // Provide your application id
        ["applicationId"] = CPVApplicationId,
    
        // Provide your application grants
        ["applicationGrants"] = new JArray(
            JObject.Parse("{\"enterpriseApplicationId\": \"00000003-0000-0000-c000-000000000000\", \"scope\":\"Domain.ReadWrite.All,User.ReadWrite.All,Directory.Read.All\"}"), // for Microsoft Graph access,  Directory.Read.All
            JObject.Parse("{\"enterpriseApplicationId\": \"797f4846-ba00-4fd7-ba43-dac1f8f63013\", \"scope\":\"user_impersonation\"}")) // for Azure Resource Manager access
    };
    
    /**
     * The following steps have to be performed once per customer tenant if your application is
     * a control panel vendor application and requires customer tenant Microsoft Graph access.
     **/
    
    // delete the previous grant into customer tenant
    JObject consentDeletion = await ApiCalls.DeleteAsync(
        tokenPartnerResult.Item1,
        string.Format("https://api.partnercenter.microsoft.com/v1/customers/{0}/applicationconsents/{1}", CustomerId, CPVApplicationId));
    
    // create new grants for the application given the setting in application grants payload.
    JObject consentCreation = await ApiCalls.PostAsync(
        tokenPartnerResult.Item1,
        string.Format("https://api.partnercenter.microsoft.com/v1/customers/{0}/applicationconsents", CustomerId),
        contents.ToString());
    

После создания нужных разрешений в этом примере выполняются операции с Microsoft Graph от имени клиента.

Примечание.

Для получения дополнительных сведений см. обзор Microsoft Graph.

Java (проверка подлинности CPV)

  1. Разработайте и разверните процесс, который позволит партнерам по программе "Поставщик облачных решений" предоставить необходимое согласие. См. пример и сведения о предоставлении согласия партнеров.

    Внимание

    Учетные данные пользователя, полученные от партнера CSP, не следует хранить. Маркер обновления, полученный в ходе процесса предоставления согласия партнера, нужно сохранить и использовать для запрашивания маркеров доступа для взаимодействия с любыми API корпорации Майкрософт.

  2. Клонируйте репозиторий Partner-Center-Java-Samples с помощью следующей команды.

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Откройте проект cpvsample из каталога Partner-Center-Java-Samples\secure-app-model\keyvault.

  4. Измените параметры приложения в файле application.properties.

    azuread.authority=https://login.microsoftonline.com
    keyvault.baseurl=
    keyvault.clientId=
    keyvault.clientSecret=
    partnercenter.accountId=
    partnercenter.clientId=
    partnercenter.clientSecret=
    partnercenter.displayName=
    

    В качестве значения для partnercenter.displayName нужно предоставить отображаемое имя приложения в Marketplace.

  5. Установите фактические значения для переменных partnerId и customerId в файле Program.java.

    partnerId = "SPECIFY-THE-PARTNER-TENANT-ID-HERE";
    customerId = "SPECIFY-THE-CUSTOMER-TENANT-ID-HERE";
    
  6. При выполнении этого примера проекта предоставляется свежий маркер для указанного партнера. После этого он запрашивает маркер доступа для взаимодействия Центром партнеров от имени этого партнера. Затем выполняется удаление и создание делегированных разрешений в клиенте пользователя. Так как между поставщиком панели управления и клиентом не существует прямых отношений, такие разрешения нужно добавлять через API Центра партнеров. В следующем примере показано, как предоставить разрешения.

    ApplicationGrant azureAppGrant = new ApplicationGrant();
    
    azureAppGrant.setEnterpriseApplication("797f4846-ba00-4fd7-ba43-dac1f8f63013");
    azureAppGrant.setScope("user_impersonation");
    
    ApplicationGrant graphAppGrant = new ApplicationGrant();
    
    graphAppGrant.setEnterpriseApplication("00000002-0000-0000-c000-000000000000");
    graphAppGrant.setScope("Domain.ReadWrite.All,User.ReadWrite.All,Directory.Read.All");
    
    ApplicationConsent consent = new ApplicationConsent();
    
    consent.setApplicationGrants(Arrays.asList(azureAppGrant, graphAppGrant));
    consent.setApplicationId(properties.getProperty(PropertyName.PARTNER_CENTER_CLIENT_ID));
    consent.setDisplayName(properties.getProperty(PropertyName.PARTNER_CENTER_DISPLAY_NAME));
    
    // Deletes the existing grant into the customer it is present.
    partnerOperations.getServiceClient().delete(
        partnerOperations,
        new TypeReference<ApplicationConsent>(){},
        MessageFormat.format(
            "customers/{0}/applicationconsents/{1}",
            customerId,
            properties.getProperty(PropertyName.PARTNER_CENTER_CLIENT_ID)));
    
    // Consent to the defined applications and the respective scopes.
    partnerOperations.getServiceClient().post(
        partnerOperations,
        new TypeReference<ApplicationConsent>(){},
        MessageFormat.format(
            "customers/{0}/applicationconsents",
            customerId),
        consent);
    

Раскомментируйте вызовы функций RunAzureTask и RunGraphTask, если вы хотите увидеть пример взаимодействия с Azure Resource Manager и Microsoft Graph от имени клиента.