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

使用 Microsoft Entra ID 和 Azure Maps REST API 保护输入受限设备

本指南讨论如何保护不能安全地存储机密或接受浏览器输入的公共应用程序或设备。 这些类型的应用程序属于物联网 (IoT) 类别。 示例包括智能电视和传感器数据发射应用程序。

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

  1. 登录 Azure 门户

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

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

    屏幕截图显示 Azure 门户中的 Azure Maps 身份验证选项。

创建 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 中创建应用程序注册

注意

在 Microsoft Entra ID 中创建基于设备的应用程序,以启用 Microsoft Entra 登录,并向其授予 Azure Maps REST API 的访问权限。

  1. 在 Azure 门户的 Azure 服务列表中,选择“Microsoft Entra ID”>“应用注册”>“新注册”。

    显示 Microsoft Entra ID 中应用程序注册的屏幕截图。

  2. 输入“名称”,选择“仅此组织目录中的帐户”作为“支持的帐户类型”。 在“重定向 URI”中,指定“公共客户端/本机(移动和桌面)”,然后将 https://login.microsoftonline.com/common/oauth2/nativeclient 添加到值。 有关详细信息,请参阅 Microsoft Entra ID 用于调用 Web API 的桌面应用:应用注册。 然后,“注册”应用程序。

    显示用于注册应用程序的设置的屏幕截图。

  3. 导航到“身份验证”并启用“将应用程序视为公共客户端”,以使用 Microsoft Entra ID 进行设备代码身份验证。

    显示用于指定将应用程序视为公共客户端的高级设置的屏幕截图。

  4. 若要将委托的 API 权限分配给 Azure Maps,请访问应用程序。 然后依次选择“API 权限”>“添加权限”。 在“我的组织使用的 API”下,搜索并选择“Azure Maps” 。

    显示在何处请求 API 权限的屏幕截图。

  5. 选中“访问 Azure Maps”旁边的复选框,然后选择“添加权限” 。

    显示在何处指定所需应用权限的屏幕截图。

  6. 为用户或组配置 Azure 基于角色的访问控制 (Azure RBAC)。 有关详细信息,请参阅向用户授予 Azure Maps 的基于角色的访问权限

  7. 若要添加用于在应用程序中获取令牌流的代码,有关实现详细信息,请参阅设备代码流。 获取令牌时,参考范围:user_impersonation(前面的步骤中已选定)。

    提示

    使用 Microsoft 身份验证库 (MSAL) 获取访问令牌。 有关详细信息,请参阅 Active Directory 文档中的调用 Web API 的桌面应用:代码配置

  8. 使用从 Microsoft Entra ID 获取的令牌编写 HTTP 请求,并使用有效的 HTTP 客户端发送请求。

示例请求

以下用于上传简单地理围栏的示例请求正文表示为使用中心点和半径的圆形几何图形。

POST /mapData?api-version=2.0&dataFormat=geojson
Host: us.atlas.microsoft.com
x-ms-client-id: 30d7cc….9f55
Authorization: Bearer eyJ0e….HNIVN

以下示例请求正文在 GeoJSON 中:

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [-122.126986, 47.639754]
        },
        "properties": {
            "geometryId": "001",
            "radius": 500
        }
    }]
}

示例响应标头

Operation-Location: https://us.atlas.microsoft.com/mapData/operations/{udid}?api-version=2.0
Access-Control-Expose-Headers: Operation-Location

向用户授予对 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 Maps 帐户的 API 使用情况指标: