跳转到主要内容
身份验证功能是新功能。请先在沙盒应用中运行每次导入,然后再导入到你的生产环境应用。
导入会把用户从其他身份平台迁移到 Didit Authentication。他们的密码、已验证的邮箱、社交登录链接、身份验证器应用和组织角色都会一并迁移。在你的应用通过 Didit 让他们登录之前,他们的使用体验不会发生任何变化。 导入使用你应用的 Authentication 管理 API,并需要具有 write:authentication 权限的控制台会话(若只需列出导入任务,则使用 read:authentication)。导入绝不使用终端用户令牌或验证 API 密钥。示例中的 MANAGEMENT_BASE 为:

两种导入方式

导入文件

1. 上传

除非你发送 false,每个 keep_* 开关默认为 true。调用返回 202 及一个任务。一个应用同时最多保留 5 个已上传的文件。

2. 检查试运行结果

每次上传都会先启动试运行。它会检查每个人,但不写入任何数据。轮询 GET import-jobs/{id}/: 试运行失败时会列出错误。修正文件后重新上传。

3. 开始导入

POST import-jobs/{id}/start/ 会导入试运行检查过的数据,并返回 202。
  • 人员按每批 1,000 人导入。每批单独提交。
  • 每个应用同一时间只能运行一个导入(否则返回 import_running)。
  • 中断的导入会从最后一个已提交的批次之后继续。
  • 已导入的人员会被跳过,因此可以对同一文件再次运行导入。
  • 发起导入的人员会在导入完成或停止时收到一封邮件。
上传的文件以加密方式存储。导入结束、试运行失败,或试运行后从未导入且已过 24 小时,文件都会被删除。

分批导入

每次请求最多发送 1,000 人,并附带不超过 100 个字符的 idempotency_key。
  • 试运行返回 200,包含结果,且不写入任何数据。
  • 设置 dry_run: false 时,导入成功返回 201。只要某个批次存在任何错误,就返回 400,且不导入任何人。
  • 使用相同密钥重复已提交的请求,会返回其记录的结果。使用相同密钥但内容不同,则返回 400 {"idempotency_key": "different_payload"}。
  • Firebase 参数放在 firebase 对象中:{signer_key, salt_separator, rounds, mem_cost}。
  • GET imports/ 列出已提交的批次。

文件格式

JSON

一个人员数组,或一个包含 users 数组的对象。

CSV

包含与上述单值字段相同的列,另外还有 google_id、apple_id、github_id、microsoft_id、microsoft_tenant_id、organization_slug、organization_name 和 organization_role。同一人属于多个组织时,每个组织占一行。
未知的字段或列会报错,绝不会被忽略。

重复数据与已有账户

  • 邮箱相同的行会合并为一个人。完全相同的行被计为重复项。包含更多链接、组织或身份验证器的行会被合并。
  • 同一人的两个不同密码哈希、身份验证器密钥或组织角色会报错。两个人声明同一 external_id 或同一提供方的 subject,同样会报错。
  • 如果该邮箱的账户已存在,且是之前的导入创建的,则跳过该人员(already_imported)。如果该人员是自行注册的,则报 identity_conflict 错误。导入绝不会修改已有账户。

密码

Firebase 参数会加密存储,且仅用于该应用。其他任何格式,或成本超出上述限制,都意味着该用户需要设置新密码。用户首次成功登录后,Didit 会以其自身格式重新存储该用户的密码。

没有可用密码的用户

当用户没有哈希值,或哈希值不受支持时,其密码登录尝试会收到常规的密码错误提示。Didit 还会向其发送一封邮件,其中包含设置新密码的链接(有效期 30 分钟,每天最多发送一次)。只有在该用户的邮箱已验证、账户未被封禁且已开启密码登录时,才会发送此邮件。 在结果中,reset_required 统计没有可用密码的用户数量。reset_emails 统计其中邮箱已验证的用户数量:只有这些用户可以通过这种方式联系到。邮箱未验证的用户无法使用密码登录。如果您启用了邮箱验证码登录方式,他们仍可以使用该方式登录。

社交账号关联、验证器应用和组织

  • 社交账号关联会保留给您的应用已配置的提供方,并沿用其当前的客户端 ID。之后再次登录时无需邮箱验证。Google 和 GitHub 的 subject 是全局唯一的。Apple 的 subject 按开发者团队区分,Microsoft 的 subject 按应用注册区分,因此只有当您的旧平台使用相同的团队或应用注册时,这些关联才会匹配。未配置的提供方的关联会计入 social_unavailable,且不会被导入。
  • 验证器应用(TOTP 密钥:SHA-1,6 位数字,30 秒)会加密存储。导入的用户必须将其作为第二因素使用。他们不会获得恢复码。
  • 尚不存在的组织会根据其 slug 创建。
  • 通行密钥无法导入。它们属于您的旧登录域,因此用户需要在使用 Didit 登录后添加新的通行密钥。

结果

每次试运行以及每个批次和任务都会返回相同的 result: 响应中绝不包含密码哈希、盐值、验证器密钥或字段值。

切换前的检查

请在您的沙盒应用中进行以下测试:
  • 使用您导入的每种密码格式登录,
  • 没有可用哈希值的用户收到设置新密码的邮件,
  • 导入用户的社交登录和验证器验证码,
  • 对同一文件运行两次导入。
然后,检查每位用户的 vendor_data 是否与您用于其验证和交易的值一致。
最后修改于 2026年11月7日