自定义令牌

作为开发人员,你与 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 调用的一部分接收的访问令牌。

组和应用角色

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

后续步骤