Marketplace 計量服務驗證策略
Marketplace 計量服務支援兩種驗證策略:
本文說明如何使用不同的驗證策略,使用 Marketplace 計量服務安全地提交自定義計量。
使用 Microsoft Entra 安全性令牌
適用的供應項目類型是可交易的 SaaS 和具有受控應用程式方案類型的 Azure 應用程式。
使用預先定義的固定Microsoft Entra 應用程式標識符來驗證,以提交自定義計量。
對於 SaaS 供應專案,這是唯一可用的選項。 這是發佈任何 SaaS 供應專案的必要步驟,如註冊 SaaS 應用程式中所述。
針對具有受控應用程式方案的 Azure 應用程式,您應該考慮在下列情況下使用此策略:
- 您已經有與後端服務通訊的機制,而且您想要擴充此機制,以從中央服務發出自定義計量。
- 您有複雜的自訂計量邏輯。 在中央位置執行此邏輯,而不是受控應用程式資源。
註冊應用程式時,您可以透過程序設計方式要求Microsoft Entra 安全性令牌。 發行者應該使用此令牌,並提出解析它的要求。
如需這些令牌的詳細資訊,請參閱 Microsoft Entra 存取令牌。
根據 Microsoft Entra 應用程式取得令牌
HTTP 方法
POST
要求 URL
https://login.microsoftonline.com/*{tenantId}*/oauth2/token
URI 參數
參數名稱 | 必要 | 說明 |
---|---|---|
tenantId |
True | 已註冊Microsoft Entra 應用程式的租用戶標識碼。 |
要求標頭
標頭名稱 | 必要 | 說明 |
---|---|---|
Content-Type |
True | 與要求相關聯的內容類型。 預設值是 application/x-www-form-urlencoded 。 |
要求本文
屬性名稱 | 必要 | 說明 |
---|---|---|
Grant_type |
True | 授與類型。 使用 client_credentials 。 |
Client_id |
True | 與 Microsoft Entra 應用程式相關聯的用戶端/應用程式識別碼。 |
client_secret |
True | 與 Microsoft Entra 應用程式相關聯的秘密。 |
Resource |
True | 要求令牌的目標資源。 使用 20e940b3-4c77-4b0b-9a53-9e16a1b010a7 。 |
回應
名稱 | 類型 | 說明 |
---|---|---|
200 OK |
TokenResponse |
要求成功。 |
TokenResponse
回應權杖範例:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "15251…",
"not_before": "15251…",
"resource": "20e940b3-4c77-4b0b-9a53-9e16a1b010a7",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9…"
}
使用 Azure 受控識別令牌
適用的供應專案類型為 Kubernetes 應用程式供應專案,以及具有受控應用程式方案類型的 Azure 應用程式。
使用此方法可讓已部署的資源身分識別進行驗證,以傳送自定義計量使用量事件。 您可以內嵌在部署界限內發出使用量的程式代碼。
注意
發行者應該確保發出使用量的資源已鎖定,因此不會遭到竄改。
受控應用程式可以包含不同類型的資源,從 虛擬機器 到 Azure Functions。 如需如何針對不同服務使用受控識別進行驗證的詳細資訊,請參閱 如何使用 Azure 資源的受控識別)。
例如,使用下列步驟來使用 Windows VM 進行驗證,
請確定已使用下列其中一種方法來設定受控識別:
使用系統身分識別、RDP 對 VM 取得 Marketplace 計量服務應用程式識別碼的
20e940b3-4c77-4b0b-9a53-9e16a1b010a7
存取令牌、開啟 PowerShell 控制台並執行命令:# curl is an alias to Web-Invoke PowerShell command # Get system identity access tokenn $MetadataUrl = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F" $Token = curl -H @{"Metadata" = "true"} $MetadataUrl | Select-Object -Expand Content | ConvertFrom-Json $Headers = @{} $Headers.Add("Authorization","$($Token.token_type) "+ " " + "$($Token.access_token)")
從目前的資源群組 『ManagedBy』 屬性取得受控應用程式識別碼(Kubernetes 應用程式供應專案不需要)。
# Get subscription and resource group $metadata = curl -H @{'Metadata'='true'} http://169.254.169.254/metadata/instance?api-version=2019-06-01 | select -ExpandProperty Content | ConvertFrom-Json # Make sure the system identity has at least reader permission on the resource group $managementUrl = "https://management.azure.com/subscriptions/" + $metadata.compute.subscriptionId + "/resourceGroups/" + $metadata.compute.resourceGroupName + "?api-version=2019-10-01" $resourceGroupInfo = curl -Headers $Headers $managementUrl | select -ExpandProperty Content | ConvertFrom-Json $managedappId = $resourceGroupInfo.managedBy
使用 Marketplace 計量服務 API 來發出使用量。
針對 Kubernetes 應用程式供應專案,請使用下列步驟從應用程式取得驗證令牌。 如需詳細資訊,請參閱 範例程序代碼。
應用程式的受控服務識別 (MSI) 用戶端識別碼必須用來產生驗證令牌,以與 Microsoft Marketplace 計量 API 通訊。 如需詳細資訊,請參閱 範例程序代碼。
# Audience for the token to be generated resource = '20e940b3-4c77-4b0b-9a53-9e16a1b010a7' clientId = <identity client id> url = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&clientId={0}&resource={1}".format(clientId,resource) headers = {'Metadata': 'true'} # Need to import requests module response = requests.get(url) response = requests.get(url, headers=headers) authToken = response.json()
使用 Marketplace 計量服務 API 發出使用量