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

本文介绍如何将 Azure Active Directory B2C (Azure AD B2C) 身份验证功能添加到 Azure Web 应用。 有关详细信息,请查看配置应用服务或 Azure Functions 应用以使用 OpenID Connect 提供程序登录一文。

概述

OpenID Connect (OIDC) 是在 OAuth 2.0 上构建的身份验证协议。 使用 OIDC 安全地将用户登录到 Azure Web 应用。 登录流涉及以下步骤:

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

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

先决条件

  • 如果尚未创建应用,请按照有关如何创建 Azure Web 应用的指导操作。

步骤 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 来创建身份验证请求。 你还将创建一个客户端密码,你的应用可使用该密码安全地获取令牌。

步骤 2.1:注册应用

若要注册应用程序,请执行以下步骤:

  1. 登录 Azure 门户

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

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

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

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

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

  7. 在“重定向 URI”下,选择“Web”,然后在 URL 框中输入 https://<YOUR_SITE>/.auth/login/aadb2c/callback 。 请将 <YOUR_SITE> 替换为你的 Azure Web 应用名称。 例如:https://contoso.chinacloudsites.cn/.auth/login/aadb2c/callback。 如果配置了 Azure Web 应用的自定义域,请在重定向 URI 中使用该自定义域。 例如: https://www.contoso.com/.auth/login/aadb2c/callback

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

  9. 选择“注册” 。

  10. 选择“概述”。

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

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

步骤 2.2:创建客户端机密

  1. 在“Azure AD B2C - 应用注册”页中,选择你创建的应用程序,例如“我的 Azure Web 应用”。
  2. 在左侧菜单中“管理”下,选择“证书和机密”。
  3. 选择“新建客户端机密”。
  4. 在“说明”框中输入客户端机密的说明。 例如,clientsecret1
  5. 在“过期时间”下,选择机密持续生效的时间,然后选择“添加”。
  6. 记录密码的,以便在客户端应用程序代码中使用。 退出此页面后,此机密值永不再显示。 在应用程序的代码中将此值用作应用程序机密。

步骤 3:配置 Azure 应用

  1. 登录 Azure 门户

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

  3. 导航到你的 Azure Web 应用。

  4. 在左侧菜单中选择“身份验证”。 选择“添加标识提供者”。

  5. 在“标识提供者”下拉列表中选择“OpenID Connect”。

  6. 对于“OpenID 提供者名称”,请键入 aadb2c

  7. 对于“元数据条目”,请选择“文档 URL”。 然后为“文档 URL”提供以下 URL:

    https://<TENANT_NAME>.b2clogin.cn/<TENANT_NAME>.partner.onmschina.cn/<POLICY_NAME>/v2.0/.well-known/openid-configuration
    
    1. <TENANT_NAME> 替换为 Azure AD B2C 租户名称的第一部分(例如 https://contoso.b2clogin.cn/contoso.partner.onmschina.cn)。 在身份验证请求 URL 中,请将 B2C 租户名称 contoso.partner.onmschina.cn 替换为你的租户 ID GUID。 例如,可以将 https://fabrikamb2c.b2clogin.cn/contoso.partner.onmschina.cn/ 更改为 https://account.contosobank.co.uk/<tenant ID GUID>/

    2. <POLICY_NAME> 替换为在步骤 1 中创建的用户流或自定义策略。

  8. 对于“客户端 ID”,请提供在步骤 2.1 中记下的 Web 应用(客户端)ID。

  9. 对于“客户端机密”,请提供在步骤 2.2 中记下的 Web 应用(客户端)机密。

    提示

    客户端机密将存储为应用设置,以确保以安全方式存储机密。 如果你想要在 Azure Key Vault 中管理机密,稍后可以将该设置更新为使用 Key Vault 引用

  10. 将其余设置保留默认值。

  11. 按“添加”按钮完成标识提供者的设置。

步骤 4:检查 Azure Web 应用

  1. 在浏览器中,使用 https://<app-name>.chinacloudsites.cn 导航到你的 Azure Web 应用。 请将 <app-name> 替换为你的 Azure Web 应用。
  2. 完成注册或登录过程。
  3. 在浏览器中,导航到 URL https://<app-name>.chinacloudsites.cn/.auth/me,以查看有关已登录用户的信息。 请将 <app-name> 替换为你的 Azure Web 应用。

检索应用代码中的令牌

在服务器代码中,提供程序特定的令牌将注入到请求标头中,使你可以轻松访问这些令牌。 下表显示了可能的令牌标头名称:

标头名称 说明
X-MS-CLIENT-PRINCIPAL-NAME 用户的显示名称。
X-MS-CLIENT-PRINCIPAL-ID ID 令牌子声明。
X-MS-CLIENT-PRINCIPAL-IDP 标识提供者名称 aadb2c
X-MS-TOKEN-AADB2C-ID-TOKEN Azure AD B2C 颁发的 ID 令牌

后续步骤