你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 空间定位点身份验证和授权
本文介绍可从应用或 Web 服务向 Azure 空间定位点进行身份验证的各种方式。 你还将了解在 Microsoft Entra ID 中使用 Azure 基于角色的访问控制(Azure RBAC)来控制对空间定位点帐户的访问的方式。
警告
我们建议使用帐户密钥进行快速加入,但仅限在开发/原型设计期间执行此操作。 我们不建议将嵌入了帐户密钥的应用程序交付到生产环境。 请改用下一步所述的基于用户的 Microsoft Entra 身份验证方法或基于服务的 Microsoft Entra 身份验证方法。
概述
若要访问给定的 Azure 空间定位点帐户,客户端需要先从 Azure 混合现实安全令牌服务 (STS) 获取访问令牌。 从 STS 获取的令牌的生存期为 24 小时。 这些令牌包含空间定位服务用来对帐户做出授权决策的信息,并确保只有已获授权的主体可以访问该帐户。
可以通过交换 Microsoft Entra ID 颁发的帐户密钥或令牌来获取访问令牌。
帐户密钥可让你快速开始使用 Azure 空间定位点服务。 但在将应用程序部署到生产环境之前,建议更新应用以使用 Microsoft Entra 身份验证。
可以通过两种方式获取 Microsoft Entra 身份验证令牌:
- 如果要构建企业应用程序,并且公司正在使用 Microsoft Entra ID 作为其标识系统,则可以在应用中使用基于用户的 Microsoft Entra 身份验证。 然后,使用现有的 Microsoft Entra 安全组授予对空间定位点帐户的访问权限。 还可以直接向组织中的用户授予访问权限。
- 否则,建议从支持应用的 Web 服务获取 Microsoft Entra 令牌。 建议对生产应用程序使用此方法,因为这可以避免在客户端应用程序中嵌入用于访问 Azure 空间定位点的凭据。
帐户密钥
使用帐户密钥访问 Azure 空间定位点帐户是最简单的入手方法。 可以在 Azure 门户上获取帐户密钥。 转到你的帐户,然后选择“密钥”选项卡:
有两个密钥可供使用。 两者同时可用于访问空间定位点帐户。 建议定期更新用于访问该帐户的密钥。 准备好两个不同的有效密钥可实现这些更新,且不会造成停机。 只需更新主密钥和辅助密钥中的一个。
SDK 为通过帐户密钥进行身份验证提供内置支持。 你只需在 AccountKey
对象上设置 cloudSession
属性即可:
this.cloudSession.Configuration.AccountKey = @"MyAccountKey";
设置该属性后,SDK 将处理使用帐户密钥交换访问令牌的过程,并为应用提供必要的令牌缓存。
Microsoft Entra 用户身份验证
对于面向 Microsoft Entra 用户的应用程序,建议为用户使用 Microsoft Entra 令牌。 可以使用 MSAL 获取此令牌。 遵循有关注册应用的快速入门中的步骤,其中包括:
在 Azure 门户中
在 Microsoft Entra ID 中将应用程序注册为本机应用程序。 在注册过程中,需要确定应用程序是否应为多租户应用程序。 此外,还需要提供应用程序允许的重定向 URL。
转到“API 权限”选项卡。
选择“添加权限”。
- 在“我的组织使用的 API”选项卡上选择“混合现实资源提供程序”。
- 选择“委托的权限”。
- 在“mixedreality”下选择“mixedreality.signin”。
- 选择“添加权限”。
选择“授予管理员同意”。
将 ASA RBAC 角色分配给你要授予其资源访问权限的应用程序或用户。 如果希望应用程序的用户对 ASA 帐户具有不同的角色,请在 Microsoft Entra ID 中注册多个应用程序,并为每个应用程序分配单独的角色。 然后实现授权逻辑,以便为用户使用适当的角色。 有关详细的角色分配步骤,请参阅使用 Azure 门户分配 Azure 角色。
在代码中
- 请务必将自己的 Microsoft Entra 应用程序的应用程序 ID 和重定向 URI 用于 MSAL 中的客户端 ID 和 RedirectUri 参数。
- 设置租户信息:
- 如果你的应用程序支持“仅我的组织”,请将此值替换为你的租户 ID 或租户名称。 例如 contoso.microsoft.com。
- 如果你的应用程序支持“任何组织目录中的帐户”,请将此值替换为 Organizations。
- 如果你的应用程序支持“所有 Microsoft 帐户用户”,请将此值替换为 Common。
- 在令牌请求中,将“范围”设置为
https://sts.mixedreality.azure.com//.default
。 此范围将指示应用程序正在请求混合现实安全令牌服务(STS)的令牌的 Microsoft Entra ID。
完成这些步骤后,应用程序应能够从 MSAL 获取 Microsoft Entra 令牌。 可以将 Microsoft Entra 令牌设置为 authenticationToken
云会话配置对象:
this.cloudSession.Configuration.AuthenticationToken = @"MyAuthenticationToken";
Microsoft Entra 服务身份验证
若要将使用 Azure 空间定位点的应用部署到生产环境,我们建议使用一个用于中转身份验证请求的后端服务。 下面是该过程的概述:
此处,假设你的应用使用自己的机制向其后端服务进行身份验证。 (例如,Microsoft 帐户、PlayFab、Facebook、Google ID 或自定义用户名和密码。在用户向后端服务进行身份验证后,该服务可以检索 Microsoft Entra 令牌,将其交换为 Azure 空间定位点的访问令牌,并将其返回给客户端应用程序。
Microsoft Entra 访问令牌通过 MSAL 检索。 遵循应用注册快速入门中的步骤,其中包括:
在 Azure 门户中
- 在 Microsoft Entra ID 中注册应用程序:
- 在Azure 门户中,选择 Microsoft Entra ID,然后选择应用注册。
- 选择“新注册”。
- 输入应用程序的名称,选择“Web 应用/API”作为应用程序类型,然后输入服务的身份验证 URL。 选择创建。
- 在应用程序上选择“设置”,然后选择“证书和机密”选项卡。创建新的客户端密码,选择持续时间,然后选择“添加”。 请务必保存机密值。 稍后需要将其包含在 Web 服务的代码中。
- 将 ASA RBAC 角色分配给你要授予其资源访问权限的应用程序或用户。 如果希望应用程序的用户对 ASA 帐户具有不同的角色,请在 Microsoft Entra ID 中注册多个应用程序,并为每个应用程序分配单独的角色。 然后实现授权逻辑,以便为用户使用适当的角色。 有关详细的角色分配步骤,请参阅使用 Azure 门户分配 Azure 角色。
在代码中
- 请务必使用自己的 Microsoft Entra 应用程序的应用程序 ID、应用程序机密和重定向 URI 作为 MSAL 中的客户端 ID、 机密和 RedirectUri 参数。
- 在 MSAL 的 颁发机构 参数中,将租户 ID 设置为你自己的 Microsoft Entra 租户 ID。
- 在令牌请求中,将“范围”设置为
https://sts.mixedreality.azure.com//.default
。
完成这些步骤后,后端服务可以检索 Microsoft Entra 令牌。 然后,该服务会使用该令牌来交换要返回给客户端的 MR 令牌。 使用 Microsoft Entra 令牌检索 MR 令牌是通过 REST 调用完成的。 下面是一个示例调用:
GET https://sts.mixedreality.azure.com/Accounts/35d830cb-f062-4062-9792-d6316039df56/token HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni<truncated>FL8Hq5aaOqZQnJr1koaQ
Host: sts.mixedreality.azure.com
Connection: Keep-Alive
HTTP/1.1 200 OK
Date: Sun, 24 Feb 2019 08:00:00 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1153
Accept: application/json
MS-CV: 05JLqWeKFkWpbdY944yl7A.0
{"AccessToken":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjI2MzYyMTk5ZTI2NjQxOGU4ZjE3MThlM2IyMThjZTIxIiwidHlwIjoiSldUIn0.eyJqdGkiOiJmMGFiNWIyMy0wMmUxLTQ1MTQtOWEzNC0xNzkzMTA1NTc4NzAiLCJjYWkiOiIzNWQ4MzBjYi1mMDYyLTQwNjItOTc5Mi1kNjMxNjAzOWRmNTYiLCJ0aWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJhaWQiOiIzNWQ4MzBjYi1mMDYyLTQwNjItOTc5Mi1kNjMxNjAzOWRmNTYiLCJhYW8iOi0xLCJhcHIiOiJlYXN0dXMyIiwicmlkIjoiL3N1YnNjcmlwdGlvbnMvNzIzOTdlN2EtNzA4NC00ODJhLTg3MzktNjM5Y2RmNTMxNTI0L3Jlc291cmNlR3JvdXBzL3NhbXBsZV9yZXNvdXJjZV9ncm91cC9wcm92aWRlcnMvTWljcm9zb2Z0Lk1peGVkUmVhbGl0eS9TcGF0aWFsQW5jaG9yc0FjY291bnRzL2RlbW9fYWNjb3VudCIsIm5iZiI6MTU0NDU0NzkwMywiZXhwIjoxNTQ0NjM0MzAzLCJpYXQiOjE1NDQ1NDc5MDMsImlzcyI6Imh0dHBzOi8vbXJjLWF1dGgtcHJvZC50cmFmZmljbWFuYWdlci5uZXQvIiwiYXVkIjoiaHR0cHM6Ly9tcmMtYW5jaG9yLXByb2QudHJhZmZpY21hbmFnZXIubmV0LyJ9.BFdyCX9UJj0i4W3OudmNUiuaGgVrlPasNM-5VqXdNAExD8acFJnHdvSf6uLiVvPiQwY1atYyPbOnLYhEbIcxNX-YAfZ-xyxCKYb3g_dbxU2w8nX3zDz_X3XqLL8Uha-rkapKbnNgxq4GjM-EBMCill2Svluf9crDmO-SmJbxqIaWzLmlUufQMWg_r8JG7RLseK6ntUDRyDgkF4ex515l2RWqQx7cw874raKgUO4qlx0cpBAB8cRtGHC-3fA7rZPM7UQQpm-BC3suXqRgROTzrKqfn_g-qTW4jAKBIXYG7iDefV2rGMRgem06YH_bDnpkgUa1UgJRRTckkBuLkO2FvA"}
授权标头的格式如下:Bearer <Azure_AD_token>
响应包含纯文本格式的 MR 令牌。
该 MR 令牌随后会返回给客户端。 然后,客户端应用可在云会话配置中将此令牌设置为其访问令牌:
this.cloudSession.Configuration.AccessToken = @"MyAccessToken";
Azure 基于角色的访问控制
为了帮助你控制向服务的应用程序、服务或 Microsoft Entra 用户授予的访问权限级别,可以根据 Azure 空间定位点帐户根据需要分配这些预先存在的角色:
- 空间定位点帐户所有者。 具有此角色的应用程序或用户可以创建、查询和删除空间定位点。 当你使用帐户密钥对帐户进行身份验证时,系统会将“空间定位点帐户所有者”角色分配给经过身份验证的主体。
- 空间定位点帐户参与者。 具有此角色的应用程序或用户可以创建、查询空间定位点,但不能删除空间定位点。
- 空间定位点帐户读取者。 具有此角色的应用程序或用户只能查询空间定位点, 而不能创建新的空间定位点、删除现有的空间定位点,也不能更新空间定位点的元数据。 此角色通常用于这样的应用程序:其中有些用户管护了环境,但还有一些用户只能重新调用以前放置在该环境中的定位点。
后续步骤
使用 Azure 空间定位点创建你的第一个应用: