メインコンテンツへスキップ
Authenticationは新しい機能です。すべてのインポートは、まずサンドボックスのアプリケーションで実行し、その後で本番環境のアプリケーションにインポートしてください。
インポートは、別のIDプラットフォームからDidit Authenticationへユーザーを移行する機能です。パスワード、確認済みのメールアドレス、ソーシャルサインインのリンク、認証アプリ、組織での役割も一緒に移行されます。アプリケーションがDiditでユーザーをサインインさせるまで、ユーザー側には何も変化はありません。 インポートには、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)。
  • 中断されたインポートは、最後にコミットされたバッチの後から再開されます。
  • すでにインポートされたユーザーはスキップされるため、同じファイルを再度実行できます。
  • インポートを開始した人には、インポートが完了または停止したときにメールが届きます。
アップロードされたファイルは暗号化して保存されます。ファイルは、インポートの終了時、ドライランの失敗時、またはインポートされなかったドライランから24時間後に削除されます。

バッチでのインポート

最大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が、そのユーザーの認証と取引で使用している値と一致することを確認します。
最終更新日 2026年11月1日