自定义令牌

作为开发人员,你与 Microsoft Entra ID 的主要交互是请求令牌来标识用户。 你还将请求令牌来获取调用 Web API 的授权。 Web API 令牌确定该 API 在服务特定请求时可执行的操作。 在本文中,你将了解可以在令牌中接收的信息,以及如何自定义令牌。 这些零信任开发人员最佳做法有助于提高灵活性和控制度,同时提高最低特权下的应用程序安全性

自定义应用程序令牌的原因取决于你在应用程序和 API 中,用于驱动更精细授权的过程。 例如,应用中可能具有不同的用户角色、访问级别和功能,这些都依赖于令牌中的信息。

Microsoft Graph API 跨 Microsoft 365 提供一组可靠的目录信息和数据。 可以通过在 Microsoft Graph 中数据的基础上开发精细且丰富的授权系统。 例如,你可以从用户的组成员身份、详细配置文件数据、SharePoint 和 Outlook 来访问信息,以便在授权决策中使用。 你还可以在令牌中包含来自 Microsoft Entra ID 的授权数据。

应用程序级别授权

IT 专业人员可以添加应用级授权,既无需自定义令牌,也无需开发人员添加任何代码。

IT 专业人员可以使用所需用户分配标志来阻止向租户中的任何应用发放令牌,以确保只有一组用户能够登录到应用程序。 如果没有此标志,租户中的所有用户均可访问该应用程序。 使用此标志,只有分配的用户和组能够访问该应用程序。 当分配的用户访问应用时,应用就会收到令牌。 如果用户没有分配,则应用不会收到令牌。 记住要始终正常处理不接收令牌的令牌请求。

令牌自定义方法

有两种方法自定义令牌:可选声明和声明映射。

可选声明

可选声明指定希望 Microsoft Entra ID 以令牌形式发送到应用程序的声明。 使用可选声明可以:

  • 选择要包含在应用程序令牌中的更多声明。
  • 更改 Microsoft 标识平台在令牌中返回的声明的行为。
  • 添加和访问应用程序的自定义声明。

可选声明挂起具有定义架构的应用程序注册对象。 无论应用程序在何处运行,它们都适用。 编写多租户应用程序时,可选声明效果良好,因为它们在 Microsoft Entra ID 的每个租户中都是一致的。 例如,IP 地址并非特定于租户,而应用程序具有 IP 地址。

默认情况下,租户中的来宾用户也可以登录到应用。 如果要阻止来宾用户,请选择加入可选声明 (acct)。 如果为 1,则用户属于来宾分类。 如果要阻止来宾,请选择 acct==1 来阻止令牌。

声明映射策略

在 Microsoft Entra ID 中,策略对象表示针对组织中的单个应用程序或所有应用程序强制实施的一组规则。 声明映射策略修改 Microsoft Entra ID 在特定应用程序的令牌中发出的声明。

对没有架构的特定于租户的信息(例如 EmployeeID、DivisionName)使用声明映射。 声明映射适用于租户管理员控制的服务主体级别。 声明映射对应该应用程序的企业应用或服务主体。 每个租户都可以有自己的声明映射。

如果要开发业务线应用程序,可以专门了解租户执行的操作(你的租户拥有哪些可用于令牌的具体声明)。 例如,如果组织的本地 Active Directory 中有用户的分区名称属性(不是 Microsoft Entra ID 中的标准字段),则可以使用 Microsoft Entra Connect 将其同步到 Microsoft Entra ID。

可使用其中一个标准扩展属性来包含该信息。 可以使用部门名称声明来定义令牌,你可以从相应的扩展撰写该声明(即使它并不适用于每个租户)。 例如,组织将其分区名称置于扩展属性 13 中。

通过声明映射,可以使其适用于将分区名称置于属性 7 的另一个租户。

计划令牌自定义

你自定义的令牌取决于应用程序的类型:客户端应用程序或 API。 自定义令牌时可执行的操作没有区别。 可放入令牌中的内容对于每个令牌都是相同的。 选择要自定义的令牌取决于应用使用哪个令牌。

自定义 ID 令牌

如果要开发客户端应用程序,可自定义 ID 令牌,因为它是你请求标识用户的令牌。 当令牌中的受众声明 (aud) 与应用程序的客户端 ID 匹配时,令牌属于你的应用。 对于调用 API 但不实现 API 的客户端应用程序,请确保仅自定义应用的 ID 令牌。

通过 Azure 门户 和 Microsoft Graph API,还可以自定义应用的访问令牌,但这些自定义项不起作用。 不能为你不拥有的 API 自定义访问令牌。 请记住,应用不得尝试解码或检查客户端应用作为调用 API 授权接收的访问令牌。

自定义访问令牌

如果要开发 API,请自定义访问令牌,因为 API 会接收访问令牌作为客户端对 API 调用的一部分。

客户端应用程序始终自定义它们收到的 ID 令牌来标识用户。 API 自定义 API 作为对 API 调用的一部分接收的访问令牌。

组和应用角色

最常见的授权技术之一是根据用户的组成员身份或分配的角色进行访问。 在令牌中配置组声明和应用角色介绍了如何使用应用角色定义来配置应用,以及如何将安全组分配给应用角色。 这些方法有助于提高灵活性和控制度,同时提高最低特权下的应用程序零信任安全性。

后续步骤