建立安全的合作夥伴應用程式
您可以為 雲端解決方案提供者 或 控制台 廠商 (CPV) 建立應用程式,以實作安全應用程式模型架構。
重要
自 2023 年 6 月 30 日起,Azure Active Directory (Azure AD) Graph 已淘汰。 接下來,我們不會對 Azure AD Graph 進行進一步的投資。 Azure AD Graph API 除了安全性相關修正之外,沒有 SLA 或維護承諾。 對新功能的投資只會在 Microsoft Graph 中進行。
我們會以累加步驟淘汰 Azure AD Graph,讓您有足夠的時間將應用程式遷移至 Microsoft Graph API。 在稍後宣佈的日期,我們將封鎖使用 Azure AD Graph 建立任何新的應用程式。
若要深入瞭解,請參閱 重要事項:Azure AD Graph 淘汰和 Powershell 模組淘汰。
建立合作夥伴中心服務主體
首先,在 CSP 合作夥伴的租使用者中建立 Microsoft 合作夥伴中心服務主體,其中將會建立多租用戶應用程式。
針對 CSP 合作夥伴租使用者,此服務主體應該已經存在。 如果沒有,請使用下列步驟建立 。
在系統管理員 PowerShell 視窗中,執行下列命令。
- 安裝 AzureAD 模組。
Install-Module Microsoft.Graph
- 執行 連線-MgGraph,這會提示使用者名稱和密碼。 輸入租用戶系統管理員認證。
Connect-MgGraph
- 建立 Microsoft 合作夥伴中心服務主體。
New-MgServicePrincipal -DisplayName "Microsoft Partner Center" -AppId fa3d9a0c-3fb0-42cc-9193-47c7ecd2edbd
在 CSP 合作夥伴的租使用者中建立多租用戶應用程式
使用下列步驟,確定已為新建立的多租使用者應用程式設定下列應用程式屬性。
- 登入 portal.azure.com
- 選取 [Microsoft Entra ID] 和 [應用程式註冊],以使用多租使用者建立新的註冊。
- 為您的應用程式選取使用者面向的顯示名稱。
- 選取支持的帳戶類型:任何組織目錄中的帳戶(任何 Microsoft Entra 目錄 - 多租使用者)。
- 選取平臺類型 「Web」。
- 重新 導向 URL必須是您的應用程式重新導向URL,這會向合作夥伴顯示同意成功訊息,並收集重新整理令牌。 請確定應用程式的重新導向 URL 設定為執行即時 Web 應用程式的端點。 此應用程式必須接受 來自 Microsoft Entra 登入呼叫的授權碼 。
- 在 [客戶端密碼] 索引標籤中,移至 [管理>憑證與秘密>+ 新增客戶端密碼]。
注意
您將需要來自 Microsoft Entra ID 中 Web 應用程式設定的下列資訊:
- Application ID
- 應用程式祕密
套用許可權
請確定已為多租使用者應用程式設定下列許可權。
在 [API 許可權] 區段中:
不應有任何直接 應用程式許可權 給多租用戶應用程式。
請遵循下列路徑來新增 Microsoft Graph 的委派許可權:
- API 許可權>新增許可權>Microsoft API>Microsoft Graph>委派的許可權
DelegatedAdminRelationship.ReadWrite.All User.Read.All
- 遵循下列路徑來新增 Microsoft 合作夥伴中心的委派許可權 - 在 [委派的許可權] 下授與存取合作夥伴中心許可權:
- API 許可權>新增我的組織使用>Microsoft 合作夥伴中心>委派許可權用戶仿真的許可權 API>>
- API 許可權>新增許可權>Microsoft API>Microsoft Graph>委派的許可權
提供同意連結
向合作夥伴出示同意連結,並讓他們使用其服務帳戶登入,以核准應用程式以代表合作夥伴租用戶的服務帳戶採取行動。
CSP 合作夥伴用戶必須是全域 管理員 和 管理員 代理程式,才能同意多租用戶應用程式。
多租用戶應用程式
多租用戶 ApplicationID
必須取代為您的應用程式識別碼。
流覽至 [ 應用程式註冊] ,然後選取 [應用程式][用戶端] 識別符,然後取代下方。
取得授權碼
您必須從 Microsoft Entra 登入呼叫取得 Web 應用程式的授權碼:
- 登入 Microsoft Entra ID。
- 將 Application-Id 取代為您的 Microsoft Entra 應用程式識別碼 (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 API 文件。
注意
下列範例 POST 呼叫中所述的資源適用於 GDAP-Graph API。
其他電腦 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 應用程式。 如果 CPV 應用程式用於呼叫合作夥伴中心 API,CPV 應該在 CPV 合作夥伴的租使用者中建立新的 Web 應用程式。
如果您使用 Azure 金鑰保存庫:
- 使用適當的
<key-vault-name>
建立 Azure 金鑰保存庫,併產生 DNS 名稱,例如:https://<key-vault-name>.vault.azure.net
- 將重新整理令牌新增至金鑰保存庫。
提供金鑰保存庫的存取權
在密鑰保存庫的存取原則中,新增具有許可權的 KeyVaultAccessApp,只管理秘密的取得和設定層面。
設定原型
原型有兩個應用程式:
- 合作夥伴同意:代表設計用來接受 CSP 合作夥伴同意並顯示成功訊息的 Web 應用程式。
- 此應用程式會設定同意,並擷取已同意使用者的重新整理令牌。
- 同意的使用者重新整理令牌用於產生 CSP 合作夥伴租使用者的存取令牌。
- CSP 應用程式或 CPV 應用程式:代表主要應用程式,其會呼叫合作夥伴中心 API 和圖形。
- 代表合作夥伴執行商務和用戶動作的 API。
此應用程式會先擷取特定物件 (合作夥伴中心 API 或 Graph) 的存取令牌,再呼叫個別的 API。 它會使用安全地儲存在金鑰保存庫中的重新整理令牌。
合作夥伴同意應用程式 (CSP)
CSP Web 組態
針對 CSP 合作夥伴應用程式, web.config
檔案已呼叫下列各節。使用對應的應用程式識別碼和秘密來更新這些值。 針對主要應用程式,請使用「憑證」作為 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
檔案已呼叫下列各節。使用對應的應用程式識別碼和秘密來更新值。 針對主要應用程式,請使用「憑證」作為 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
檔案已呼叫下列各節。使用對應的應用程式識別碼和秘密來更新這些值。 針對主要應用程式,請使用「憑證」作為 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
檔案已指出下列各節。使用對應的應用程式識別碼和秘密來更新值。 針對主要應用程式,請使用「憑證」作為 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/" />