作为开发人员,与 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在特定应用程序的令牌中发布的声明。
对没有架构(例如,EmployeeIDDivisionName)的特定于租户的信息使用声明映射。 声明映射适用于租户管理员控制的服务主体级别。 声明映射对应于该应用程序的企业应用或服务主体。 每个租户可以有自己的声明映射。
开发业务应用时,尤其要仔细研究租户的作用(租户有哪些可以用于令牌的具体声明)。 例如,如果组织在其本地 Active Directory 中具有用户的分区名称属性(而不是 Microsoft Entra ID 中的标准字段),请使用 Microsoft Entra Connect 将其同步到 Microsoft Entra ID。
若要包含该信息,请使用标准扩展属性之一。 使用部门名称声明定义你的令牌,你可以通过相应的扩展进行组合(即使它不适用于每个租户)。 例如,组织将其部门名称置于扩展属性 13 中。
使用声明映射,可以使其适用于将分区名称置于属性 7 的另一个租户。
计划进行令牌自定义
自定义的令牌取决于应用程序的类型:客户端应用程序或 API。 自定义令牌时可以执行的操作没有区别。 可以放入令牌中的内容对于每个令牌都是相同的。 选择自定义的令牌取决于应用使用哪些令牌。
自定义 ID 令牌
如果要开发客户端应用程序,请自定义 ID 令牌 ,因为它是你请求标识用户的令牌。 令牌中的受众声明 (aud) 与应用程序的客户端 ID 匹配时,令牌属于你的应用。 对于调用而不实现 API 的客户端应用程序,请确保你只自定义应用的 ID 令牌。
使用 Azure 门户和 Microsoft Graph API,您也可以自定义应用的访问令牌,但这些自定义并没有效果。 不能为不拥有的 API 自定义访问令牌。 请记住,应用不得尝试解码或检查客户端应用作为调用 API 的授权接收的访问令牌。
自定义访问令牌
开发 API 时,自定义访问令牌,因为 API 接收 访问令牌 作为客户端对 API 调用的一部分。
客户端应用程序始终自定义他们收到的 ID 令牌来标识用户。 API 自定义其接收的作为调用 API 的一部分的访问令牌。
组和应用角色
最常见的授权技术之一是基于用户的组成员身份或分配的角色进行访问。 在令牌中配置组声明和应用角色介绍了如何使用应用角色定义来配置应用,以及如何将安全组分配给应用角色。 这些方法有助于提高灵活性和控制,同时提高应用程序零信任安全性(最低特权)。
后续步骤
- B2B 协作用户声明映射 描述了 Microsoft Entra ID 对 B2B 协作用户的安全断言标记语言(SAML)令牌中的声明进行自定义支持。
- 当用户通过使用 SAML 2.0 协议的 Microsoft 标识平台对应用程序进行身份验证时,可以自定义应用的 SAML 令牌声明。
- API 保护描述了通过注册保护 API、定义权限和同意,以及强制实施访问权限,以实现零信任目标的最佳做法。
- 授权最佳做法可帮助你为应用程序实现最佳授权、权限和同意模型。
- 在应用程序开发生命周期中使用零信任身份和访问管理开发最佳做法来创建安全应用程序。