Microsoft 标识平台最佳做法和建议

本文重点说明在与 Microsoft 标识平台集成时的最佳做法、建议和最容易疏忽的问题。 此查检表可引导你完成高质量且安全的集成。 请定期查看此列表,确保维持应用与标识平台之间的集成的质量和安全性。 请不要参照该查检表来评审整个应用程序。 在我们不断改进平台的过程中,该查检表的内容将会更改。

如果你刚刚入门,请查看 Microsoft 标识平台文档来了解身份验证基础知识、Microsoft 标识平台中的应用方案,等等。

使用以下查检表确保应用程序与 Microsoft 标识平台有效集成。

提示

Azure 门户中的集成助手可帮助你应用其中许多最佳做法和建议。 选择 Azure 门户中的任何应用注册,然后选择“集成助手”菜单项,开始使用助手。

基础知识

复选框 阅读并理解 Microsoft 平台策略。 确保应用程序符合旨在保护用户和平台的所述条款。

所有权

复选框 确保用来注册和管理应用的、与帐户关联的信息是最新的。

品牌

复选框 遵守适用于应用程序的品牌准则

复选框 为应用程序提供有意义的名称和徽标。 此信息将显示在应用程序的许可提示中。 确保提供的名称和徽标能够代表公司/产品的形象,以帮助用户做出明智的决定。 确保不要违反任何商标法案。

隐私

复选框 提供应用服务条款和隐私声明的链接。

安全性

复选框 管理重定向 URI:

  • 保留所有重定向 URI 的所有权,并使其 DNS 记录保持最新。
  • 不要在 URI 中使用通配符 (*)。
  • 对于 Web 应用,请确保所有 URI 安全且已经过加密(例如,使用 https 方案)。
  • 对于公共客户端,在适用的情况下请使用特定于平台的重定向 URI(主要适用于 iOS 和 Android)。 否则,请使用包含大量随机内容的重定向 URI,以防在回调应用时发生冲突。
  • 如果在隔离的 Web 代理中使用应用,则可以使用 https://login.partner.microsoftonline.cn/common/oauth2/nativeclient
  • 定期审查并修剪所有未使用或不必要的重定向 URI。

复选框 如果应用已注册到目录中,请最小化并手动监视应用注册所有者的列表。

复选框 除非有明确的要求,否则不要启用对 OAuth2 隐式授权流的支持。 在此处了解有效方案。

复选框 不要仅使用用户名/密码。 不要使用资源所有者密码凭据流 (ROPC),因为它会直接处理用户的密码。 此流所需的信任度和用户公开度很高,仅当无法使用其他更安全的流时,才应使用此流。 在某些情况下,此流仍然是必需的,但请注意,使用它会对应用程序施加约束。 有关其他新式方法,请阅读身份验证流和应用程序方案

复选框 保护和管理 Web 应用、Web API 和守护程序应用的机密应用凭据。 使用证书凭据,而不是密码凭据(客户端机密)。 如果必须使用密码凭据,请不要手动设置。 不要将凭据存储在代码或配置中,切勿允许人类处理这些凭据。 如果可能,请使用 Azure 资源的托管标识Azure Key Vault 存储和定期轮换凭据。

复选框 确保应用程序请求最低特权权限。 只在有需要时,才请求应用程序绝对需要的权限。 了解不同的权限类型。 仅在必要时使用应用程序权限;尽量使用委托的权限。 有关 Microsoft Graph 权限的完整列表,请参阅此权限参考

复选框 如果你在使用 Microsoft 标识平台保护 API,请仔细考虑该 API 应该公开的权限。 考虑解决方案需要哪种适当的粒度级,以及哪些权限需要管理员许可。 在做出任何授权决策之前,请检查传入令牌中的预期权限。

实现

复选框 使用新式身份验证解决方案(OAuth 2.0、OpenID Connect)确保用户安全登录。

复选框 不要直接对 OAuth 2.0 和 Open ID 等协议进行编程。 请改用 Microsoft 身份验证库 (MSAL)。 MSAL 库将安全协议安全地包装在一个易用的库中,你可以获得对条件访问方案的内置支持,以及内置的令牌缓存支持。 有关详细信息,请参阅 Microsoft 支持的客户端库列表。 如果必须为身份验证协议手动编写代码,应遵循 Microsoft SDL 或类似的开发方法。 请认真对待每个协议的标准规范中的安全注意事项。

复选框 将现有应用从 Azure Active Directory 身份验证库 (ADAL) 迁移到 Microsoft 身份验证库。 MSAL 是 Microsoft 的最新标识平台解决方案,比 ADAL 更普及。 它适用于 .NET、JavaScript、Android、iOS 和 macOS,并为 Python 和 Java 推出了公共预览版。 详细了解如何迁移 ADAL.NETADAL.js 以及 ADAL.NET 和 iOS 中介应用。

复选框 对于移动应用,请使用应用程序注册体验来配置每个平台。 要使应用程序能够利用 Microsoft Authenticator 或 Microsoft 公司门户进行单一登录,需要为应用配置“中介重定向 URI”。 这样,在身份验证后,Microsoft 就可将控制权递回给应用程序。 配置每个平台时,应用注册体验会引导你完成该过程。 使用快速入门下载工作示例。 在 iOS 上,请尽可能地使用中介和系统 webview。

复选框 在 Web 应用或 Web API 中,为每个帐户保留一个令牌缓存。 对于 Web 应用,令牌缓存应使用帐户 ID 进行键控。 对于 Web API,帐户应使用用于调用该 API 的令牌的哈希值进行键控。 MSAL.NET 在 .NET Framework 和 .NET Core 子平台中提供自定义令牌缓存序列化。 出于安全和性能方面的原因,我们建议为每个用户序列化一个缓存。 有关详细信息,请阅读令牌缓存序列化

复选框 如果应用所需的数据可以通过 Microsoft Graph 获取,请使用 Microsoft Graph 终结点而不是单个 API 请求此数据的权限。

复选框 不要查看访问令牌值,或尝试将其分析为客户端。 此类操作可能会更改值、格式,甚至在不发出警告的情况下将值加密 - 如果客户端需要了解有关用户的某种信息,请始终使用 id_token,或调用 Microsoft Graph。 只能由 Web API 分析访问令牌(因为格式定义和加密密钥设置就是由这些 API 完成的)。

最终用户体验

复选框 了解同意体验并配置应用同意提示部分,使最终用户和管理员有足够的信息确定是否可信任你的应用。

复选框 在执行交互式流之前尝试进行静默身份验证(静默令牌获取),以尽量减少用户在使用应用时输入登录凭据所需的时间。

复选框 不要对每次登录使用“prompt=consent”。 仅当你已确定需要请求其他权限的许可(例如,如果已更改应用的所需权限)时,才使用 prompt=consent。

复选框 如果适用,请使用用户数据扩充应用程序。 使用 Microsoft Graph API 可以轻松实现此目的。 Graph 浏览器工具可帮助你开始。

复选框 注册应用所需的完整权限集,使管理员能够轻松地向其租户授予同意。 在运行时使用增量许可,以帮助用户了解应用在首次启动时为何要请求可能会给用户带来忧虑或困惑的权限。

复选框 实现简洁的单一注销体验。 这是一项隐私和安全要求,有助于建立良好的用户体验。

测试

复选框 测试可能会影响用户使用应用程序的能力的条件访问策略

复选框 使用你打算支持的所有可能帐户(例如工作或学校帐户)测试应用程序。

其他资源

浏览有关 v2.0 的深入信息: