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 ウィンドウで、次のコマンドを実行します。
- AzureAD モジュールをインストールします。
Install-Module Microsoft.Graph
- Connect-MgGraph を実行すると、ユーザー名とパスワードの入力を求められます。 テナント管理者の資格情報を入力します。
Connect-MgGraph
- Microsoft パートナー センター サービス プリンシパルを作成します。
New-MgServicePrincipal -DisplayName "Microsoft Partner Center" -AppId 00001111-aaaa-2222-bbbb-3333cccc4444
CSP パートナーのテナントにマルチテナント アプリケーションを作成する
次の手順を使用して、新しく作成したマルチテナント アプリケーションに次のアプリケーション プロパティが設定されていることを確認します。
- portal.azure.com にサインインする
- [Microsoft Entra ID とアプリの登録] を選択して、マルチテナントで新しい登録を作成します。
- アプリケーションのユーザー向けの表示名を選択します。
- [サポートされているアカウントの種類] を選択します: 任意の組織ディレクトリ内のアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント)。
- プラットフォームの種類として「Web」を選択します。
- リダイレクト URL は、パートナーに同意成功メッセージを表示し、更新トークンを収集するために、アプリケーションのリダイレクト URL である必要があります。 アプリのリダイレクト URL が、ライブ Web アプリが実行されているエンドポイントに設定されていることを確認します。 このアプリは、Microsoft Entra サインイン呼び出しからの 認証コード を受け入れる必要があります。
- [クライアント シークレット] タブで [Manage>Certificates & secrets]>+[New client secret] に移動します。
注
Microsoft Entra ID の Web アプリの設定から、次の情報が必要になります。
- アプリケーション識別子
- アプリケーション シークレット
権限の適用
マルチテナント アプリケーションに次のアクセス許可が設定されていることを確認します。
[API 権限] セクションで、次の操作を行います。
マルチテナント アプリケーションに対する直接的な アプリケーションアクセス許可 は存在しないでください。
Microsoft Graph の委任されたアクセス許可を追加するには、次のパスに従います。
-
API の権限>権限を追加します>Microsoft API です>マイクロソフト グラフ>委任されたアクセス許可
DelegatedAdminRelationship.ReadWrite.All User.Read.All
- Microsoft パートナー センターの委任されたアクセス許可を追加するには、次のパスに従います - [委任されたアクセス許可] で [パートナー センターのアクセス許可を付与] を選択します。
- API の権限>権限を追加します>組織で使用している API です>マイクロソフト パートナー センター>委任されたアクセス許可>ユーザー偽装
-
API の権限>権限を追加します>Microsoft API です>マイクロソフト グラフ>委任されたアクセス許可
同意リンクを提供する
同意リンクをパートナーに提示し、サービス アカウントでサインインして、パートナー テナントのサービス アカウントの代わりに動作するアプリケーションを承認してもらいます。
CSP パートナー ユーザーは、マルチテナント アプリケーションに同意するために、グローバル管理者および管理エージェント である必要があります 。
マルチテナントアプリケーション
マルチテナント ApplicationID
は、アプリケーション ID に置き換える必要があります。
[アプリの登録] に移動し、アプリケーション (クライアント) ID を選択して、以下を置き換えます。
認証コードを取得する
Web アプリの認証コードは、Microsoft Entra サインイン呼び出しから取得する必要があります。
- Microsoft Entra ID にサインインします。
- Application-Id を Microsoft Entra アプリ ID (GUID) に置き換えます。
- プロンプトが表示されたら、MFA が設定されたユーザーアカウントでサインインします。
- プロンプトが表示されたら、他の MFA 情報 (電話番号またはメール アドレス) を入力してサインインを確認します。
- ログインすると、ブラウザーは認証コードを使用して呼び出しを 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>
リフレッシュトークンを取得する
その後、認証コードを使用して更新トークンを取得する必要があります。
- 認証コードを使用して、Microsoft Entra サインイン エンドポイント
https://login.microsoftonline.com/CSPTenantID/oauth2/token
に対して POST 呼び出しを行います。 例については、次の サンプル呼び出しを参照してください。 - 返される更新トークンに注意してください。
- 更新トークンを Azure Key Vault に格納します。 詳細については、 Key Vault API のドキュメントを参照してください。
注
次のサンプル POST 呼び出しに記載されているリソースは、GDAP-Graph API 用です。
その他の PC API のリソースは次のとおりです。
パートナー センター API (https://api.partnercenter.microsoft.com
)
パートナー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 を使用している場合:
- 適切な
<key-vault-name>
を使用して Azure Key Vault を作成すると、次のような DNS 名になります。https://<key-vault-name>.vault.azure.net
- キー コンテナーに更新トークンを追加します。
キー コンテナーへのアクセスを提供する
キー コンテナーのアクセス ポリシーで、シークレットの Get と Set の側面のみを管理するアクセス許可を持つ KeyVaultAccessApp を追加します。
プロトタイプを構成する
プロトタイプには 2 つのアプリケーションがあります。
-
パートナーの同意: CSP パートナーからの同意を受け入れ、成功メッセージを表示するように設計された Web アプリケーションを表します。
- このアプリケーションは、同意を設定し、同意したユーザーの更新トークンをキャプチャします。
- 同意したユーザーの更新トークンは、CSP パートナー テナントのアクセス トークンを生成するために使用されます。
-
CSP アプリケーション または CPV アプリケーション: パートナー センター API とグラフを呼び出すプライマリ アプリケーションを表します。
- パートナーに代わってコマースとユーザーのアクションを実行するための API。
このアプリケーションは、それぞれの API を呼び出す前に、特定の対象ユーザー (パートナー センター API または Graph) のアクセス トークンを取得します。 キー コンテナーに安全に格納されている更新トークンが使用されます。
パートナー同意アプリケーション (CSP)
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)
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/" />