啟用安全應用程式模型架構
Microsoft 正透過 Microsoft Entra 多重要素驗證 (MFA) 架構,引進安全且可調整的架構,以驗證雲端解決方案提供者 (CSP) 合作夥伴和控制面板廠商 (CPV)。
您可以使用新模型來提升合作夥伴中心 API 整合呼叫的安全性。 這有助於各方(包括 Microsoft、CSP 合作夥伴和 CPV)保護其基礎結構和客戶數據免於安全性風險。
CSP 計劃可讓客戶透過合作夥伴購買 Microsoft 產品和服務。 根據與 Microsoft 的合約,合作夥伴必須管理其銷售客戶的環境,並提供支援。 透過此管道購買的客戶,必須對他們購買的合作夥伴進行大量信任,因為合作夥伴企業具有客戶租使用者的高許可權系統管理員存取權。
範圍
本文與 CSP 和 CPV 相關。
CPV
- CPV 是開發應用程式以供雲端解決方案提供者合作夥伴用來與合作夥伴中心 API 整合的獨立軟體廠商。
- CPV 不是直接存取合作夥伴中心或 API 的 CSP 合作夥伴。
CSP
- CSP 間接提供者和 CSP 直接合作夥伴,他們會使用「應用程式識別碼 + 使用者」驗證,並直接與合作夥伴中心 API 整合。
安全性需求
如需安全性需求的詳細資訊,請參閱合作夥伴安全性需求。
安全應用程式模型
市集應用程式需要模擬 CSP 合作夥伴權限來呼叫 Microsoft API。 這些敏感性應用程式上的安全性攻擊可能會導致客戶資料洩漏。
如需新驗證架構的概觀和詳細數據,請參閱 安全應用程式模型架構,其中涵蓋原則和最佳做法,讓市集應用程式能夠持續且強固地免於安全性危害。
範例
下列概觀文件和範例程式碼會說明合作夥伴如何實作安全應用程式模型架構:
-
合作夥伴中心 Java SDK 可用來管理合作夥伴中心資源。 它是由合作夥伴社群維護的開放原始碼專案,且 Microsoft 未正式支援。 如果您遇到問題,可以從社群取得協助或在 GitHub 上提出問題。
REST
若要使用安全應用程式模型架構搭配範例程式碼來進行 REST 呼叫,請遵循下列步驟:
建立 Web 應用程式
登入 Azure 入口網站。
建立 Microsoft Entra 應用程式。
根據您的應用程式需求,將委派的應用程式權限授與下列資源。 如有需要,您可以為應用程式資源新增更多委派的權限。
Microsoft 合作夥伴中心 (部分租用戶顯示 SampleBECApp)
Azure 管理 API (如果您打算呼叫 Azure API)
Windows Azure Active Directory
請確定您應用程式的主要 URL 已設定為執行即時 Web 應用程式的端點。 此應用程式必須接受 來自 Microsoft Entra 登入呼叫的授權碼 。 例如,在下列區段的範例程式碼中,Web 應用程式正執行於
https://localhost:44395/
上。請注意下列來自 Microsoft Entra ID 中 Web 應用程式設定的資訊:
- Application ID
- 應用程式祕密
注意
建議您使用憑證作為應用程式祕密。 不過,您也可以在 Azure 入口網站中建立應用程式金鑰。 下列區段中的範例程式碼會使用應用程式金鑰。
取得授權碼
您必須取得 Web 應用程式的授權碼,才能從 Microsoft Entra 登入呼叫接受:
-
請務必使用您進行合作夥伴中心 API 呼叫的用戶帳戶登入(例如系統管理員代理程式或銷售代理人帳戶)。
將 Application-Id 取代為您的 Microsoft Entra 應用程式識別碼 (GUID)。
出現提示時,使用已設定 MFA 的使用者帳戶登入。
出現提示時,請輸入更多 MFA 資訊(電話號碼或電子郵件位址)以確認您的登入。
登入之後,瀏覽器會使用您的授權碼,將呼叫重新導向至 Web 應用程式端點。 例如,下列範例程式碼會重新導向至
https://localhost:44395/
。
授權碼呼叫追蹤
POST https://localhost:44395/ HTTP/1.1
Origin: https://login.microsoftonline.com
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referrer: https://login.microsoftonline.com/kmsi
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: OpenIdConnect.nonce.hOMjjrivcxzuI4YqAw4uYC%2F%2BILFk4%2FCx3kHTHP3lBvA%3D=dHVyRXdlbk9WVUZFdlFONVdiY01nNEpUc0JRR0RiYWFLTHhQYlRGNl9VeXJqNjdLTGV3cFpIWFg1YmpnWVdQUURtN0dvMkdHS2kzTm02NGdQS09veVNEbTZJMDk1TVVNYkczYmstQmlKUzFQaTBFMEdhNVJGVHlES2d3WGlCSlVlN1c2UE9sd2kzckNrVGN2RFNULWdHY2JET3RDQUxSaXRfLXZQdG00RnlUM0E1TUo1YWNKOWxvQXRwSkhRYklQbmZUV3d3eHVfNEpMUUthMFlQUFgzS01RS2NvMXYtbnV4UVJOYkl4TTN0cw%3D%3D
code=AuthorizationCodeValue&id_token=IdTokenValue&<rest of properties for state>
取得重新整理權杖
接著,您必須使用您的授權碼來取得重新整理權杖:
使用授權碼對 Microsoft Entra 登入端點
https://login.microsoftonline.com/CSPTenantID/oauth2/token
進行 POST 呼叫。 如需範例,請參閱下列呼叫範例。請記下傳回的重新整理權杖。
將重新整理權杖儲存在 Azure Key Vault 中。 如需詳細資訊,請參閱 Key Vault API 文件。
重要
重新整理權杖必須以祕密的形式儲存在 Key Vault 中。
重新整理呼叫範例
預留位置要求:
POST https://login.microsoftonline.com/CSPTenantID/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Content-Length: 966
Expect: 100-continue
要求本文:
resource=https%3a%2f%2fapi.partnercenter.microsoft.com&client_id=Application-Id&client_secret=Application-Secret&grant_type=authorization_code&code=AuthorizationCodeValue
預留位置回應:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Content-Type: application/json; charset=utf-8
回應本文:
{"token_type":"Bearer","scope":"user_impersonation","expires_in":"3599","ext_expires_in":"3599","expires_on":"1547579127","not_before":"1547575227","resource":"https://api.partnercenter.microsoft.com","access_token":"Access
取得存取權杖
您必須先取得存取權杖,才能對合作夥伴中心 API 進行呼叫。 您必須使用重新整理令牌來取得存取令牌,因為存取令牌通常有有限的存留期(例如,少於一小時)。
預留位置要求:
POST https://login.microsoftonline.com/CSPTenantID/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Content-Length: 1212
Expect: 100-continue
要求本文:
resource=https%3a%2f%2fapi.partnercenter.microsoft.com&client_id=Application-Id &client_secret= Application-Secret&grant_type=refresh_token&refresh_token=RefreshTokenVlaue&scope=openid
預留位置回應:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Content-Type: application/json; charset=utf-8
回應本文:
{"token_type":"Bearer","scope":"user_impersonation","expires_in":"3600","ext_expires_in":"3600","expires_on":"1547581389","not_before":"1547577489","resource":"https://api.partnercenter.microsoft.com","access_token":"AccessTokenValue","id_token":"IDTokenValue"}
進行合作夥伴中心 API 呼叫
您必須使用存取權杖來呼叫合作夥伴中心 API。 請參閱以下呼叫範例。
合作夥伴中心 API 呼叫範例
GET https://api.partnercenter.microsoft.com/v1/customers/CustomerTenantId/users HTTP/1.1
Authorization: Bearer AccessTokenValue
Accept: application/json
X-Locale: en-US
Host: api.partnercenter.microsoft.com
PowerShell
合作夥伴中心 PowerShell 模組可用來管理合作夥伴中心資源。 它是由合作夥伴社群維護的開放原始碼專案,且 Microsoft 未正式支援。 如果您遇到問題,可以從社群取得協助或在 GitHub 上提出問題。
您可以使用合作夥伴中心 PowerShell 模組來減少必要的基礎結構,以交換存取權杖的授權碼。 這是進行合作夥伴中心 REST 呼叫的選擇性方法。
如需此程序的詳細資訊,請參閱安全應用程式模型的 PowerShell 文件。
安裝 Microsoft Entra ID 和合作夥伴中心 PowerShell 模組。
Install-Module AzureAD
Install-Module PartnerCenter
使用 New-PartnerAccessToken 命令來執行同意程序,並擷取所需的重新整理權杖。
$credential = Get-Credential $token = New-PartnerAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Scopes 'https://api.partnercenter.microsoft.com/user_impersonation' -ServicePrincipal -Credential $credential -Tenant 'yyyy-yyyy-yyyy-yyyy' -UseAuthorizationCode
注意
ServicePrincipal 參數會與 New-PartnerAccessToken 命令搭配使用,因為正在使用類型為 Web/API 的 Microsoft Entra 應用程式。 此類型的應用程式會要求將用戶端識別碼和祕密包含在存取權杖要求中。 叫用 Get-Credential 命令時,系統會提示您輸入使用者名稱和密碼。 輸入應用程式識別碼作為使用者名稱。 輸入應用程式秘密作為密碼。 叫用 New-PartnerAccessToken 命令時,系統會提示您再次輸入認證。 輸入您所使用的服務帳戶認證。 此服務帳戶應該是具有適當權限的合作夥伴帳戶。
複製重新整理權杖的值。
$token.RefreshToken | clip
您應該將重新整理權杖的值儲存在安全的存放庫中,例如 Azure Key Vault。 如需如何搭配 PowerShell 使用安全應用程式模組的詳細資訊,請參閱 多重要素驗證 一文。