使用 Azure AD B2C 在示例 Web 应用中配置身份验证

本文使用一个示例 ASP.NET Web 应用,说明如何向 Web 应用添加 Azure Active Directory B2C (Azure AD B2C) 身份验证。

重要

本文引用的示例 ASP.NET Web 应用不能用于调用 REST API,因为此应用会返回 ID 令牌,而非访问令牌。 有关可以调用 REST API 的 Web 应用,请参阅使用 Azure AD B2C 保护通过 ASP.NET Core 生成的 Web API

概述

OpenID Connect (OIDC) 是在 OAuth 2.0 上构建的身份验证协议。 可以使用 OIDC 安全地将用户登录到应用程序。 此 Web 应用示例使用 Microsoft Identity Web。 Microsoft Identity Web 是一组 ASP.NET Core 库,可简化向 Web 应用添加身份验证和授权支持的过程。

登录流涉及以下步骤:

  1. 用户前往 Web 应用,并选择“登录”。
  2. 应用发起身份验证请求,并将用户重定向到 Azure AD B2C。
  3. 用户注册或登录并重置密码。 或者,用户也可以使用社交帐户登录。
  4. 用户成功登录后,Azure AD B2C 向应用返回 ID 令牌。
  5. 应用验证 ID 令牌,读取声明,并向用户返回安全页。

当 ID 令牌过期或应用会话失效时,应用会发出新身份验证请求,并将用户重定向到 Azure AD B2C。 如果 Azure AD B2C SSO 会话处于活动状态,Azure AD B2C 会发出访问令牌,但不会提示用户再次登录。 如果 Azure AD B2C 会话过期或无效,则系统会提示用户重新登录。

注销

注销流程涉及以下步骤:

  1. 用户从应用中注销。
  2. 应用清除其会话对象,并且身份验证库清除其令牌缓存。
  3. 应用将用户定向到 Azure AD B2C 注销终结点,以终止 Azure AD B2C 会话。
  4. 用户被重定向回应用。

先决条件

运行以下系统之一的计算机:

步骤 1:配置用户流

当用户尝试登录你的应用时,该应用会通过用户流向授权终结点发起身份验证请求。 用户流定义并控制用户体验。 用户完成用户流后,Azure AD B2C 会生成一个令牌,然后将用户重定向回应用程序。

创建用户流或自定义策略(如果你尚未这样做)。 重复这些步骤以按如下所述创建三个单独的用户流:

  • 组合的“登录和注册”用户流,例如 susi。 此用户流还支持“忘记密码”体验。
  • “个人资料编辑”用户流,例如 edit_profile
  • “密码重置”用户流,例如 reset_password

Azure AD B2C 将在用户流名称前面追加 B2C_1_。 例如,susi 重命名为 B2C_1_susi

步骤 2:注册 Web 应用

若要让应用程序使用 Azure AD B2C 登录,请在 Azure AD B2C 目录中注册应用。 注册应用会在应用与 Azure AD B2C 之间建立信任关系。

在应用注册过程中,要指定重定向 URI。 重定向 URI 是用户通过 Azure AD B2C 完成身份验证之后 Azure AD B2C 将用户重定向到的终结点。 此应用注册过程会生成应用程序 ID(也称为“客户端 ID”),作为该应用的唯一标识 。 注册应用后,Azure AD B2C 将使用应用程序 ID 和重定向 URI 来创建身份验证请求。

若要创建 Web 应用注册,请使用以下步骤:

  1. 登录 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单中切换到你的 Azure AD B2C 租户。

  3. 在 Azure 门户中,搜索并选择“Azure AD B2C”。

  4. 选择“应用注册”,然后选择“新建注册” 。

  5. 在“名称”下,输入应用程序的名称(例如 webapp1)。

  6. 在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)” 。

  7. 在“重定向 URI”下,选择“Web”,然后在 URL 框中输入 https://localhost:44316/signin-oidc

  8. 在“身份验证”下,转到“隐式授权和混合流”下,选中“ID 令牌(用于隐式流和混合流)”复选框。

  9. 在“权限”下,选中“授予对 OpenID 和脱机访问权限的管理员许可”复选框。

  10. 选择“注册” 。

  11. 选择“概述”。

  12. 记录“应用程序(客户端) ID”,以便在稍后配置 Web 应用程序时使用。

    Screenshot of the web app Overview page for recording your web application ID.

步骤 3:获取 Web 应用示例

下载 zip 文件,或从 GitHub 克隆示例 Web 应用。

git clone https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2

将示例文件提取到文件夹,该文件夹路径的总字符长度须不得超过 260 个字符。

步骤 4:配置示例 Web 应用

在示例文件夹中的 1-WebApp-OIDC/1-5-B2C/ 文件夹下,使用 Visual Studio 或 Visual Studio Code 打开 WebApp-OpenIDConnect-DotNet.csproj 项目。

在项目根文件夹下,打开 appsettings.json 文件。 此文件包含有关 Azure AD B2C 标识提供者的信息。 更新以下应用设置属性:

部分 密钥
AzureAdB2C 实例 Azure AD B2C 租户名称的第一部分(例如 https://contoso.b2clogin.cn)。
AzureAdB2C Azure AD B2C 租户的完整租户名称(例如 contoso.partner.onmschina.cn)。
AzureAdB2C ClientId 步骤 2 中的 Web 应用应用程序(客户端)ID。
AzureAdB2C SignUpSignInPolicyId 用户流,或在步骤 1 中创建的自定义策略。

你的最终配置文件应类似于下面的 JSON:

"AzureAdB2C": {
  "Instance": "https://contoso.b2clogin.cn",
  "Domain": "contoso.partner.onmschina.cn",
  "ClientId": "<web-app-application-id>",
  "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
  "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
}

步骤 5:运行示例 Web 应用

  1. 生成并运行该项目。

  2. 转到 https://localhost:44316

  3. 选择“注册/登录”。

    Screenshot of the sign in and sign up button on the project Welcome page.

  4. 完成注册或登录过程。

身份验证成功后,你会在导航栏中看到显示名称。 若要查看 Azure AD B2C 令牌返回到应用的声明,请选择“声明”。

Screenshot of the web app token claims.

部署应用程序

在生产应用程序中,应用注册重定向 URI 通常是运行应用的可公开访问的终结点,比如 https://contoso.com/signin-oidc

可以随时在注册的应用程序中添加和修改重定向 URI。 重定向 URI 存在以下限制:

  • 回复 URL 必须以方案 https 开头。
  • 回复 URL 区分大小写。 其大小写必须与正在运行的应用程序的 URL 路径的大小写匹配。

后续步骤