将用户迁移到 Azure AD B2C

从另一标识提供者迁移到 Azure Active Directory B2C (Azure AD B2C) 可能还需要迁移现有的用户帐户。 本文介绍两种迁移方法:预迁移和无缝迁移。 无论使用哪种方法,都需要编写一个应用程序或脚本,以使用 Microsoft Graph API 在 Azure AD B2C 中创建用户帐户。

注意

在开始迁移之前,请确保 Azure AD B2C 租户的未使用配额可以容纳你希望迁移的所有用户。 了解如何获取租户使用情况。 如果需要提高租户的配额限制,请联系 Microsoft 支持部门

预迁移

在预迁移流中,迁移应用程序将对每个用户帐户执行以下步骤:

  1. 读取旧标识提供者中的用户帐户,包括其当前凭据(用户名和密码)。
  2. 使用当前凭据在 Azure AD B2C 目录中创建相应的帐户。

对于以下两种情况,请使用预迁移流:

  • 你有权访问用户的纯文本凭据(用户名和密码)。
  • 凭据已加密,但可将其解密。

有关以编程方式创建用户帐户的信息,请参阅使用 Microsoft Graph 管理 Azure AD B2C 用户帐户

无缝迁移

如果无法访问旧标识提供者中的纯文本密码,请使用无缝迁移流。 例如,在以下情况下使用该流:

  • 密码是以单向加密格式存储的(例如,使用哈希函数)。
  • 旧式标识提供者以你无法访问的方式存储了密码。 例如,标识提供者通过调用 Web 服务来验证凭据。

无缝迁移流仍需将用户帐户预迁移,但随后需使用自定义策略来查询某个 REST API(由你创建),以便在每个用户首次登录时设置其密码。

无缝迁移流包括两个阶段:预迁移和设置凭据。

阶段 1:预迁移

  1. 迁移应用程序读取旧标识提供者中的用户帐户。
  2. 迁移应用程序在 Azure AD B2C 目录中创建相应的用户帐户,但设置生成的随机密码。

阶段 2:设置凭据

将帐户预迁移完以后,自定义策略和 REST API 随后会在用户登录时执行以下操作:

  1. 读取对应于所输入的电子邮件地址的 Azure AD B2C 用户帐户。
  2. 通过评估某个布尔扩展属性来检查是否已将该帐户标记为待迁移。
    • 如果该扩展属性返回 True,则会调用 REST API 根据旧标识提供者验证密码。
      • 如果 REST API 确定密码不正确,则向用户返回友好的错误消息。
      • 如果 REST API 确定密码正确,则将密码写入 Azure AD B2C 帐户,并将该布尔扩展属性更改为 False
    • 如果该布尔扩展属性返回 False,则像平时一样继续执行登录过程。

若要查看示例自定义策略和 REST API,请参阅 GitHub 上的无缝用户迁移示例

Flowchart diagram of the seamless migration approach to user migration

安全性

无缝迁移方法使用你自己的自定义 REST API 根据旧标识提供者验证用户的凭据。

必须保护 REST API,使其免遭暴力破解攻击。 攻击者可能会提交多个密码,最终猜出用户的凭据。 为了帮助抵御此类攻击,请在登录尝试次数超过特定的阈值时,停止向 REST API 提供请求。 此外,请保护 Azure AD B2C 与 REST API 之间的通信。

用户属性

并非要将旧标识提供者中的所有信息都迁移到 Azure AD B2C 目录。 在迁移之前,请确定要存储在 Azure AD B2C 中的适当用户属性集。

  • 存储在 Azure AD B2C 中:
    • 用户名、密码、电子邮件地址、电话号码、会员号/标识符。
    • 隐私策略和最终用户许可协议的同意标记。
  • 不要存储在 Azure AD B2C 中:
    • 敏感数据,例如信用卡号、社会安全号码 (SSN)、医疗记录,或其他由政府或行业法规实体管制的数据。
    • 营销或沟通偏好、用户行为和见解。

目录清理

在启动迁移过程之前,请借机清理目录。

  • 确定要存储在 Azure AD B2C 中的用户属性集,仅迁移所需的属性。 如有需要,可以创建自定义属性来存储有关用户的更多数据。
  • 如果从包含多个身份验证源的环境迁移(例如,每个应用程序具有自身的用户目录),请迁移到 Azure AD B2C 中的统一帐户。
  • 如果多个应用程序具有不同的用户名,可以使用标识集合将其全部存储在 Azure AD B2C 用户帐户中。 关于密码,请让用户选择一个密码,并在目录中设置该密码。 例如,使用无缝迁移时,只应在 Azure AD B2C 帐户中存储所选的密码。
  • 删除未使用的用户帐户或者不迁移已过时的帐户。

密码策略

如果与 Azure AD B2C 强制实施的强密码强度相比,所要迁移的帐户的密码强度更弱,你可以禁用强密码要求。 有关详细信息,请参阅密码策略属性

后续步骤

GitHub 上的 azure-ad-b2c/user-migration 存储库包含了无缝迁移自定义策略示例和 REST API 代码示例:

无缝用户迁移自定义策略和 REST API 代码示例