你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

保护守护程序应用程序

本文介绍如何在 Microsoft Azure Maps 的受信任且安全的环境中托管守护程序应用程序。

下面是守护程序应用程序的示例:

  • Azure Web 作业
  • Azure 函数应用
  • Windows 服务
  • 正在运行的可靠后台服务

查看 Azure Maps 身份验证详细信息

若要在 Azure 门户中查看 Azure Maps 帐户身份验证详细信息:

  1. 登录 Azure 门户

  2. 导航到 Azure 门户菜单。 选择“所有资源”,然后选择你的 Azure Maps 帐户。

  3. 在左侧窗格中的“设置”下,选择“身份验证” 。

    Screenshot showing your Azure Maps authentication options in the Azure portal.

创建 Azure 地图帐户时,将创建三个值。 这些值将用于在 Azure Maps 中支持两种类型的身份验证:

  • Microsoft Entra 身份验证Client ID 表示要用于 REST API 请求的帐户。 Client ID 值应存储在应用程序配置中,然后在发出使用 Microsoft Entra 身份验证的 Azure Maps HTTP 请求之前检索该值。
  • 共享密钥身份验证:Primary KeySecondary Key 用作共享密钥身份验证的订阅密钥。 共享密钥身份验证依赖于将 Azure Maps 帐户生成的密钥连同每个请求一起传递到 Azure Maps。 建议定期重新生成密钥。 为在重新生成期间保持当前连接,有两个密钥可供使用。 重新生成另一个密钥期间,可使用其中一个密钥。 重新生成密钥时,必须将访问此帐户的所有应用程序更新为使用新密钥。 有关详细信息,请参阅向 Azure Maps 进行身份验证

重要

对于生产应用程序,建议实现 Microsoft Entra ID 和 Azure 基于角色的访问控制 (Azure RBAC)。 有关 Microsoft Entra 概念的概述,请参阅 Azure Maps 身份验证

方案:使用 Azure 密钥保管库进行共享密钥身份验证

使用共享密钥身份验证的应用程序应将密钥存储在安全存储中。 此方案说明如何安全地将应用程序密钥作为机密存储在 Azure 密钥保管库中。 应用程序可以检索 Azure 密钥保管库机密形式的共享密钥,而不是将共享密钥存储在应用程序配置中。 为了简化密钥重新生成,建议让应用程序一次使用一个密钥。 然后,应用程序可以重新生成未使用的密钥,并将重新生成的密钥部署到 Azure 密钥保管库,同时仍可使用一个密钥保持当前连接。 若要了解如何配置 Azure 密钥保管库,请参阅 Azure 密钥保管库开发人员指南

重要

此方案通过 Azure 密钥保管库间接访问 Microsoft Entra ID。 但是,建议直接使用 Microsoft Entra 身份验证。 直接使用 Microsoft Entra ID 可以避免使用共享密钥身份验证和设置密钥保管库,无需应对更高的复杂性与操作要求。

以下步骤概述了此过程:

  1. 创建 Azure 密钥保管库
  2. 通过创建应用注册或托管标识来创建 Microsoft Entra 服务主体。 创建的主体负责访问 Azure 密钥保管库。
  3. 向服务主体分配对 Azure 密钥机密 get 权限的访问权限。 有关如何设置权限的详细信息,请参阅使用 Azure 门户分配密钥保管库访问策略
  4. 为开发人员临时分配对机密 set 权限的访问权限。
  5. 在密钥保管库机密中设置共享密钥,并引用机密 ID 作为守护程序应用程序的配置。
  6. 删除机密 set 权限。
  7. 若要从 Azure 密钥保管库检索共享密钥机密,请在守护程序应用程序中实现 Microsoft Entra 身份验证。
  8. 使用共享密钥创建 Azure Maps REST API 请求。 现在,守护程序应用程序可以从密钥保管库检索共享密钥。

提示

如果应用托管在 Azure 环境中,我们建议使用托管标识来降低管理身份验证机密的成本和复杂性。 若要了解如何设置托管标识,请参阅教程:使用托管标识将密钥保管库连接到 .NET 中的 Azure Web 应用

方案:Microsoft Entra 基于角色的访问控制

创建 Azure Maps 帐户后,Azure Maps Client ID 值就会出现在 Azure 门户身份验证详细信息页中。 此值表示要用于 REST API 请求的帐户。 此值应存储在应用程序配置中,并在发出 HTTP 请求之前进行检索。 此方案的目标是使守护程序应用程序能够向 Microsoft Entra ID 进行身份验证,并调用 Azure Maps REST API。

提示

为了发挥托管标识组件的优势,我们建议在 Azure 虚拟机、虚拟机规模集或应用服务上进行托管。

在 Azure 资源上托管守护程序

在 Azure 资源上运行时,可以配置 Azure 管理的标识,以降低成本并最大程度地减少凭据管理工作量。

要使应用程序能够访问托管标识,请参阅托管标识概述

托管标识的一些优势如下:

  • Azure 系统管理的 X509 证书公钥加密身份验证。
  • 使用 X509 证书(而不是客户端密码)保护 Microsoft Entra 安全性。
  • Azure 管理并续订与托管标识资源关联的所有证书。
  • 由于托管标识不需要 Azure 密钥保管库之类的安全机密存储服务,因此简化了凭据操作管理。

在非 Azure 资源上托管守护程序

仅当在 Azure 环境中运行时,托管标识才可用。 因此,必须通过 Microsoft Entra 应用程序注册为守护程序应用程序配置服务主体。

创建新的应用程序注册

如果已创建应用程序注册,请转到分配委托的 API 权限

若要创建新的应用程序注册,请执行以下操作:

  1. 登录 Azure 门户

  2. 选择“Microsoft Entra ID”。

  3. 在左侧窗格中的“管理”下,选择“应用注册” 。

  4. 选择“+ 新建注册”选项卡。

    A screenshot showing application registration in Microsoft Entra ID.

  5. 输入名称,然后选择一个支持帐户类型 。

    Create app registration.

  6. 选择“注册” 。

分配委托的 API 权限

将委托的 API 权限分配给 Azure Maps:

  1. 如果尚未登录到 Azure 门户,请先登录。

  2. 选择“Microsoft Entra ID”。

  3. 在左侧窗格中的“管理”下,选择“应用注册” 。

  4. 选择自己的应用程序。

    Select app registrations.

  5. 在左侧窗格中的“管理”下,选择“API 权限” 。

  6. 选择“添加权限”。

    Add app permission.

  7. 选择“我的组织使用的 API”选项卡。

  8. 在搜索框中输入“Azure Maps”。

  9. 选择“Azure Maps”。

    Request app permission.

  10. 选中“访问 Azure Maps”复选框。

  11. 选择“添加权限”。

    Select app API permissions.

创建客户端机密或配置证书

若要在应用程序中实现基于服务器或应用程序的身份验证,可选择以下两个选项之一:

  • 上传公钥证书。
  • 创建客户端机密。
上传公钥证书

若要上传公钥证书,请执行以下操作:

  1. 在左侧窗格中的“管理”下,选择“证书和机密”

  2. 选择“上传证书”。 Upload certificate.

  3. 在文本框的右侧,选择文件图标。

  4. 选择 .crt、.cer 或 .pem 文件,然后选择“添加” 。

    Upload certificate file.

创建客户端机密

若要创建客户端机密,请执行以下操作:

  1. 在左侧窗格中的“管理”下,选择“证书和机密”

  2. 选择“+ 新建客户端机密”。

    New client secret.

  3. 输入客户端机密的说明。

  4. 选择添加

    Add new client secret.

  5. 复制该机密并将其安全地存储在 Azure 密钥保管库之类的服务中。 在本文的使用托管标识请求令牌部分,我们也要使用该机密。

    Copy client secret.

    重要

    若要安全地存储证书或机密,请参阅 Azure 密钥保管库开发人员指南。 你会使用此机密从 Microsoft Entra ID 获取令牌。

向用户授予对 Azure Maps 基于角色的访问权限

通过将 Microsoft Entra 组或安全主体分配到一个或多个 Azure Maps 角色定义,可授予 Azure 基于角色的访问控制 (Azure RBAC)

若要查看 Azure Maps 的可用 Azure 角色定义,请参阅查看内置的 Azure Maps 角色定义

若要详细了解如何将可用的 Azure Maps 角色分配给创建的托管标识或服务主体,请参阅使用 Azure 门户分配 Azure 角色

若要高效管理大量用户对 Azure Maps 应用和资源的访问,请参阅 Microsoft Entra 组

重要

要允许用户对应用程序进行身份验证,必须先在 Microsoft Entra ID 中创建用户。 有关详细信息,请参阅使用 Microsoft Entra ID 添加或删除用户

若要了解如何有效地管理大型用户目录,请参阅 Microsoft Entra ID

警告

Azure Maps 内置角色定义提供了一种范围很广的授权访问权限,可以访问许多 Azure Maps REST API。 若要将 API 访问权限限制为最小范围,请参阅创建自定义角色定义并将系统分配的标识分配给自定义角色定义。 这样即可将访问权限限制为应用程序访问 Azure Maps 所需的最少特权。

使用托管标识请求令牌

为托管资源配置托管标识后,可以使用 Azure SDK 或 REST API 获取 Azure Maps 的令牌。 若要了解如何获取访问令牌,请参阅获取访问令牌

使用应用程序注册请求令牌

注册应用并将它与 Azure Maps 关联后,需要请求访问令牌。

若要获取访问令牌,请执行以下操作:

  1. 如果尚未登录到 Azure 门户,请先登录。

  2. 选择“Microsoft Entra ID”。

  3. 在左侧窗格中的“管理”下,选择“应用注册” 。

  4. 选择自己的应用程序。

  5. 此时应会显示“概述”页。 复制“应用程序(客户端) ID”和“目录(租户) ID”。

    Copy token parameters.

本文使用 Postman 应用程序创建令牌请求,但你也可以使用其他 API 开发环境。

  1. 在 Postman 应用中,选择“新建”。

  2. 在“新建”窗口中,选择“HTTP 请求” 。

  3. 为请求输入一个请求名称,例如“POST 令牌请求”。

  4. 选择“POST”HTTP 方法。

  5. 在地址栏中输入以下 URL(请将 {Tenant-ID}{Client-ID} 分别替换为前面复制的“目录(租户) ID”和“应用程序(客户端) ID”,并将 {Client-Secret} 替换为你的客户端密码):

    https://login.microsoftonline.com/{Tenant-ID}/oauth2/v2.0/token?response_type=token&grant_type=client_credentials&client_id={Client-ID}&client_secret={Client-Secret}&scope=https://atlas.microsoft.com/.default
    
  6. 选择“发送”

  7. 此时应会看到以下 JSON 响应:

{
    "token_type": "Bearer",
    "expires_in": 86399,
    "ext_expires_in": 86399,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFq..."
}

有关身份验证流的详细信息,请参阅 Microsoft 标识平台上的 OAuth 2.0 客户端凭据流

后续步骤

有关更多详细示例:

查找 Azure Maps 帐户的 API 使用指标:

探索演示如何将 Microsoft Entra ID 与 Azure Maps 集成的示例: