次の方法で共有


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

Secure Application Model フレームワークを実装するには、クラウド ソリューション プロバイダー (CSP) またはコントロール パネル ベンダー (CPV) 用のアプリケーションを作成します。

安全なアプリケーションモデルの実装

安全なアプリケーションモデルを有効にする手順

Von Bedeutung

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 00001111-aaaa-2222-bbbb-3333cccc4444

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

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

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

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

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

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

  • アプリケーション識別子
  • アプリケーション シークレット

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

権限の適用

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

[API 権限] セクションで、次の操作を行います。

  • マルチテナント アプリケーションに対する直接的な アプリケーションアクセス許可 は存在しないでください。

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

    • API の権限>権限を追加します>Microsoft API です>マイクロソフト グラフ>委任されたアクセス許可
      • DelegatedAdminRelationship.ReadWrite.All User.Read.All

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

    • Microsoft パートナー センターの委任されたアクセス許可を追加するには、次のパスに従います - [委任されたアクセス許可] で [パートナー センターのアクセス許可を付与] を選択します。
      • API の権限>権限を追加します>組織で使用している API です>マイクロソフト パートナー センター>委任されたアクセス許可>ユーザー偽装

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

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

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

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

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

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

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

認証コードを取得する

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

  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 のドキュメントを参照してください。

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

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

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

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

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

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

プロトタイプを構成する

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

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

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

CSP Web 構成

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