セキュリティで保護されたパートナー アプリケーションを作成する

セキュリティで保護されたアプリケーション モデル フレームワークを実装するには、クラウド ソリューション プロバイダー (CSP) または コントロール パネル ベンダー (CPV) 用のアプリケーションを作成します。

セキュリティで保護されたアプリケーション モデルを実装する

セキュリティで保護されたアプリケーション モデルを有効にする手順

重要

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 モジュールの廃止」を参照してください

パートナー センター サービス プリンシパルを作成する

まず、CSP パートナーのテナントに Microsoft パートナー センター サービス プリンシパルを作成します。このテナントでは、マルチテナント アプリケーションが作成されます。

CSP パートナー テナントの場合、このサービス プリンシパルは既に存在している必要があります。 そうでない場合は、次の手順を使用して作成します。

管理者の PowerShell ウィンドウで、次のコマンドを実行します。

  1. AzureAD モジュールをインストールします。 Install-Module Microsoft.Graph
  2. Connect-MgGraph を実行すると、ユーザー名とパスワードの入力を求められます。 テナント管理者の資格情報を入力します。 Connect-MgGraph
  3. Microsoft パートナー センターのサービス プリンシパルを作成します。 New-MgServicePrincipal -DisplayName "Microsoft Partner Center" -AppId fa3d9a0c-3fb0-42cc-9193-47c7ecd2edbd

CSP パートナーのテナントにマルチテナント アプリケーションを作成する

次の手順を使用して、新しく作成されたマルチテナント アプリケーションに対して次のアプリケーション プロパティが設定されていることを確認します。

  1. portal.azure.com に サインインする
  2. Microsoft Entra ID とアプリの登録を選択して、マルチテナントで新しい登録を作成します。

[アプリ モーダルの登録] を示すスクリーンショット。

  1. アプリケーションのユーザー向けの表示名を選択します。
  2. [サポートされているアカウントの種類]: 任意の組織ディレクトリのアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント) を選択します。
  3. プラットフォームの種類として "Web" を選択します。
  4. リダイレクト URL は、パートナーに同意成功メッセージを表示し、更新トークンを収集するアプリケーション リダイレクト URL である必要があります。 アプリのリダイレクト URL が、ライブ Web アプリが実行されているエンドポイントに設定されていることを確認します。 このアプリは、Microsoft Entra サインイン呼び出しからの承認コードを受け入れる必要があります。
  5. [クライアント シークレット] タブの [証明書とシークレット>の管理>] + [新しいクライアント シークレット] に移動します。

Note

Microsoft Entra ID の Web アプリの設定から、次の情報が必要になります。

  • アプリケーション ID
  • アプリケーション シークレット

証明書とシークレットを示すスクリーンショット。

アクセス許可を適用する

マルチテナント アプリケーションに対して次のアクセス許可が設定されていることを確認します。

[API アクセス許可] セクションで、次の手順 を実行します。

  • マルチテナント アプリケーションに対する直接 のアプリケーションアクセス許可 は必要ありません。

  • Microsoft Graph の委任されたアクセス許可を追加するには、次のパスに従います。

    • API のアクセス許可>Microsoft API>Microsoft Graph>の委任されたアクセス許可>を追加する
      • DelegatedAdminRelationship.ReadWrite.All User.Read.All

    パートナー アプリ要求 API のアクセス許可を示すスクリーンショット。

    • 次のパスに従って、Microsoft パートナー センターの委任されたアクセス許可を追加します。[委任されたアクセス許可] の下で、アクセス パートナー センターのアクセス許可を付与します。
      • API アクセス許可>組織が Microsoft パートナー センター>の委任されたアクセス許可>ユーザー偽装を使用>するアクセス許可>API を追加する

    パートナー アプリの A P I アクセス許可を示すスクリーンショット。

パートナーに同意リンクを提示し、サービス アカウントでサインインして、パートナー テナントのサービス アカウントに代わって動作するようにアプリケーションを承認してもらいます。

CSP パートナー ユーザー、マルチテナント アプリケーションに同意するためにグローバル 管理および管理 エージェントである必要があります。

マルチテナント アプリケーション

マルチテナント ApplicationID は、アプリケーション ID に置き換える必要があります。

[アプリの登録] に移動し、アプリケーション (クライアント) ID を選択し、以下に置き換えます。

パートナー Microsoft Entra クライアントを示すスクリーンショット。

認証コードを取得する

Microsoft Entra サインイン呼び出しから Web アプリの承認コードを取得する必要があります。

  1. Microsoft Entra ID に サインインします
  2. Application-Id を Microsoft Entra アプリ ID (GUID) に置き換えます
  3. プロンプトが表示されたら、MFA が構成されたユーザー アカウントでサインインします。
  4. メッセージが表示されたら、他の MFA 情報 (電話番号または電子メール アドレス) を入力してサインインを確認します。
  5. ログインすると、ブラウザーによって、認証コードを使用して Web アプリ エンドポイントに呼び出しがリダイレクトされます。 たとえば、次のサンプル コードを実行すると、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. 承認コードを使用して、Microsoft Entra サインイン エンドポイント https://login.microsoftonline.com/CSPTenantID/oauth2/token への POST 呼び出しを行います。 例については、次のサンプル呼び出しを参照してください。
  2. 返される更新トークンに注意してください。
  3. 更新トークンを Azure Key Vault に格納します。 詳細については、Key Vault API のドキュメントを参照してください。

Note

以下のサンプル POST 呼び出しにメンションリソースは、GDAP-Graph API 用です。

その他の PC 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 パートナーのテナントに新しい Web アプリケーションを作成します。 CPV アプリケーションをパートナー センター API の呼び出しに使用する場合、CPV は CPV パートナーのテナントに新しい Web アプリケーションを作成する必要があります。

Azure Key Vault を使用している場合:

  1. 適切な <key-vault-name> Azure Key Vault を作成すると、次のような DNS 名になります。 https://<key-vault-name>.vault.azure.net
  2. キー コンテナーに更新トークンを追加します。

キー コンテナーへのアクセスを提供する

キー コンテナーのアクセス ポリシーで、シークレットの Get と Set側面のみを管理するアクセス許可を持つ KeyVaultAccessApp を追加します

CSP パートナー アプリに必要なアクセス許可を示すスクリーンショット。

プロトタイプを構成する

プロトタイプには、次の 2 つのアプリケーションがあります。

  • パートナーの同意: CSP パートナーからの同意を受け入れ、成功メッセージを表示するように設計された Web アプリケーションを表します。
    • このアプリケーションは同意を設定し、同意されたユーザーの更新トークンをキャプチャします。
    • 同意されたユーザーの更新トークンは、CSP パートナー テナントのアクセス トークンを生成するために使用されます。
  • CSP アプリケーション または CPV アプリケーション: パートナー センター API とグラフを呼び出すプライマリ アプリケーションを表します。
    • パートナーに代わってコマースとユーザーのアクションを実行するための API。

このアプリケーションは、それぞれの API を呼び出す前に、特定の対象ユーザー (パートナー センター API または Graph) のアクセス トークンを取得します。 キー コンテナーに安全に格納されている更新トークンが使用されます。

CSP Web 構成

CSP パートナー アプリケーションの場合、 web.config ファイルには次のセクションが示されています。これらの値を、対応するアプリケーション ID とシークレットで更新します。 プライマリ アプリケーションの場合は、セキュリティの追加レイヤーを提供するため、プレーン シークレットではなく Web アプリケーション シークレットとして "証明書" を使用します。

<!-- 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 ファイルには次のセクションが示されています。対応するアプリケーション ID とシークレットで値を更新します。 プライマリ アプリケーションの場合は、セキュリティの追加レイヤーを提供するため、プレーン シークレットではなく Web アプリケーション シークレットとして "証明書" を使用します。

<!-- 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 アプリケーションを使用する CSP は、ApplicationConsent API を呼び出して顧客テナントにサービス プリンシパルを作成し、Microsoft Graph にアクセスして顧客テナントを管理できます。 詳細については、「パートナー センター認証」を参照してください

CPV Web 構成

CSP パートナー アプリケーションの場合、 web.config ファイルには次のセクションが示されています。これらの値を、対応するアプリケーション ID とシークレットで更新します。 プライマリ アプリケーションの場合は、セキュリティの追加レイヤーを提供するため、プレーン シークレットではなく Web アプリケーション シークレットとして "証明書" を使用します。

<!-- 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 ファイルには次のセクションが呼び出されています。対応するアプリケーション ID とシークレットで値を更新します。 プライマリ アプリケーションの場合は、セキュリティの追加レイヤーを提供するため、プレーン シークレットではなく Web アプリケーション シークレットとして "証明書" を使用します。

<!-- 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/" />