市集計量服務驗證策略
Marketplace 計量服務支援兩種驗證策略:
本文說明如何使用不同的驗證策略,使用 Marketplace 計量服務安全地提交自定義計量。
使用 Microsoft Entra 安全性令牌
適用的供應項目類型是具有受控應用程式方案類型的可交易 SaaS 和 Azure 應用程式。
使用預先定義的固定Microsoft Entra 應用程式標識符來驗證,以提交自定義計量。
對於 SaaS 供應專案,這是唯一可用的選項。 這是發佈任何 SaaS 供應專案的必要步驟,如 註冊 SaaS 應用程式中所述。
針對具有受控應用程式方案的 Azure 應用程式,您應該考慮在下列情況下使用此策略:
- 您已經有與後端服務通訊的機制,而且您想要擴充此機制,以從中央服務發出自定義計量。
- 您有複雜的自訂計量邏輯。 在中央位置執行此邏輯,而不是受控應用程式資源。
註冊應用程式時,您可以透過程序設計方式要求Microsoft Entra 安全性令牌。 發行者應該使用此令牌並請求解析此令牌。
如需這些令牌的詳細資訊,請參閱 Microsoft Entra 存取令牌。
基於 Microsoft Entra 應用程式取得令牌
HTTP 方法
發文
要求 URL
https://login.microsoftonline.com/*{tenantId}*/oauth2/token
URI 參數
參數名稱 | 必要 | 描述 |
---|---|---|
tenantId |
正確 | 已註冊的 Microsoft Entra 應用程式的租用戶識別碼。 |
請求標頭
標頭名稱 | 必要 | 描述 |
---|---|---|
Content-Type |
正確 | 與要求相關聯的內容類型。 預設值為 application/x-www-form-urlencoded 。 |
請求主體
屬性名稱 | 必要 | 描述 |
---|---|---|
Grant_type |
正確 | 授與類型。 使用 client_credentials 。 |
Client_id |
正確 | 與 Microsoft Entra 應用程式相關聯的用戶端/應用程式識別碼。 |
client_secret |
正確 | 與 Microsoft Entra 應用程式相關聯的秘密。 |
Resource |
正確 | 用於申請令牌的目標資源。 使用 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 計量服務應用程式識別碼的存取令牌(
00001111-aaaa-2222-bbbb-3333cccc4444
),開啟 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」屬性取得管理應用程式 ID(對於 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 = '00001111-aaaa-2222-bbbb-3333cccc4444' 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 發出使用量