您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

市场计量服务身份验证策略

市场计量服务支持两种身份验证策略:

本文将介绍何时以及如何使用不同的身份验证策略并使用市场计量服务安全提交自定义计量器。

使用 Azure AD 安全令牌

适用的产品/服务类型是采用托管应用程序计划类型的可交易 SaaS 和 Azure 应用程序。

使用预定义的固定 Azure AD 应用程序 ID 进行身份验证,从而提交自定义计量器。

对于 SaaS 产品/服务,这是唯一可用的选项。 要发布任何 SaaS 产品/服务,则必须执行此步骤,如注册 SaaS 应用程序中所述。

对于采用托管应用程序计划的 Azure 应用程序,在以下情况下应考虑使用此策略:

  • 已有一种机制可用来与后端服务通信,并且你想要扩展此机制,以便从某个集中化服务发出自定义计量器。
  • 存在复杂的自定义计量器逻辑。 在某个集中化位置而不是在托管应用程序资源中运行此逻辑。

注册应用程序后,可采用编程方式请求 Azure AD 安全令牌。 发布者预期使用此令牌,并发出请求来解析它。

有关这些令牌的详细信息,请参阅 Azure Active Directory 访问令牌

基于 Azure AD 应用获取令牌

HTTP 方法

POST

请求 URL

https://login.microsoftonline.com/*{tenantId}*/oauth2/token

URI 参数

参数名称 必需 说明
tenantId True 已注册的 Azure AD 应用程序的租户 ID。

请求标头

标头名称 必需 说明
Content-Type True 与请求关联的内容类型。 默认值是 application/x-www-form-urlencoded

请求正文

属性名称 必需 说明
Grant_type True 授权类型。 使用 client_credentials
Client_id True 与 Azure AD 应用关联的客户端/应用标识符。
client_secret True 与 Azure AD 应用关联的机密。
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 托管标识令牌

适用的产品/服务类型是采用托管应用程序计划类型的 Azure 应用程序。

使用此方法可使部署的资源标识能够进行身份验证,以发送自定义计量器使用情况事件。 可以在部署边界内嵌入用于发出使用情况的代码。

备注

发布者应确保发出使用情况的资源被锁定,以免使用情况数据遭到篡改。

托管应用程序可以包含从虚拟机到 Azure Functions 在内的各种类型的资源。 有关如何使用各种服务的托管标识进行身份验证的详细信息,请参阅如何使用 Azure 资源的托管标识)。

例如,按照以下步骤使用 Windows VM 进行身份验证:

  1. 确保使用以下方法之一来配置托管标识:

  2. 使用系统标识获取市场计量服务应用程序 ID (20e940b3-4c77-4b0b-9a53-9e16a1b010a7) 的访问令牌,通过 RDP 连接到 VM,打开 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

    # 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. 市场计量服务要求报告有关 resourceID 的使用情况,如果是托管应用程序,则还要报告有关 resourceUsageId 的使用情况。

    # Get resourceUsageId from the managed app
    $managedAppUrl = "https://management.azure.com/subscriptions/" + $metadata.compute.subscriptionId + "/resourceGroups/" + $metadata.compute.resourceGroupName + "/providers/Microsoft.Solutions/applications/" + $managedappId + "\?api-version=2019-07-01"
    $ManagedApp = curl $managedAppUrl -H $Headers | Select-Object -Expand Content | ConvertFrom-Json
    # Use this resource ID to emit usage 
    $resourceUsageId = $ManagedApp.properties.billingDetails.resourceUsageId
    
  5. 使用市场计量服务 API 发出使用情况。

后续步骤