教程:在 Azure Active Directory B2C 中创建用户流和自定义策略

重要

Facebook 在中国不可用。 请使用 qq微信微博作为由世纪互联运营的 Microsoft Azure 的标识提供者。

开始之前,请使用此页顶部的“选择策略类型”选择器来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。

可以在应用程序中使用用户流,让用户注册、登录或管理其配置文件。 可以在 Azure Active Directory B2C (Azure AD B2C) 租户中创建多个不同类型的用户流,并根据需要在应用程序中使用它们。 可以跨应用程序重复使用用户流。

利用用户流,可以确定用户在执行登录、注册、编辑配置文件或重置密码等操作时与应用程序交互的方式。 在本文中,学习如何:

自定义策略是定义 Azure Active Directory B2C (Azure AD B2C) 租户行为的配置文件。 在本文中,学习如何:

  • 创建注册和登录用户流
  • 创建配置文件编辑用户流

重要

我们更改了引用用户流版本的方式。 之前,我们提供 V1(生产就绪)版本,还提供了 V1.1 和 V2(预览版)版本。 现在,我们已将用户流合并为两个版本:“建议”用户流(具有最新功能)和“标准(旧)”用户流 。 所有旧的预览版用户流(V1.1 和 V2)都已弃用。 有关详细信息,请参阅 Azure AD B2C 中的用户流版本这些更改仅适用于 Azure 公有云。 其他环境将继续使用旧版用户流版本控制

先决条件

创建注册和登录用户流

注册和登录用户流通过单一配置处理这两种体验。 根据上下文将应用程序用户引导至正确的路径。 若要创建注册和登录用户流,请执行以下操作:

  1. 登录 Azure 门户

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

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

  4. 在“策略”下,依次选择“用户流”、“新建用户流”。

    Screenshot of the User flows page from the Azure portal with New user flow button highlighted.

  5. 在“创建用户流”页面上,选择“注册和登录(标准)”用户流。

  6. 输入该用户流的名称。 例如 signupsignin1

  7. 对于“标识提供者”,请选择标识提供者。

  8. 对于“用户属性和令牌声明”,请选择在注册期间要从用户收集并发送的声明和属性。 例如,选择“显示更多”,然后选择“国家/地区”、“显示名称”和“邮政编码”的属性和声明。 选择“确定”。

    Screenshot of the attributes and claims selection page from the Azure portal with three claims selected and highlighted.

  9. 选择“创建”以添加用户流。 你之前输入的名称中会自动附加前缀 B2C_1_。 例如 B2C_1_signupsignin1。

测试用户流

  1. 从“用户流”页面中,选择刚才创建的用户流以打开其概览页面。

  2. 在用户流概述页面顶部,选择“运行用户流”。 此时将在页面右侧打开一个窗格。

  3. 在“应用程序”部分,选择要测试的 Web 应用程序,例如名为 webapp1 的应用程序。 “回复 URL”应显示为 https://jwt.ms

  4. 选择“运行用户流”,然后选择“立即注册”。

    A screenshot of the Run user flow page from the Azure portal portal with Run user flow button, Application text box and Reply URL text box highlighted.

  5. 输入有效的电子邮件地址,选择“发送验证码”,输入收到的验证码,然后选择“验证代码”。

  6. 输入新密码并确认。

  7. 选择所在的国家和地区,输入要显示的名称,输入邮政编码,然后选择“创建”。 令牌将返回到 https://jwt.ms,并且应该会显示在浏览器中。

  8. 现在可以再次运行用户流,你应该可以使用刚才创建的帐户登录。 返回的令牌包含所选国家/地区、名称和邮政编码的声明。

注意

“运行用户流”体验当前与使用授权代码流的 SPA 回复 URL 类型不兼容。 若要将“运行用户流”体验与这些类型的应用结合使用,请注册类型为“Web”的回复 URL,并启用隐式流

创建配置文件编辑用户流

如果希望用户能够在你的应用程序中编辑其个人资料,请使用个人资料编辑用户流。

  1. 在 Azure AD B2C 租户概述页面的菜单中,选择“用户流”,然后选择“新建用户流”。
  2. 在“创建用户流”页面上,选择“个人资料编辑(标准)”用户流。
  3. 输入该用户流的名称。 例如 profileediting1
  4. 对于“标识提供者”,请选择标识提供者。
  5. 对于“用户属性”,请选择你希望客户能够在其个人资料中编辑的属性。 例如,选择“显示更多”,然后选择“显示名称”和“职务”所对应的属性和声明。 选择“确定”。
  6. 选择“创建”以添加用户流。 名称中会自动追加前缀 B2C_1_。

测试用户流

  1. 选择已创建的用户流以打开其概述页面。
  2. 在用户流概述页面顶部,选择“运行用户流”。 此时将在页面右侧打开一个窗格。
  3. 在“应用程序”部分,选择要测试的 Web 应用程序,例如名为 webapp1 的应用程序。 “回复 URL”应显示为 https://jwt.ms
  4. 选择“运行用户流”,然后使用前面创建的帐户登录。
  5. 现在,你可以更改用户的显示名称和职务。 选择“继续”。 令牌将返回到 https://jwt.ms,并且应该会显示在浏览器中。

提示

本文介绍了如何手动设置租户。 可以自动执行本文中的整个过程。 自动执行将部署 Azure AD B2C SocialAndLocalAccountsWithMFA 初学者包,它将提供“注册”和“登录”、“密码重置”和“配置文件编辑”过程。 若要自动完成以下演练,请访问 IEF 安装应用,并按照说明操作。

为 Identity Experience Framework 应用程序添加签名和加密密钥

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单中切换到你的 Azure AD B2C 租户。
  3. 在 Azure 门户中,搜索并选择“Azure AD B2C”。
  4. 在概述页面上的“策略”下,选择“Identity Experience Framework” 。

创建签名密钥

  1. 选择“策略密钥”,然后选择“添加”。
  2. 对于“选项”,请选择 Generate
  3. 在“名称”中,请输入 TokenSigningKeyContainer。 可能会自动添加前缀 B2C_1A_
  4. 对于“密钥类型”,请选择“RSA”。
  5. 对于“密钥用法”,请选择“签名” 。
  6. 选择“创建”。

创建加密密钥

  1. 选择“策略密钥”,然后选择“添加”。
  2. 对于“选项”,请选择 Generate
  3. 在“名称”中,请输入 TokenEncryptionKeyContainer。 可能会自动添加前缀 B2C_1A_。
  4. 对于“密钥类型”,请选择“RSA”。
  5. 对于“密钥用法”,请选择“加密” 。
  6. 选择“创建”。

注册标识体验框架应用程序

Azure AD B2C 要求注册两个应用程序,它们分别用于通过本地帐户实现用户注册和登录:IdentityExperienceFramework(一个 Web API),以及 ProxyIdentityExperienceFramework(一个原生应用,它具有对 IdentityExperienceFramework 应用的委派权限) 。 用户可使用电子邮件地址或用户名和密码进行注册,以访问向租户注册的应用程序,这将创建一个“本地帐户”。本地帐户仅存在于 Azure AD B2C 租户中。

你只需在 Azure AD B2C 租户中注册这两个应用程序一次。

注册 IdentityExperienceFramework 应用程序

若要在 Azure AD B2C 租户中注册应用程序,可以使用“应用注册”体验。

  1. 选择“应用注册”,然后选择“新建注册” 。
  2. 对于“名称”,请输入 IdentityExperienceFramework
  3. 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
  4. 在“重定向 URI”下,选择“Web”,然后输入 https://your-tenant-name.b2clogin.cn/your-tenant-name.partner.onmschina.cn,其中 your-tenant-name 是 Azure AD B2C 租户域名 。
  5. 在“权限”下,选择“授予对 openid 和 office_access 权限的管理员许可”复选框。
  6. 选择“注册”。
  7. 记录“应用程序(客户端) ID”,以便在后续步骤中使用。

接下来,通过添加范围公开 API:

  1. 在左侧菜单中的“管理”下,选择“公开 API” 。
  2. 选择“添加范围”,然后选择“保存并继续”以接受默认的应用程序 ID URI 。
  3. 输入以下值,创建允许在 Azure AD B2C 租户中执行自定义策略的范围:
    • 范围名称user_impersonation
    • 管理员许可显示名称Access IdentityExperienceFramework
    • 管理员许可说明Allow the application to access IdentityExperienceFramework on behalf of the signed-in user.
  4. 选择“添加范围”

注册 ProxyIdentityExperienceFramework 应用程序

  1. 选择“应用注册”,然后选择“新建注册” 。
  2. 对于“名称”,请输入 ProxyIdentityExperienceFramework
  3. 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
  4. 在“重定向 URI”下,使用下拉选择“公共客户端/本机(移动和桌面)”
  5. 对于“重定向 URI”,请输入 myapp://auth
  6. 在“权限”下,选择“授予对 openid 和 office_access 权限的管理员许可”复选框。
  7. 选择“注册”。
  8. 记录“应用程序(客户端) ID”,以便在后续步骤中使用。

接下来,指定应将应用程序视为公共客户端:

  1. 在左侧菜单中的“管理”下,选择“身份验证” 。
  2. 在“高级设置”下的“允许公共客户端流”部分,将“启用以下移动和桌面流”设置为“是”。
  3. 选择“保存”。
  4. 请确保已在应用程序清单中设置 "allowPublicClient": true
    1. 在左侧菜单中的“管理”下,选择“清单”以打开应用程序清单 。
    2. 查找“allowPublicClient”密钥并确保其值设置为“true” 。

现在,向你先前在 IdentityExperienceFramework 注册中公开的 API 范围授予权限:

  1. 在左侧菜单中的“管理”下,选择“API 权限” 。
  2. 在“已配置权限”下,选择“添加权限”。
  3. 选择“我的组织使用的 API”选项卡,然后选择“IdentityExperienceFramework”应用程序。
  4. 在“权限”下,选择你先前定义的 user_impersonation 范围 。
  5. 选择“添加权限”。 按照指示等待几分钟,然后继续下一步。
  6. 选择“向 <租户名称)> 授予管理员许可”。
  7. 请选择“是”。
  8. 选择“刷新”,然后验证范围的“状态”下是否均显示“已授予...” 。

自定义策略新手包

自定义策略是你上传到 Azure AD B2C 租户的一组 XML 文件,用于定义技术配置文件和用户旅程。 我们提供了新手包,其中有多个预建策略来帮助你快速入门。 每个新手包中都有实现所述方案必需的最少数量的技术配置文件和用户旅程。 有关 Azure AD B2C 自定义策略的更深入指南,请参阅我们的自定义策略操作指南系列

  • LocalAccounts - 仅允许使用本地帐户。
  • SocialAccounts - 仅允许使用社交(或联合)帐户。
  • SocialAndLocalAccounts - 允许使用本地帐户和社交帐户。
  • SocialAndLocalAccountsWithMFA - 启用社交、本地和多重身份验证选项。

每个新手包中包含:

  • 基本文件 - 需要对基本文件进行少量的修改。 示例:TrustFrameworkBase.xml
  • 本地化文件 - 大多数本地化更改在此文件中进行。 示例:TrustFrameworkLocalization.xml
  • 扩展文件 - 大多数配置更改在此文件中进行。 示例:TrustFrameworkExtensions.xml
  • 信赖方文件 - 应用程序调用的任务特定文件。 示例:SignUpOrSignin.xml、ProfileEdit.xml、PasswordReset.xml

在本文中,你将编辑 SocialAndLocalAccounts 新手包中的 XML 自定义策略文件。 如果需要 XML 编辑器,请尝试使用 Visual Studio Code,它是一种轻型跨平台编辑器。

获取新手包

从 GitHub 获取自定义策略新手包,然后使用 Azure AD B2C 租户名称更新 SocialAndLocalAccounts 新手包中的 XML 文件。

  1. 下载 .zip 文件或克隆存储库:

    git clone https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack
    
  2. 在 SocialAndLocalAccounts 目录中的所有文件中,将字符串 yourtenant 替换为 Azure AD B2C 租户的名称。

    例如,如果 B2C 租户的名称为 contosotenant,则 yourtenant.partner.onmschina.cn 的所有实例都将变为 contosotenant.partner.onmschina.cn

将应用程序 ID 添加到自定义策略

将应用程序 ID 添加到扩展文件 TrustFrameworkExtensions.xml

  1. 打开 SocialAndLocalAccounts/TrustFrameworkExtensions.xml 并找到元素 <TechnicalProfile Id="login-NonInteractive">
  2. IdentityExperienceFrameworkAppId 的两个实例替换为前面创建的 IdentityExperienceFramework 应用程序的 ID。
  3. ProxyIdentityExperienceFrameworkAppId 的两个实例替换为前面创建的 ProxyIdentityExperienceFramework 应用程序的 ID。
  4. 保存文件。

将 Facebook 添加为标识提供者

SocialAndLocalAccounts 入门包包括 Facebook 社交登录。 使用自定义策略不需要 Facebook,但我们在此处用它来演示如何在自定义策略中启用联合社交登录。 如果不需要启用联合社交登录,请改用 LocalAccounts 初学者包,并跳到“上传策略”部分。

创建 Facebook 密钥

将 Facebook 应用程序的应用机密添加为策略密钥。 可将你创建的应用程序的应用机密设为本文先决条件的一部分。

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单中切换到你的 Azure AD B2C 租户。
  3. 在 Azure 门户中,搜索并选择“Azure AD B2C”。
  4. 在概述页面上的“策略”下,选择“Identity Experience Framework” 。
  5. 选择“策略密钥”,然后选择“添加”。
  6. 对于“选项”,请选择 Manual
  7. 对于“名称”,请输入 FacebookSecret。 可能会自动添加前缀 B2C_1A_
  8. 在“机密”中,输入 developers.facebook.com 提供的 Facebook 应用程序的应用机密。 此值是机密,不是应用程序 ID。
  9. 对于“密钥用法”,请选择“签名” 。
  10. 选择“创建”。

更新自定义策略入门包中的 TrustFrameworkExtensions.xml

SocialAndLocalAccounts/TrustFrameworkExtensions.xml 文件中,将 client_id 的值替换为 Facebook 应用程序 ID 并保存更改。

<TechnicalProfile Id="Facebook-OAUTH">
  <Metadata>
  <!--Replace the value of client_id in this technical profile with the Facebook app ID"-->
    <Item Key="client_id">00000000000000</Item>

上传策略

  1. 在 Azure 门户的 B2C 租户中,选择“Identity Experience Framework”菜单项。
  2. 选择“上传自定义策略”。
  3. 按照下列顺序上传策略文件:
    1. TrustFrameworkBase.xml
    2. TrustFrameworkLocalization.xml
    3. TrustFrameworkExtensions.xml
    4. SignUpOrSignin.xml
    5. ProfileEdit.xml
    6. PasswordReset.xml

上传文件时,Azure 会向每个文件添加前缀 B2C_1A_

提示

如果 XML 编辑器支持验证,则根据新手包根目录中的 TrustFrameworkPolicy_0.3.0.0.xsd XML 架构来验证文件。 XML 架构验证在上传之前会识别错误。

测试自定义策略

  1. 在“自定义策略”下,选择“B2C_1A_signup_signin” 。
  2. 在自定义策略概述页面上的“选择应用程序”部分,选择要测试的 Web 应用程序,例如名为“webapp1”的应用程序。
  3. 请确保回复 URL 为 https://jwt.ms
  4. 选择“立即运行”。
  5. 使用电子邮件地址注册。
  6. 再次选择“立即运行”。
  7. 使用相同的帐户登录,以确认配置正确。
  8. 再次选择“立即运行”,然后选择 Facebook,通过 Facebook 登录并测试自定义策略。

后续步骤

本文介绍了如何执行以下操作:

  • 创建注册和登录用户流
  • 创建配置文件编辑用户流
  • 创建密码重置用户流

接下来,了解如何使用 Azure AD B2C 在应用程序中登录和注册用户。 按照下面链接的示例应用操作: