你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文为开发人员和管理员提供了分步指南,用于设置安全的应用程序身份验证和对 Microsoft行星计算机专业版的访问权限。 通过应用Microsoft Entra ID 和托管标识,应用程序无需管理凭据即可无缝进行身份验证,确保与行星计算机专业版资源的安全交互。 无论应用程序是在 Azure 或其他环境中运行的,本指南都概述了必要的配置,包括基于角色的访问控制(RBAC)和令牌获取,以实现安全访问。
注释
对于使用 Azure AD B2C 或Microsoft Entra 外部 ID 支持功能(如社交标识提供者)的应用程序,应用程序需要继续使用这些标识解决方案来代理身份验证流量,因为行星计算机专业不支持Microsoft Entra ID 身份验证的替代方法。
先决条件
- 具备有效订阅的 Azure 帐户 - 免费创建帐户
- 现有的 GeoCatalog 资源。
在 Azure 上运行的应用程序
对于在 Azure 上运行的应用程序,我们建议创建一种 Microsoft Entra 标识类型,称为用户分配的托管标识,以访问 GeoCatalog 资源。 应用程序可以使用托管标识来获取Microsoft Entra 令牌(请参阅“ 获取访问令牌”部分,以访问Microsoft行星计算机专业版 ,而无需管理任何凭据。 有关托管标识和要选择的类型的详细信息,请参阅 什么是 Azure 资源的托管标识。 若要为在 Azure 上运行的应用程序创建用户分配的托管标识,请遵循 如何为应用服务和 Azure Functions 使用托管标识。
未在 Azure 上运行的应用程序
对于未在 Azure 上运行的应用程序(例如本地或托管在其他云提供商上的应用程序),我们建议您在 Microsoft Entra 管理中心 注册应用程序,包括一个用于接收安全令牌的重定向 URI,以便在您的应用与 Microsoft 标识平台之间建立信任关系。 在 Microsoft Entra 中注册应用会自动为应用创建服务主体,稍后可以分配 RBAC 角色。 如果应用程序具有配置 Microsoft Entra ID 身份验证的设置,则可以使用已注册应用的“应用程序(客户端)ID”和“目录(租户)ID”执行此作。
如果无法按之前的建议在 Microsoft Entra 中注册应用程序,您还可以选择在 Azure VM 或容器化应用中运行该应用程序。 可以创建用户分配的托管标识,并将其分配给虚拟机(VM)或容器应用,如此处所述 - 在 Azure 虚拟机(VM)上配置托管标识 和 Azure 容器应用中的托管标识。 应用程序可以使用托管标识登录以访问 GeoCatalog 资源。 例如,若要使应用程序使用用户分配的托管标识在 VM 中运行,可以使用:
!az login --identity --username <client_id|object_id|resource_id>
可以从 Azure 门户找到托管标识的客户端 ID、对象 ID 或资源 ID。 作为 CLI 的替代方法,示例 Python 代码位于 “获取访问令牌”部分下,用于访问Microsoft行星计算机专业版。
azure.identity.DefaultAzureCredential(managed_identity_client_id=<client_id>)
根据前面所述为应用程序创建用户分配的托管标识或服务主体后,需要确定应用程序访问方案的类型:仅限应用的访问权限,仅充当应用程序自己的标识或委派访问,代表登录用户。
仅限应用访问
在此访问方案中,应用程序自行作,无需用户登录作为默认行为。 可以转到 Microsoft Planetary Computer Pro RBAC 配置部分 以便为应用程序分配相应的角色。
委派访问权限
在此访问方案中,用户登录到客户端应用程序。 客户端应用程序代表用户访问资源。 需要确保为应用程序的用户分配适当的 RBAC 角色,如 “创建和管理用户”部分所述。 还需要按照以下步骤使用委派权限配置应用程序的 API 权限:
- 登录 Microsoft Entra 管理中心
- 浏览到“标识”“应用程序”>“应用注册”,然后选择客户端应用程序>
- 在“管理”下,选择 API 权限
- 选择“添加权限”
- 选择 组织使用的 API 选项卡
- 在搜索字段中键入 Azure Orbital Planetary Computer
- 选择匹配项(应用 ID 应为 6388acc4-795e-43a9-a320-33075c1eb83b)。 它显示为 Azure Orbital Microsoft Planetary Computer Pro。
- 请在 “委派权限” 框上选择。 请在 user_impersonation旁边的框中打勾。
- 选择“添加权限”
- 选择“授予管理员同意”链接(假设你的意图是在租户中对此权限授予管理员同意)
从 QGIS 进行连接时,也会使用委托的身份验证模式。
适用于应用程序的 Microsoft Planetary Computer Pro RBAC 配置
为在 Azure 上运行的应用程序创建托管标识,或者为未在 Azure 上运行但已注册到 Microsoft Entra 中的应用程序的服务主体创建托管标识后,需要向标识授予适当的权限,以便通过 RBAC 配置访问 GeoCatalog 资源。
下面是一个分步示例,演示如何配置 Role-Based 访问控制(RBAC),以将“GeoCatalog 管理员”角色分配给应用程序的用户分配托管标识。 可以在 Azure 门户中按照上述步骤为应用程序的服务主体配置 RBAC。
在 Azure 门户中,转到左侧 Microsoft Planetary Computer Pro 资源的 IAM 选项卡。
选择“添加角色分配”,然后在“作业功能角色”下选择 GeoCatalog 管理员
选择“下一个”按钮,然后选择“托管标识”的单选按钮
选择 “选择成员 ”,然后在右侧的 “选择托管标识 ”窗格中选择订阅和用户分配的托管标识。
选择 “下一步 ”以验证信息并完成 评审 + 分配。
获取访问令牌以访问Microsoft行星计算机专业版
将 RBAC 配置为授予应用程序适当的权限后,应用程序需要获取访问令牌来对请求进行身份验证。 下面的 Python 示例代码:
import azure.identity
credential = azure.identity.DefaultAzureCredential()
token = credential.get_token("https://geocatalog.spatio.azure.com/")
headers = {"Authorization": f"Bearer {token.token}"}
注释
如果应用程序分配了多个托管标识,则需要明确传递正确的托管标识: azure.identity.DefaultAzureCredential(managed_identity_client_id=<client_id>) 或者,可以在 Azure 门户上配置应用程序的环境变量,以使用正确的托管标识客户端 ID 添加 "AZURE_CLIENT_ID"。
注释
根据您预期的用户身份验证行为,可以添加 .default 或 user_impersonation 作为 credential.get_token() 的范围。
注释
如果应用程序是 Web 应用,只要对代码或应用配置进行更改,请确保关闭并重新打开 Web 浏览器,以避免使用缓存的凭据。
有关访问令牌的详细信息,请参阅 Microsoft标识平台中的 访问令牌。 通过调用 DefaultAzureCredentials()获取访问令牌时,获取的令牌由凭据实例 缓存 。 令牌的生存期和刷新由系统自动处理。 可以传递 DefaultAzureCredential 实例,并在需要令牌之前调用 GetToken() 或 GetTokenAsync(),这样你就可以始终获得一个未过期的令牌。 如果需要保持长时间的会话,可以在错误处理程序中处理令牌过期,以便捕获异常并获取新令牌。
如果您无法使用 DefaultAzureCredentials(),而是选择使用其他方法(例如 AzureCliCredential())来获取访问令牌,则需要管理令牌的生存期和刷新。 有关详细信息,请参阅 Microsoft标识平台中的可配置令牌生存期 和 Microsoft标识平台中的刷新令牌 。