write:authentication(一覧の取得にはread:authentication)を持つコンソールセッションで、アプリケーションのAuthentication管理APIを使用します。エンドユーザーのトークンや検証用のAPIキーは使用しません。例では、MANAGEMENT_BASEは次のとおりです。
2つのインポート方法
ファイルのインポート
1. アップロード
各
keep_*スイッチは、falseを送信しない限りtrueです。この呼び出しは202とジョブを返します。1つのアプリケーションが同時に保持できるアップロード済みファイルは最大5件です。
2. ドライランを確認する
アップロードするたびにドライランが開始されます。ドライランはすべてのユーザーをチェックし、何も書き込みません。GET import-jobs/{id}/をポーリングしてください。
失敗したドライランにはエラーが一覧表示されます。ファイルを修正して、もう一度アップロードしてください。
3. インポートを開始する
POST import-jobs/{id}/start/は、ドライランでチェックした内容をインポートし、202を返します。
- ユーザーは1,000人ずつのバッチでインポートされます。各バッチは個別にコミットされます。
- 1つのアプリケーションで同時に実行できるインポートは1件のみです(それ以外の場合は
import_running)。 - 中断されたインポートは、最後にコミットされたバッチの後から再開されます。
- すでにインポートされたユーザーはスキップされるため、同じファイルを再度実行できます。
- インポートを開始した人には、インポートが完了または停止したときにメールが届きます。
バッチでのインポート
最大100文字のidempotency_keyを付けて、1リクエストあたり最大1,000人を送信します。
- ドライランは結果とともに
200を返し、何も書き込みません。 dry_run: falseの場合、インポートに成功すると201を返します。エラーを1件でも含むバッチは400を返し、誰もインポートされません。- コミット済みのリクエストを同じキーで繰り返すと、記録済みの結果が返されます。同じキーで内容が異なる場合は
400 {"idempotency_key": "different_payload"}が返されます。 - Firebaseのパラメーターは
firebaseオブジェクト{signer_key, salt_separator, rounds, mem_cost}に指定します。 GET imports/はコミット済みのバッチを一覧表示します。
ファイル形式
JSON
ユーザーの配列、またはusersにその配列を持つオブジェクトです。
CSV
JSONと同じ単一値の列に加えて、google_id、apple_id、github_id、microsoft_id、microsoft_tenant_id、organization_slug、organization_name、organization_roleを使用します。複数の組織に所属するユーザーは、組織ごとに1行ずつ記述します。
重複と既存のアカウント
- 同じメールアドレスの行は1人のユーザーとしてまとめられます。まったく同じ行は重複としてカウントされます。リンク、組織、認証アプリが追加されている行はマージされます。
- 1人のユーザーに対して2つの異なるパスワードハッシュ、認証アプリのシークレット、または組織での役割が存在する場合はエラーになります。同じ
external_idまたはプロバイダーのsubjectが2人のユーザーに紐付けられている場合もエラーです。 - そのメールアドレスのアカウントがすでに存在し、それが以前のインポートで作成されたものである場合、そのユーザーはスキップされます(
already_imported)。ユーザーが自分でサインアップしていた場合は、identity_conflictエラーになります。インポートによって既存のアカウントが変更されることはありません。
パスワード
Firebaseのパラメーターは暗号化して保存され、そのアプリケーション専用に使われます。これ以外の形式、またはこれらの上限を超えるコストの場合、そのユーザーには新しいパスワードが必要です。ユーザーが初めてサインインに成功すると、Diditはそのパスワードを独自の形式で保存し直します。
使用可能なパスワードがないユーザー
ハッシュがない、またはサポートされていないハッシュを持つユーザーがパスワードでサインインしようとすると、通常のパスワード誤りと同じ応答が返ります。さらにDiditは、新しいパスワードを設定するためのリンクをそのユーザーにメールで送信します(有効期間30分、1日あたり最大1回)。これは、メールアドレスが確認済みで、アカウントがブロックされておらず、パスワードによるサインインが有効な場合にのみ行われます。 結果のreset_requiredは、使用可能なパスワードがないユーザーの数です。reset_emailsはそのうちメールアドレスが確認済みのユーザーの数で、この方法で連絡できるのはこれらのユーザーだけです。メールアドレスが未確認のユーザーは、パスワードでサインインできません。メールコードによるサインイン方法を有効にすれば、引き続きメールコードでサインインできます。
ソーシャル連携・認証アプリ・組織
- ソーシャル連携は、アプリケーションですでに設定済みのプロバイダーについて、現在のクライアントIDのもとで保持されます。これにより、再訪時のサインインではメールによる確認が不要になります。GoogleとGitHubのsubjectはグローバルです。Appleのsubjectは開発者チームごと、Microsoftのsubjectはアプリ登録ごとに異なるため、これらの連携は以前のプラットフォームが同じチームまたは同じアプリ登録を使用していた場合にのみ一致します。設定していないプロバイダーへの連携は
social_unavailableとしてカウントされ、インポートされません。 - 認証アプリ(TOTPシークレット: SHA-1、6桁、30秒)は暗号化して保存されます。インポートされたユーザーは、これを第2要素として使用する必要があります。リカバリーコードは付与されません。
- まだ存在しない組織は、そのslugをもとに作成されます。
- パスキーはインポートできません。パスキーは以前のサインインドメインに紐づいているため、ユーザーはDiditでサインインした後に新しいパスキーを追加します。
結果
すべてのドライラン、バッチ、ジョブは同じresultを返します。
レスポンスには、パスワードハッシュ、ソルト、認証アプリのシークレット、フィールドの値は一切含まれません。
切り替える前に
サンドボックスのアプリケーションで、次の項目をテストします。- インポートする各パスワード形式でのサインイン
- 使用可能なハッシュがないユーザーへの新しいパスワード設定メール
- インポートしたユーザーのソーシャルサインインと認証アプリのコード
- 同じファイルを2回実行した場合の動作
vendor_dataが、そのユーザーの認証と取引で使用している値と一致することを確認します。