共用方式為


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

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

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

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

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