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)。 - 中断的导入会从最后一个已提交的批次之后继续。
- 已导入的人员会被跳过,因此可以对同一文件再次运行导入。
- 发起导入的人员会在导入完成或停止时收到一封邮件。
分批导入
每次请求最多发送 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 是否与您用于其验证和交易的值一致。