你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

可在 Active Directory B2C 中使用的应用程序类型

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

Azure Active Directory B2C(Azure AD B2C)支持对各种新式应用程序体系结构进行身份验证。 所有这些协议都基于行业标准协议 OAuth 2.0OpenID Connect。 本文介绍可以构建的应用程序类型,与你喜欢的语言或平台无关。 它还有助于在开始生成应用程序之前了解高级方案。

使用 Azure AD B2C 的每个应用程序都必须使用 Azure 门户Azure AD B2C 租户中注册。 应用程序注册过程收集并分配值,例如:

  • 唯一标识您的应用程序的 应用程序 ID
  • 可用于将响应定向回应用程序的回复 URL

发送到 Azure AD B2C 的每个请求指定 用户流 (内置策略)或控制 Azure AD B2C 行为的 自定义策略 。 这两种策略类型都使你能够创建一组高度可自定义的用户体验。

每个应用程序的交互遵循类似的高级模式:

  1. 应用程序将用户定向到 v2.0 终结点以执行 策略
  2. 用户根据策略定义完成策略。
  3. 应用程序从 v2.0 终结点接收安全令牌。
  4. 应用程序使用安全令牌访问受保护的信息或受保护的资源。
  5. 资源服务器验证安全令牌,以验证是否可以授予访问权限。
  6. 应用程序会定期刷新安全令牌。

这些步骤可能因要构建的应用程序类型略有不同。

Web 应用程序

对于托管在 Web 服务器上并通过浏览器访问的 Web 应用程序(包括 .NET、PHP、Java、Ruby、Python 和 Node.js),Azure AD B2C 支持 OpenID Connect 实现所有用户体验。 在 OpenID Connect 的 Azure AD B2C 实现中,Web 应用程序通过向 Microsoft Entra ID 发出身份验证请求来启动用户体验。 请求的结果是 id_token。 此安全令牌表示用户的标识。 它还以声明的形式提供有关用户的信息:

// Partial raw id_token
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImtyaU1QZG1Cd...

// Partial content of a decoded id_token
{
    "name": "John Smith",
    "email": "john.smith@gmail.com",
    "oid": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
    ...
}

详细了解 Azure AD B2C 令牌参考中应用程序可用的令牌和声明类型。

在 Web 应用程序中,每次执行 策略 都会执行以下高级步骤:

  1. 用户浏览到 Web 应用程序。
  2. Web 应用程序将用户重定向到 Azure AD B2C,指示要执行的策略。
  3. 用户完成策略。
  4. Azure AD B2C 将 id_token 返回到浏览器。
  5. id_token 发送到重定向 URI。
  6. 验证 id_token 并设置会话 Cookie。
  7. 安全页面将返回给用户。

通过使用从 Microsoft Entra ID 接收的公共签名密钥进行id_token验证,即可充分验证用户身份。 此过程还设置一个会话 Cookie,可用于在后续页面请求中标识用户。

若要查看此方案,请尝试“ 入门”部分中的 Web 应用程序登录代码示例之一。

除了促进简单的登录之外,Web 应用程序还可能需要访问后端 Web 服务。 在这种情况下,Web 应用程序可以执行略有不同的 OpenID Connect 流 ,并使用授权代码和刷新令牌获取令牌。 以下 Web API 部分描述了此方案。

单页应用程序

许多新式 Web 应用程序都是作为客户端单页应用程序(“SPA”)构建的。 开发人员使用 JavaScript 或 SPA 框架(如 Angular、Vue 或 React)编写它们。 这些应用程序在 Web 浏览器上运行,与传统的服务器端 Web 应用程序相比,它们具有不同的身份验证特征。

Azure AD B2C 提供了 个选项,使单页应用程序能够登录用户并获取用于访问后端服务或 Web API 的令牌:

授权代码流(使用 PKCE)

OAuth 2.0 授权代码流(使用 PKCE) 允许应用程序交换 ID 令牌的授权代码,以表示调用受保护 API 所需的经过身份验证的用户和 访问 令牌。 此外,它还返回 刷新 令牌,这些令牌代表用户提供对资源的长期访问,而无需与这些用户交互。

建议使用此方法。 使用生存期有限的刷新令牌有助于您的应用程序适应现代浏览器的 Cookie 隐私限制,例如 Safari ITP。

要利用此流程,您的应用程序可以使用支持它的身份验证库,例如 MSAL.js 2.x

单页应用程序 - 授权

隐式授予流

某些库(如 MSAL.js 1.x)仅支持 隐式授权流 ,或者您的应用程序被实现为使用隐式流。 在这些情况下,Azure AD B2C 支持 OAuth 2.0 隐式流。 隐式授权流允许应用程序获取 ID访问令牌。 与授权代码流不同,隐式授权流不会返回 刷新令牌

此身份验证流不包括使用跨平台 JavaScript 框架的应用程序方案,例如 Electron 和 React-Native。 这些场景需要额外的能力才能与本机平台交互。

警告

Microsoft 建议不要使用隐式授权流。 支持 SPA 的推荐方法是 OAuth 2.0 授权代码流(使用 PKCE)。 此流的某些配置需要对应用程序具有非常高的信任度,并携带其他流中不存在的风险。 仅当不能使用其他更安全的流时,才应使用此流。 有关更多信息,请参阅隐式授权流的安全问题

Web API接口

可以使用 Azure AD B2C 保护 Web 服务,例如应用程序的 RESTful Web API。 Web API 可以使用 OAuth 2.0 通过令牌对传入的 HTTP 请求进行身份验证来保护其数据。 Web API 的调用方在 HTTP 请求的授权标头中追加令牌:

GET /api/items HTTP/1.1
Host: www.mywebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6...
Accept: application/json
...

然后,Web API 可以使用令牌来验证 API 调用方的身份,并从令牌中编码的声明中提取有关调用方的信息。 详细了解 Azure AD B2C 令牌参考中应用可用的令牌和声明类型。

Web API 可以从许多类型的客户端(包括 Web 应用程序、桌面和移动应用程序、单页应用程序、服务器端守护程序和其他 Web API)接收令牌。 下面是调用 Web API 的 Web 应用程序的完整流示例:

  1. Web 应用程序执行策略,用户完成用户体验。
  2. Azure AD B2C 将一个 (OpenID Connect) id_token 和授权代码返回到浏览器。
  3. 浏览器将 id_token 和授权代码发送到重定向 URI。
  4. Web 服务器验证 id_token 并设置会话 Cookie。
  5. Web 服务器通过提供授权代码、应用程序客户端 ID 和客户端凭据,请求 Azure AD B2C 提供 access_token
  6. access_tokenrefresh_token被返回到Web服务器。
  7. 使用授权标头中的 access_token 调用 Web API。
  8. Web API 验证令牌。
  9. 安全数据将返回到 Web 应用程序。

若要详细了解授权代码、刷新令牌以及获取令牌的步骤,请阅读 OAuth 2.0 协议

若要了解如何使用 Azure AD B2C 保护 Web API,请查看入门 部分中的 Web API 教程。

移动应用程序和原生应用程序

在设备上安装的应用程序(如移动和桌面应用程序)通常需要代表用户访问后端服务或 Web API。 可以将自定义标识管理体验添加到本机应用程序,并使用 Azure AD B2C 和 OAuth 2.0 授权代码流安全地调用后端服务。

在此流程中,应用程序执行 策略,在用户完成策略后,从 Microsoft Entra ID 接收 authorization_codeauthorization_code 表示应用程序有权代表当前登录的用户调用后端服务。 然后,应用程序可以在后台交换authorization_codeaccess_tokenrefresh_token。 应用程序可以使用 access_token 在 HTTP 请求中对后端 Web API 进行身份验证。 它还可以使用 refresh_token 来获取新的 access_token,当旧的到期时。

守护程序/服务器端应用程序

包含长时间运行的进程或在没有用户状态的情况下运行的应用程序还需要一种方法来访问受保护的资源,例如 Web API。 这些应用程序可以使用其标识(而不是用户的委托标识)以及 OAuth 2.0 客户端凭据流进行身份验证和获取令牌。 客户端凭据流与代理流不同,不应将代理流用于服务器到服务器身份验证。

对于 Azure AD B2C,OAuth 2.0 客户端凭据流 目前处于公共预览阶段。 不过,你可以使用 Microsoft Entra ID 和 Microsoft 标识平台 /token 终结点 (https://login.microsoftonline.com/your-tenant-name.onmicrosoft.com/oauth2/v2.0/token) 为 Microsoft Graph 应用程序或你自己的应用程序设置客户端凭据流。 有关详细信息,请查看 Microsoft Entra 令牌参考一文。

不支持的应用程序类型

Web API 链(代理流)

许多体系结构包括需要调用另一个下游 Web API 的 Web API,其中两者均受 Azure AD B2C 保护。 这种情景在具有 Web API 后端的本机客户端中很常见,并调用 Microsoft 在线服务,例如 Microsoft Graph API。

可以使用 OAuth 2.0 JWT 持有者凭据授权(也称为“代理流”)来支持这种链接的 Web API 方案。 但是,Azure AD B2C 中目前还没有实现代理流。

后续步骤

详细了解 Azure Active Directory B2C 中用户流提供的内置策略。