Bulk user migration
Bulk import is backend neutral. The source system exports a canonical version-1 document with a stable source and unique externalId for each account. Identity generates the final opaque subject and records the exact external reference for idempotent retries.
Safe sequence
- Export from the source database with a consistent snapshot.
- Prepare a canonical import with
mode: VALIDATE_ONLY. - Submit it and inspect every paginated result.
- Prepare the same records with
mode: CREATE_ONLYand a new idempotency key. - Submit, wait for
SUCCEEDEDand verify exact record coverage. - Persist every authoritative
externalIdtosubjectmapping in the source backend. - Verify product access by exact issuer and subject.
- Perform the source backend’s separate cutover.
./identityctl users import TENANT_UUID customer.validate.json
./identityctl users imports TENANT_UUID 0
./identityctl users import-results TENANT_UUID JOB_UUID 0Imports accept at most 500 records per job. Reusing an idempotency key with different content is rejected. A successful validation does not create users.
Password migration supports BCrypt. The canonical format can also carry one enabled TOTP factor, remaining recovery-code BCrypt hashes and explicit upstream-account links. Sensitive staged material is cleared after completion, cancellation or exhausted retries.
Profile exports stream NDJSON and intentionally exclude passwords, MFA secrets, recovery codes and upstream credentials. They support reconciliation, not reconstruction of an authentication source.