メインコンテンツへスキップ
ユーザーデータを一括してAuth0にインポートするには、ユーザーインポートジョブ作成エンドポイントを使用します。一括インポートは、ユーザーを既存のデータベースやサービスからAuth0に移行するのに便利です。
複数の移行方法(たとえば、自動移行をしてからユーザーの一括インポート)を使用しようとすると、DUPLICATED_USERエラーが発生することがあります。このエラーは、ユーザーがAuth0の内部ユーザーストアに存在するものの、テナントには存在しないことを示します。このエラーを修正するには、Auth0 Management APIの接続ユーザー削除エンドポイントでユーザーを削除してから、インポートを再試行します。

前提条件

ユーザーインポートジョブを実行する前に、以下を行います。
  • データベース接続をユーザーのインポートに構成して、少なくとも1つのアプリケーションに有効化します。
  • パスワードをインポートする場合には、対応しているアルゴリズムの1つを使ってパスワードがハッシュ化されていることを確認します。ユーザーのパスワードが非対応のアルゴリズムでハッシュ化されている場合には、一括インポート後に初回のログインでユーザーがパスワードをリセットする必要があります。
  • の登録をインポートする場合には、対応しているemailphoneまたはtotpのタイプであることを確認します。
  • ジョブエンドポイントの要求に、Management APIトークンを取得します。
Auth0テナントからエクスポートしたファイルを使用する場合は、ndjsonからJSONに変換する必要があります。同じユーザーIDを維持するために、インポートするユーザーIDからauth0| prefixを削除しなければなりません。インポート処理では、ユーザーIDに自動的にauth0| prefixが追加されます。インポートする前にauth0| prefixを削除しなかった場合、ユーザーIDは、auth0|auth0|...として返されます。

ユーザーのJSONファイルを作成する

Auth0にインポートしたいユーザーデータを含むJSONファイルを作成します。ユーザーデータをJSONファイルにエクスポートする方法は、既存のユーザーデータベースによって異なります。のエンドポイントはJSONファイルを期待します。そのため、fs.readFileSyncではなく、fs.createReadStreamを使用する必要があります。エンドポイントは、JSONファイルではなく、パイプで連結された読み出しストリームを期待します。 JSONファイルのスキーマと例については、「一括インポートのデータベーススキーマと例」をお読みください。
一括インポートでのファイルサイズは、500 KBが上限です。データがこのサイズを上回る場合には、複数のインポートを開始する必要があります。

一括ユーザーインポートを要求する

一括ユーザーインポートジョブを始めるには、POST要求を一括ユーザーインポートジョブ作成エンドポイントに対して行います。必ず、MGMT_API_ACCESS_TOKENUSERS_IMPORT_FILE.jsonCONNECTION_ID、およびEXTERNAL_IDのプレースホルダーの値をそれぞれManagement APIのアクセストークン、ユーザーのJSONファイル、データベース接続IDと外部IDに置き換えます。
curl --request POST \
  --url 'https://{yourDomain}/api/v2/jobs/users-imports' \
  --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
  --form users=@USERS_IMPORT_FILE.json \
  --form connection_id=CONNECTION_ID \
  --form external_id=EXTERNAL_ID
パラメーター説明
usersインポートするユーザーを含むJSON形式のファイルです。
connection_idユーザーが投入される接続のIDです。IDはGET /api/v2/connectionsを使って取得することができます。
upsertブール値で、デフォルトはfalseです。falseでは、メールアドレス、ユーザーID、電話番号、またはユーザー名が一致する既存のユーザーの場合、エラーになります。trueでは、メールアドレスが一致する既存のユーザーは更新されますが、更新されるのはアップサートできる属性のみです。インポートでアップサート可能なユーザープロファイルのフィールドについては、「ユーザープロファイルの構造:ユーザープロファイル属性」を参照してください。注意:インポートファイルに重複したユーザーが存在する場合はエラーになります。その場合、Auth0は投入や更新を行いません。
external_id任意のユーザー定義の文字列で、複数のジョブを関連付けるのに使うことができます。ジョブステータス応答の一部として返されます。
send_completion_emailブール値で、デフォルトはtrueです。trueでは、インポートジョブが終了すると、すべてのテナント所有者に完了メールを送信します。メールを送信したくない場合には、このパラメーターをfalseに設定する必要があります。
要求に成功すると、以下のような応答を受け取ります。
{
  "status": "pending",
  "type": "users_import",
  "created_at": "",
  "id": "job_abc123",
  "connection_id": "CONNECTION_ID",
  "upsert": false,
  "external_id": "EXTERNAL_ID",
  "send_completion_email": true
}
返されたエンティティはインポートジョブを表します。 ユーザーインポートジョブが完了すると、send_completion_emailtrueに設定されている場合には、ジョブの成功または失敗がテナント管理者に通知されます。ジョブ失敗のメールでは、ユーザーのインポートでユーザーのJSONファイルが解析に失敗したことを管理者に知らせる場合もあります。

複数のインポートジョブを同時に実行する

ユーザーインポートジョブ作成エンドポイントでは、同時に実行可能なインポートジョブが2つまでに制限されています。2つのジョブが保留中の場合に追加のジョブを要求すると、429 Too Many Requests(要求が多すぎます)応答が返されます。
{
  "statusCode": 429,
  "error": "Too Many Requests",
  "message": "There are 2 active import users jobs, please wait until some of them are finished and try again
}

ジョブステータスを確認する

ジョブのステータスを確認するには、GET要求をジョブ取得エンドポイントに対して行います。必ず、MGMT_API_ACCESS_TOKENおよびJOB_IDのプレースホルダーの値をそれぞれManagement APIのアクセストークンとユーザーインポートジョブIDに置き換えます。
curl --request GET \
  --url 'https://{yourDomain}/api/v2/jobs/JOB_ID' \
  --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
  --header 'content-type: application/json'
ユーザーインポートジョブのステータスに応じて、以下のような応答の1つを受け取ります。 保留中
{
  "status": "pending",
  "type": "users_import",
  "created_at": "",
  "id": "job_abc123",
  "connection_id": "CONNECTION_ID",
  "external_id": "EXTERNAL_ID"
}
完了 ジョブが完了すると、ジョブステータス応答には、成功、失敗、挿入、および更新レコードの総計が含めれます。
{
  "status": "completed",
  "type": "users_import",
  "created_at": "",
  "id": "job_abc123",
  "connection_id": "CONNECTION_ID",
  "external_id": "EXTERNAL_ID",
  "summary": {
    "failed": 0,
    "updated": 0,
    "inserted": 1,
    "total": 1
  }
}
失敗 ジョブ内にエラーがある場合には、失敗が返されます。ただし、無効なメールなどの無効なユーザー情報では、ジョブが全体として失敗しないことに注意してください。
{
  "status": "failed",
  "type": "users_import",
  "created_at": "",
  "id": "job_abc123",
  "connection_id": "CONNECTION_ID",
  "external_id": "EXTERNAL_ID",
}
失敗エントリの詳細については、以下で「失敗エントリを取得する 」を参照してください。

ジョブのタイムアウト

すべてのユーザーインポートジョブは、2時間 が経過するとタイムアウトします。ジョブがこの時間制限内に完了しない場合は、失敗としてマークされます。 また、ジョブ関連のデータはすべて24時間後に自動削除され、アクセスできなくなります。そのため、何らかのストレージメカニズムを使ってジョブ結果を保管することを強くお勧めします

ログエントリを取得する

ジョブ関連のデータは、すべて24時間後に自動削除され、アクセスできなくなります。そのため、何らかの保管メカニズムを使ってジョブ結果を保管することを強くお勧めします。
ユーザーインポートジョブにエラーがある場合には、GET要求をジョブエラー詳細取得エンドポイントに行って、エラー詳細を取得することができます。必ず、MGMT_API_ACCESS_TOKENおよびJOB_IDのプレースホルダーの値をそれぞれManagement APIのアクセストークンとユーザーインポートジョブIDに置き換えます。
curl --request GET \
  --url 'https://{yourDomain}/api/v2/jobs/JOB_ID/errors' \
  --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
  --header 'content-type: application/json'
要求に成功すると、以下のような応答を受け取ります。hash.valueなどの機密フィールドは応答内でマスクされます。
[
    {
        "user": {
            "email": "test@test.io",
            "user_id": "7af4c65cb0ac6e162f081822422a9dde",
            "custom_password_hash": {
                "algorithm": "ldap",
                "hash": {
                    "value": "*****"
                }
            }
        },
        "errors": [
            {
                "code": "...",
                "message": "...",
                "path": "..."
            }
        ]
    }
]
それぞれのエラーオブジェクトには、エラーコードとエラー詳細を説明するメッセージが含まれます。以下のようなエラーコードがあります。
  • ANY_OF_MISSING
  • ARRAY_LENGTH_LONG
  • ARRAY_LENGTH_SHORT
  • CONFLICT
  • CONFLICT_EMAIL
  • CONFLICT_USERNAME
  • CONNECTION_NOT_FOUND
  • DUPLICATED_USER
  • ENUM_MISMATCH
  • FORMAT
  • INVALID_TYPE
  • MAX_LENGTH
  • MAXIMUM
  • MFA_FACTORS_FAILED
  • MIN_LENGTH
  • MINIMUM
  • NOT_PASSED
  • OBJECT_REQUIRED
  • PATTERN

もっと詳しく

I