Microsoft Entra ID 中应用程序属性的安全最佳做法

在 Microsoft Entra ID 中注册某个应用程序时,安全性是非常重要的概念,并且是该应用程序在组织中发挥业务作用时至关重要的考虑因素。 以任何不当方式配置应用程序都可能导致停机或机密透露。 根据添加到应用程序的权限,可能会产生组织范围的影响。

由于安全的应用程序对于组织极其重要,安全问题导致应用程序停机可能会影响业务或业务所依赖的某些关键服务。 因此,分配时间和资源来确保应用程序始终处于正常且安全的状态非常重要。 请定期对应用程序进行安全和运行状况评估,这与代码的安全威胁模型评估非常类似。 若要更广泛地了解组织的安全性,请参阅安全开发生命周期 (SDL)。

本文介绍以下应用程序属性的安全最佳做法:

  • 重定向 URI
  • 访问令牌(用于隐式流)
  • 证书和机密
  • 应用程序 ID URI
  • 应用程序所有权

重定向 URI

将应用程序重定向 URI 保持在最新状态很重要。 在 Azure 门户中应用程序的“身份验证”下,必须为应用程序选择一个平台,然后可以定义“重定向 URI”属性。

该屏幕截图显示了“重定向 URI”属性所在位置。

考虑以下有关重定向 URI 的指导:

  • 保留所有 URI 的所有权。 一个重定向 URI 的所有权失误就可能导致应用程序泄露。
  • 确保定期更新所有 DNS 记录并监视其是否有更改。
  • 不要使用通配符回复 URL 或不安全的 URI 方案,例如 http 或 URN。
  • 使列表保持较小。 剪裁任何不必要的 URI。 如果可能,请将 URL 从 Http 更新为 Https。

访问令牌(用于隐式流)

需要隐式流的方案现可使用身份验证代码流,来降低与隐式流误用相关的泄露风险。 在 Azure 门户中应用程序的“身份验证”下,必须为应用程序选择一个平台,然后可以设置“访问令牌(用于隐式流)”属性。

该屏幕截图显示了“隐式流属性”所在位置。

考虑以下有关隐式流的指导:

  • 了解是否需要隐式流。 除非明确要求,否则不要使用隐式流。
  • 如果应用程序已配置为使用隐式流接收访问令牌,但未主动使用它们,请关闭该设置以防止误用。
  • 对有效的隐式流方案使用单独的应用程序。

证书和机密

证书和机密(也称为凭据)是用作机密客户端的应用程序的极重要组成部分。 在 Azure 门户中应用程序的“证书和机密”下,可以添加或删除证书和机密。

该屏幕截图显示了“证书和机密”所在位置。

考虑以下有关证书和机密的指导:

  • 始终尽可能使用证书凭据,而不要使用密码凭据(也称为机密)。 尽管使用密码机密作为凭据很方便,但在可能的情况下,请使用 x509 证书作为唯一的凭据类型来获取应用程序的令牌。
  • 结合使用密钥保管库和托管标识来管理应用程序的凭据。
  • 如果应用程序仅用作公共客户端应用(允许用户使用公共终结点登录),请确保未在应用程序对象中指定凭据。
  • 查看应用程序中所用凭据的新旧程度和过期时间。 应用程序上未使用的凭据可能会导致安全漏洞。 经常变换凭据,并且不要在多个应用程序之间共享凭据。 不要在一个应用程序中使用许多凭据。
  • 监视生产管道,防止将任何类型的凭据提交到代码存储库中。
  • 凭据扫描程序是一个可用来检测源代码和生成输出中的凭据(和其他敏感内容)的静态分析工具。

应用程序 ID URI

应用程序的“应用程序 ID URI”属性指定用于标识 Web API 的全局唯一 URI。 它是范围的前缀,在访问令牌中,它也是受众声明的值,必须使用客户拥有的已验证的域。 对于多租户应用程序,该值也必须全局唯一。 它也称为标识符 URI。 在 Azure 门户中应用程序的“公开 API”下,可以定义“应用程序 ID URI”属性。

该屏幕截图显示了“应用程序 ID URI”所在位置。

考虑以下与定义应用程序 ID URI 相关的指导:

  • 建议使用 api 或 https URI 方案。 用支持的格式设置该属性,以避免组织中发生 URI 冲突。 不要使用通配符。
  • 在业务线 (LoB) 应用程序中使用已验证的域。
  • 在组织中保留 URI 的清单以帮助维持安全性。
  • 在组织中使用应用程序 ID URI 来公开 WebApi。 不要使用应用程序 ID URI 来标识应用程序,而应该使用“应用程序(客户端) ID”属性。

支持以下基于 API 和 HTTP 方案的应用程序 ID URI 格式。 替换表后列表中描述的占位符值。

支持的应用程序 ID
URI 格式
示例应用 ID URI
api://<appId> api://00001111-aaaa-2222-bbbb-3333cccc4444
api://<tenantId>/<appId> api://aaaabbbb-0000-cccc-1111-dddd2222eeee/00001111-aaaa-2222-bbbb-3333cccc4444
api://<tenantId>/<string> api://aaaabbbb-0000-cccc-1111-dddd2222eeee/api
api://<string>/<appId> api://productapi/00001111-aaaa-2222-bbbb-3333cccc4444
https://<tenantInitialDomain>.partner.onmschina.cn/<string> https://contoso.partner.onmschina.cn/productsapi
https://<verifiedCustomDomain>/<string> https://contoso.com/productsapi
https://<string>.<verifiedCustomDomain> https://product.contoso.com
https://<string>.<verifiedCustomDomain>/<string> https://product.contoso.com/productsapi
  • <appId> - 应用程序对象的应用程序标识符 (appId) 属性
  • <string> - 主机或 API 路径段的字符串值
  • <tenantId> - Azure 生成的用于表示 Azure 中的租户的 GUID
  • <tenantInitialDomain> - <tenantInitialDomain>.partner.onmschina.cn,其中 <tenantInitialDomain> 是租户创建者在创建租户时指定的初始域名。
  • <verifiedCustomDomain> - 为 Microsoft Entra 租户配置的已验证的自定义域

注意

如果使用 api:// 方案,则直接在“api://”之后添加一个字符串值。 例如,api://<string>。 该字符串值可以是 GUID 或任意字符串。 如果添加 GUID 值,值必须与应用 ID 或租户 ID 匹配。 应用程序 ID URI 值对于租户必须是唯一的。 如果将 api://<tenantId> 添加为应用程序 ID URI,其他人将无法在任何其他应用程序中使用该 URI。 建议改用 api://<appId> 或 HTTP 方案。

重要

应用程序 ID URI 值不能以斜杠“/”字符结尾。

应用所有权配置

所有者可以管理已注册的应用程序的各个方面。 定期评审组织中所有应用程序的所有权非常重要。 有关详细信息,请参阅 Microsoft Entra 访问评审。 在 Azure 门户中应用程序的“所有者”下,可以管理应用程序的所有者。

该屏幕截图显示了应用程序“所有者”管理位置。

考虑以下与指定应用程序所有者相关的指导:

  • 应用程序所有权应保留给组织中的极少数人。
  • 管理员应每隔几个月评审一次所有者列表,以确保所有者仍在组织中任职,并且仍然应该拥有某个应用程序。

集成助手

Azure 门户中的“集成助手”可用于确保应用程序符合高质量标准并提供安全的集成。 集成助手会突出显示在与 Microsoft 标识平台集成时有助于避免常见疏漏的最佳做法和建议。

该屏幕截图显示了“集成助手”所在位置。

后续步骤