パートナー センターの認証

適用対象: パートナー センター | 21Vianet が運営するパートナー センター | Microsoft Cloud for US Government のパートナー センター

パートナー センターでは、認証に Microsoft Entra ID が使用されます。 パートナー センター API、SDK、または PowerShell モジュールを使ってやり取りする場合は、Microsoft Entra アプリケーションを正しく構成してから、アクセス トークンを要求する必要があります。 パートナー センターでは、アプリのみの認証、またはアプリとユーザー認証を使用して取得したアクセス トークンを使用できます。 ただし、考慮する必要がある重要な項目が 2 つあります。

  • アプリ + ユーザー認証を使用してパートナー センター API にアクセスする場合は、多要素認証を使用します。 この変更に関する詳細については、セキュリティで保護されたアプリケーション モデルの有効化に関する記事をご覧ください。

  • 一部の操作については、パートナー センター API はアプリのみの認証をサポートしていません。 アプリとユーザー認証を使用する必要がある特定のシナリオがあります。 各記事の「前提条件」の見出しの下には、アプリのみの認証、アプリ + ユーザー認証、またはその両方がサポートされているかどうかを示すドキュメントがあります。

重要

Azure Active Directory (Azure AD) Graph は、2023 年 6 月 30 日の時点で非推奨となっています。 今後、Azure AD Graph への投資は行いません。 Azure AD Graph API には、セキュリティ関連の修正プログラムを超える SLA またはメインテナント コミットメントはありません。 新機能への投資は Microsoft Graph に対してのみ行われます。

アプリケーションを Microsoft Graph API に移行するのに十分な時間を確保できるように、段階的な手順で Azure AD Graph を廃止します。 後日お知らせしますが、Azure AD Graph を使用して新しいアプリケーションの作成をブロックします。

詳細については、「重要: Azure AD Graph の廃止と PowerShell モジュールの廃止」を参照してください

初期設定

  1. 最初に、プライマリ パートナー センター アカウントと統合サンドボックス パートナー センター アカウントの両方があることを確認する必要があります。 詳細については、「API アクセス用にパートナー センター アカウントを設定する」を参照してください。 プライマリ アカウントと統合サンドボックス アカウントの両方の Microsoft Entra App 登録 ID とシークレット (アプリのみの識別にはクライアント シークレットが必要) をメモしておきます。

  2. Azure portal から Microsoft Entra ID にサインインします。 [他のアプリケーションに対するアクセス許可] で、Windows Azure Active Directory のアクセス許可を [委任されたアクセス許可] に設定し、[サインインしたユーザーとしてディレクトリにアクセスします][サインインとユーザー プロファイルの読み取り] の両方を選択します。

  3. Azure portal で、[アプリケーションの追加] を選択します。 Microsoft パートナー センター アプリケーションである "Microsoft パートナー センター" を検索します。 [委任されたアクセス許可][Access Partner Center API]\(パートナー センター API へのアクセス\) に設定します。 米国政府機関向け Microsoft Cloud のパートナー センターを使用している場合、この手順は必須です。 パートナー センター グローバル インスタンスを使用している場合、この手順は省略可能です。 CSP パートナーは、パートナー センターのアプリ管理機能を使用して、パートナー センター のグローバル インスタンスに対してこの手順をバイパスできます。

アプリのみの認証

アプリのみの認証を使用してパートナー センター REST API、.NET API、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 (アプリのみの認証)

パートナー センター Java SDK を使用して、パートナー センター リソースを管理できます。 これは、パートナー コミュニティによってメインされ、Microsoft によって正式にサポートされていないオープンソース プロジェクトです。 問題が発生した場合は、コミュニティから支援を得るか、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"}

アプリとユーザー認証

これまで、リソース所有者のパスワード資格情報の付与は、パートナー センター REST API、.NET API、Java API、または PowerShell モジュールで使用するアクセス トークンを要求するために使用されてきました。 このメソッドは、クライアント識別子とユーザー資格情報を使用して Microsoft Entra ID からアクセス トークンを要求するために使用されました。 ただし、アプリ + ユーザー認証を使用する場合、パートナー センターでは多要素認証が必要になるため、この方法は機能しなくなります。 この要件に準拠するために、Microsoft は、多要素認証を使用して クラウド ソリューション プロバイダー (CSP) パートナーとコントロール パネル ベンダー (CPV) を認証するための、セキュリティで保護されたスケーラブルなフレームワークを導入しました。 このフレームワークはセキュリティで保護されたアプリケーション モデルと呼ばれ、同意プロセスと、更新トークンを使用したアクセス トークンの要求で構成されます。

パートナーの同意プロセスは、パートナーが多要素認証を使用して認証し、アプリケーションに同意し、更新トークンが Azure Key Vault などのセキュリティで保護されたリポジトリに格納される対話型プロセスです。 このプロセスには、統合のための専用アカウントを使用することをお勧めします。

重要

パートナーの同意プロセスで使用されるサービス アカウントに対して、適切な多要素認証ソリューションを有効にする必要があります。 そうしない場合、結果として得られる更新トークンは、セキュリティ要件に準拠しなくなります。

アプリとユーザー認証のサンプル

パートナーの同意プロセスは、さまざまな方法で実行できます。 パートナーが必要な各操作を実行する方法を理解できるように、次のサンプルを開発しました。 環境内に適切なソリューションを実装する場合は、コーディング標準とセキュリティ ポリシーに準拠したソリューションを開発することが重要です。

.NET (アプリとユーザー認証)

パートナーの同意サンプル プロジェクトでは、ASP.NET を使用して開発された Web サイトを利用して、同意を取得し、更新トークンを要求してから、それを Azure Key Vault に安全に格納する方法を示しています。 このサンプルに必要な前提条件を作成するには、次の手順を実行します。

  1. Azure portal または次の PowerShell コマンドを使用して、Azure Key Vault のインスタンスを作成します。 このコマンドを実行する前に、必ずパラメーター値を適宜変更してください。 コンテナー名は一意である必要があります。

    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 Portal を使用して Azure Key Vault からシークレットを設定および取得する」または 「クイック スタート: PowerShell を使用して Azure Key Vault からシークレットを設定および取得する」を参照してください。 次に、シークレットを設定して取得します。

  2. Azure portal または次のコマンドを使用して、Microsoft Entra アプリケーションとキーを作成します。

    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. Azure portal または次のコマンドを使用して、新しく作成した Microsoft Entra アプリケーションにシークレットの読み取りアクセス許可を付与します。

    # 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 アプリケーションを作成します。 この手順を完了するには、次の操作を実行します。

    • パートナー センターの アプリ管理機能 を参照する
    • [新しい Web アプリの追加] を選択して、新しい Microsoft Entra アプリケーションを作成します。

    "アプリ ID"、"アカウント ID"*、および "キー" の値は、以下の手順で使用するため、必ず文書化してください。

  5. Visual Studio または次のコマンドを使用して、Partner-Center-DotNet-Samples リポジトリを複製します。

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  6. Partner-Center-DotNet-Samples\secure-app-model\keyvault ディレクトリにある PartnerConsent プロジェクトを開きます。

  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 ID からアクセス トークンが要求されます。 Microsoft Entra ID から返される情報には、Azure Key Vault の構成済みインスタンスに格納される更新トークンが含まれます。

Java (アプリとユーザー認証)

パートナーの同意サンプル プロジェクトでは、JSP を使用して開発された Web サイトを利用して、同意を取得し、更新トークンを要求してから、それを Azure Key Vault に安全に格納する方法を示しています。 このサンプルに必要な前提条件を作成するには、以下を実行します。

  1. Azure portal または次の PowerShell コマンドを使用して、Azure Key Vault のインスタンスを作成します。 このコマンドを実行する前に、必ずパラメーター値を適宜変更してください。 コンテナー名は一意である必要があります。

    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 Portal を使用して Azure Key Vault からシークレットを設定および取得する」または 「クイック スタート: PowerShell を使用して Azure Key Vault からシークレットを設定および取得する」を参照してください。

  2. Azure portal または次のコマンドを使用して、Microsoft Entra アプリケーションとキーを作成します。

    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. Azure portal または次のコマンドを使用して、新しく作成された Microsoft Entra アプリケーションにシークレットの読み取りアクセス許可を付与します。

    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 アプリケーションを作成します。 この手順を完了するには、以下を実行します。

    • パートナー センターの アプリ管理機能 を参照する
    • [新しい Web アプリの追加] を選択して、新しい Microsoft Entra アプリケーションを作成します。

    "アプリ ID"、"アカウント ID"*、および "キー" の値は、以下の手順で使用するため、必ず文書化してください。

  5. 次のコマンドを使用して、Partner-Center-Java-Samples リポジトリを複製します

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  6. Partner-Center-Java-Samples\secure-app-model\keyvault ディレクトリにある PartnerConsent プロジェクトを開きます。

  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 ID からアクセス トークンが要求されます。 Microsoft Entra ID から返される情報には、Azure Key Vault の構成済みインスタンスに格納される更新トークンが含まれます。

クラウド ソリューション プロバイダー認証

クラウド ソリューション プロバイダー パートナーは、パートナーの同意プロセスを通じて取得した更新トークンを使用できます。

クラウド ソリューション プロバイダー認証のサンプル

パートナーが必要な各操作を実行する方法を理解できるように、次のサンプルを開発しました。 環境内に適切なソリューションを実装する場合は、コーディング標準とセキュリティ ポリシーに準拠したソリューションを開発することが重要です。

.NET (CSP 認証)

  1. まだ行っていない場合は、パートナーの同意プロセスを実行します

  2. Visual Studio または次のコマンドを使用して、Partner-Center-DotNet-Samples リポジトリを複製します

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Partner-Center-DotNet-Samples\secure-app-model\keyvault ディレクトリにある CSPApplication プロジェクトを開きます。

  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. Program.cs ファイルにある PartnerId および CustomerId 変数に適切な値を設定します。

    // 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. Visual Studio または次のコマンドを使用して、Partner-Center-Java-Samples リポジトリを複製します

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Partner-Center-Java-Samples\secure-app-model\keyvault ディレクトリにある cspsample プロジェクトを開きます。

  4. application.properties ファイルにあるアプリケーション設定を更新します。

    azuread.authority=https://login.microsoftonline.com
    keyvault.baseurl=
    keyvault.clientId=
    keyvault.clientSecret=
    partnercenter.accountId=
    partnercenter.clientId=
    partnercenter.clientSecret=
    
  5. このサンプル プロジェクトは、実行すると、パートナーの同意プロセス中に取得された更新トークンを取得します。 これは次に、パートナーの代わりにパートナー センター SDK と対話するためのアクセス トークンを要求します。

  6. 省略可能 - 顧客に代わって Azure Resource Manager および Microsoft Graph と対話する方法を確認する場合は、RunAzureTaskRunGraphTask 関数呼び出しのコメントを解除します。

コントロール パネル プロバイダー認証

コントロール パネル ベンダーは、サポートを提供する対象の各パートナーにパートナーの同意プロセスを実行してもらう必要があります。 これが完了すると、そのプロセスを通じて取得された更新トークンを使用して、パートナー センター REST API と .NET API にアクセスします。

Note

コントロール パネル ベンダーは、顧客のテナントで少なくともクラウド アプリケーション管理者ロールを持っている必要があります。

クラウド パネル プロバイダー認証のサンプル

コントロール パネルベンダーが必要な各操作の実行方法を理解できるように、次のサンプルを開発しました。 環境内に適切なソリューションを実装する場合は、コーディング標準とセキュリティ ポリシーに準拠したソリューションを開発することが重要です。

.NET (CPV 認証)

  1. 適切な同意を得るために、クラウド ソリューション プロバイダー パートナー向けのプロセスを開発してデプロイします。 詳細と例については、「パートナーの同意」を参照してください。

    重要

    クラウド ソリューション プロバイダー パートナーからのユーザー資格情報は格納しないでください。 パートナーの同意プロセスを通じて取得した更新トークンは、保存し、Microsoft API と対話するためのアクセス トークンを要求するために使用する必要があります。

  2. Visual Studio または次のコマンドを使用して、Partner-Center-DotNet-Samples リポジトリを複製します

    git clone https://github.com/Microsoft/Partner-Center-DotNet-Samples.git
    
  3. Partner-Center-DotNet-Samples\secure-app-model\keyvault ディレクトリにある CPVApplication プロジェクトを開きます。

  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. Program.cs ファイルにある PartnerId および CustomerId 変数に適切な値を設定します。

    // 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 を使用して操作を実行します。

Note

Microsoft Graph の詳細については、「Microsoft Graph の概要」をご覧ください。

Java (CPV 認証)

  1. 適切な同意を得るために、クラウド ソリューション プロバイダー パートナー向けのプロセスを開発してデプロイします。 詳細と例については、「パートナーの同意」を参照してください。

    重要

    クラウド ソリューション プロバイダー パートナーからのユーザー資格情報は格納しないでください。 パートナーの同意プロセスを通じて取得した更新トークンは、保存し、Microsoft API と対話するためのアクセス トークンを要求するために使用する必要があります。

  2. 次のコマンドを使用して、Partner-Center-Java-Samples リポジトリを複製します

    git clone https://github.com/Microsoft/Partner-Center-Java-Samples.git
    
  3. Partner-Center-Java-Samples\secure-app-model\keyvault ディレクトリにある cpvsample プロジェクトを開きます。

  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 の値は、お使いのマーケットプレース アプリケーションの表示名にする必要があります。

  5. Program.java ファイルにある partnerId および customerId 変数に適切な値を設定します。

    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);
    

顧客に代わって Azure Resource Manager および Microsoft Graph と対話する方法を確認する場合は、RunAzureTaskRunGraphTask 関数呼び出しのコメントを解除します。