共用方式為


市集計量服務驗證策略

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 進行驗證,

  1. 請確定已使用下列其中一種方法來設定受控識別:

  2. 使用系統識別、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)")
    
  3. 從目前資源群組中的「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 
    
  4. 使用 Marketplace 計量服務 API 發出使用量。

針對 Kubernetes 應用程式供應專案,請使用下列步驟從應用程式取得驗證令牌。 如需詳細資訊,請參閱 範例程序代碼。

  1. 應用程式的受控服務識別 (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()
    
  2. 使用 Marketplace 用量計算服務 API 發出使用量