使用 Microsoft Entra ID 对应用程序和用户进行身份验证

Microsoft Entra ID 对于应用程序的一个主要功能是身份验证,即用户使用用户名或电子邮件地址等个人标识符声明其身份的过程。 需提供标识证明。 证明可以是密码、多重身份验证项目、生物识别或无密码同意。

本文介绍应用程序如何使用 Microsoft Entra ID 对用户和应用程序进行身份验证。 这是关于独立软件开发人员 (ISV) 如何为 Microsoft Entra ID 生成和优化其应用程序的系列文章中的第三篇文章。 在此系列中,可以了解有关以下主题的详细信息:

请求令牌

应用程序从 Microsoft Entra ID 请求令牌。 应用收到令牌后,可以使用该令牌中的信息来标识用户。 在 Microsoft Entra ID 上进行构建时,用户可以使用单个已注册的 Microsoft Entra ID 帐户 (SSO) 对许多应用程序进行身份验证。 SSO 身份验证方法允许用户使用一组凭据登录到多个独立软件系统。

开发人员可用于从 Microsoft Entra ID 请求令牌的协议使用浏览器将用户连接到 Microsoft Entra ID 网站。 此网站允许用户与 Microsoft Entra ID 进行专用对话。 应用程序不是该专用对话中的参与者。 应用会启动用户启动身份验证过程的 Microsoft Entra ID 网站。 身份验证过程完成后,Microsoft Entra ID 会将用户重定向回应用程序,无论其是否具有令牌。

用户应很少需要完成身份验证过程,这一点很重要。 用户越频繁被强制这样做,就越容易受到网络钓鱼攻击等攻击的影响。

减少登录提示

SSO 可以减少或消除登录提示。 开发人员在减少和消除登录提示方面发挥了重要作用。 所有应用都必须共享访问用户执行身份验证过程的 Microsoft Entra ID 网站的浏览器。 如果你的应用是基于浏览器的单页应用程序 (SPA) 或 Web 应用,则无需开发人员步骤。 浏览器中的所有应用共享浏览器。 对于在桌面和移动设备上运行的本机应用程序,开发人员必须主动减少或消除登录提示。

减少或消除登录提示的最佳方法是使用 Microsoft 身份验证库 (MSAL),或基于 MSAL 构建的库和中转站身份验证。 此方法可最大程度地减少登录提示,并提供最无缝的体验。 如果无法构建 MSAL,则应用程序应使用系统浏览器将登录提示降到最低。

对于在 iOS 或 Android 中运行的应用,移动平台提供商具有一些功能,可使此体验更加无缝。 Google 为Chrome 自定义选项卡提供了有关 Android 应用程序的指南。 Apple 提供了有关通过 iOS 应用程序中的 Web 服务对用户进行身份验证的指导。 避免使用嵌入式 WebView,因为它们可能不允许跨应用或系统浏览器共享。

用户身份验证的两种协议是安全断言标记语言 (SAML) 2.0 和 OpenID Connect (OIDC)。 Microsoft Entra ID 完全支持使用这两种协议的应用,因此开发人员可以根据他们的要求选择其中一个。

这些参考详细介绍了 Microsoft Entra ID SAML 支持。

Microsoft Entra ID SAML 支持存在一些限制。 具体而言,无法迁移需要这些协议功能的应用:对 WS-Trust ActAs 模式和 SAML 项目解析的支持。

虽然 Microsoft Entra ID 完全支持基于 SAML 协议构建的应用的 SAML,但 Microsoft 标识平台不提供用于使用 SAML 开发应用程序的库或其他开发工具。 对于新的应用程序开发,我们建议使用 OpenID Connect (OIDC) 进行身份验证。

Microsoft Entra ID 完全支持 OpenID Connect。 Microsoft 提供 MSAL、Microsoft 标识 Web 和 Azure SDK 库,以简化 OIDC 应用程序开发。 Microsoft 标识平台上的 OpenID Connect (OIDC)详细介绍 Microsoft Entra ID OIDC 支持。 MSAL 自动支持 OIDC。 MSAL 始终请求包含每个令牌请求的 OIDC ID 令牌,包括应用访问资源的授权请求。

令牌生存期

MSAL 根据访问令牌的过期时间缓存 ID 令牌和访问令牌。 由于 Microsoft Entra ID 以不同的方式设置 ID 令牌和访问令牌的生存期,因此,当访问令牌仍处于有效生存期内时,可能会从过期的 MSAL 缓存收到过期的 ID 令牌。

MSAL 不会自动续订 ID 令牌。 当应用程序请求令牌时,MSAL 会在访问令牌的生命周期结束或接近时续订访问令牌。 此时,MSAL 会请求新的 ID 令牌。 若要实现 OIDC,请使用 ID 令牌中的 exp(过期)声明来使用 MSAL 中的 ForceRefresh 标志计划 ID 令牌请求。

当无法在 MSAL 上或在基于 MSAL 构建的库上进行构建时,可以使用 OpenID Connect 标准对当前用户进行身份验证。 如果不使用 MSAL,则可能无法在本机应用程序中使用某些功能,例如确保本机应用在托管设备上运行。 查看提高你开发的客户端应用程序中身份验证和授权的复原能力以获取不在 MSAL 上进行构建的指导。

Microsoft Entra ID 实现 UserInfo 终结点作为 Microsoft Entra ID OIDC 标准支持的一部分,支持特定的 Microsoft Graph 路径 (https://graph.microsoft.com/oidc/userinfo)。 无法添加或自定义 UserInfo 终结点返回的信息。 由于 ID 令牌中的信息是调用 UserInfo 终结点返回的信息的超集,因此我们建议使用 ID 令牌而不是调用 UserInfo 终结点。

对用户进行身份验证

应用程序会与 Microsoft Entra ID 租户交互以对用户进行身份验证。 若要对用户进行身份验证,应用程序会将浏览器定向到 https://login.microsoftonline.com/{tenant}/v2.0,而 {tenant} 是租户的 ID 或域。 但是,我们建议 ISV 使用 Microsoft Entra ID 生成可支持最广泛的客户的多租户应用程序。 对于多租户应用程序,应用可能不知道用户来自哪个租户,直到用户进行身份验证后,才能使用特定的租户终结点。

若要启用多租户应用,Microsoft Entra ID 提供两个独立于租户的 OIDC/OAuth 2.0 终结点:

  • https://login.microsoftonline.com/common/v2.0 允许用户从任何 Microsoft Entra ID 租户或拥有来自 outlook.com、skype.com、xbox.com、live.com 或 Hotmail.com 等网站的使用者 Microsoft 帐户时对应用进行身份验证。
  • https://login.microsoftonline.com/organizations/v2.0 允许用户从任何 Microsoft Entra ID 租户对应用进行身份验证。

这些终结点允许来自任何 Microsoft Entra ID 租户的任何用户对应用程序进行身份验证。 如果只想允许来自特定租户的用户,请实现逻辑,以仅允许来自这些租户的用户访问应用。 正常实现是根据令牌中的 iss(颁发者)或 tid(租户 ID)声明筛选用户,以筛选你维护的租户的允许列表。

Microsoft Entra ID 租户支持可以是租户的常规成员,也可以是租户的来宾用户。 默认情况下,租户中的来宾用户的功能有限。 例如,来宾用户看不到租户中其他用户的完整配置文件。 来宾用户(有时称为企业到企业版 (B2B) 用户)使不同的组织能够与 Microsoft Entra ID 保护的工具和服务协作。 示例方案是邀请组织外部的用户访问租户中的 SharePoint 文件。 通常,B2B 用户使用其电子邮件地址作为其 userid。 但是,他们可以使用与主租户中的 userid 相同的地址。 默认情况下,Microsoft Entra ID 在用户输入 userid 时会将用户登录到其主租户。

若要以 B2B 用户身份登录用户,应用程序必须使用用户是来宾的特定租户终结点。 尽管用户可以指定在应用程序使用 https://login.microsoftonline.com/organizations/v2.0 终结点时要访问的租户,但用户可能会发现很难发现该功能。

后续步骤