メインコンテンツへスキップ
ここでは、Gigya、Okta、Stormpath から Auth0 にユーザーを移行する場合のサンプルシナリオをいくつか紹介します。いずれのシナリオでも、それらのプラットフォームにアカウントがあることを前提としています。

前提条件

カスタムデータベース接続を設定します。
  1. Dashboard > Authentication > Database で新しいデータベース接続を作成します。必ず Custom Database ビューを選択し、Use my own database スイッチを有効にしてください。
  2. データベースをアプリケーションに接続します。データベース接続の設定で Applications ビューを選択します。Applications Using This Connection セクションで、各アプリケーションに対してデータベース接続を有効にします。

シナリオ 1: Gigya から Auth0 にユーザーを移行する

  1. Gigya ユーザーをエクスポートします: Gigya’s IdentitySync を使用して、ターゲット スキーマに合わせてユーザーデータを変換し、エクスポートします。このプロセスの詳細については、Gigya IdentitySync: Using IdentitySync を参照してください。

    手順に従って、Gigya データベース内のユーザーデータを正しいスキーマに変換し、変換後のデータを JSON 形式でエクスポートします。
  2. Gigya ユーザーを Auth0 にインポートします: ユーザーは、User Import/Export Extension または Management API のいずれかを使用してインポートできます。
    • User Import/Export Extension: Auth0 Dashboard > Extensions に移動し、User Import / Export 拡張機能を選択してインストールします。拡張機能をインストールしたら、それをクリックしてインポート / エクスポート インターフェイスを開くことができます。

      エクスポートした Gigya ユーザーの JSON ファイルを指定されたアップロード領域にドラッグし、先ほど作成したデータベースを選択します。インポートを開始するには、Start Importing Users を選択します。詳細については、User Import/Export Extension を参照してください。
    • Management API: Auth0 にユーザーをインポートするジョブを作成します。詳しい手順については、一括ユーザーインポート を参照してください。

シナリオ 2: Okta から Auth0 へユーザーを移行する

  1. ユーザーのインポートを有効にする: Auth0 Dashboard > Authentication > Database に移動し、データベース接続を選択します。Settings で、Import Users to Auth0 オプションを有効にします。
  2. Login script を作成します。Login スクリプトは、ユーザーがログインを試みても、そのアカウントが Auth0 データベースに見つからない場合に実行されます。username および password パラメーターにメールアドレスとパスワードを渡して、Okta の Primary Authentication エンドポイントを呼び出すスクリプトを作成する必要があります。 認証が成功すると、Okta は Authentication Transaction object を返します。このオブジェクトには、embedded resources 内に ユーザーのユーザープロファイル が含まれています。その後、ユーザー情報を抽出して、コールバック関数で Auth0 に渡すことができます。

    データベース接続の Custom Database ビューで、Database Action Scripts を探し、Login を選択します。
    function login (email, password, callback) {
      // {yourOktaDomain} を自身の Okta ドメインに置き換えてください
      var url = 'https:/{yourOktaDomain}/api/v1/authn';
    
      // ユーザーを認証するための POST リクエストを送信する
      request({
        url: url,
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Accept': 'application/json'
        },
        body: {
          username: email,
          password: password,
          options: {
            multiOptionalFactorEnroll: false,
            warnBeforePasswordExpired: false
          }
        },
        json: true
      }, function (error, response, body) {
        // レスポンスが成功していることを確認する
        if (response.statusCode !== 200) return callback();
    
        // レスポンスボディからユーザーを取得する
        var user = body._embedded.user;
    
        // Auth0 に保存するデータを設定し、ユーザーを移行する
        return callback(null, {
            user_id : user.id,
            username: user.profile.login,
            email: user.profile.login,
            // Okta で有効なユーザーであれば、すでにメールアドレスを確認済みと見なして
            // email_verified を true に設定する
            // このフィールドが設定されていない場合、ユーザーはアカウントの確認を求める
            // メールを受信する
            email_verified: true,
            name: user.profile.firstName + ' ' + user.profile.lastName
          });
      });
    }
    
    スクリプトの上にある Try ボタンをクリックして、スクリプトが正しく動作するかどうかをテストします。
  3. Get User スクリプトを作成します: Get User スクリプトは、ユーザーがパスワードのリセットを試みたものの、Auth0 データベースにそのアカウントが見つからない場合に実行されます。ユーザーのメールアドレスを login パラメーターとして渡し、Okta の Get User with Login エンドポイントを呼び出すスクリプトを作成する必要があります。 また、API トークンを作成する必要があります。このトークンは、Authorization ヘッダーでこのエンドポイントに渡す必要があります。 成功すると、Okta はユーザー情報を含む User object を返します。ここでも、ユーザー情報を抽出してコールバック関数で Auth0 に渡すことができます。

    データベース接続のCustom Databaseビューで、Database Action Scriptsを見つけ、Get Userを選択します。
    function getByEmail(email, callback) {
      // {yourOktaDomain} を自分の Okta ドメインに置き換えてください
      var url = 'https://{yourOktaDomain}/api/v1/users/' + encodeURIComponent(email);
    
      // メールアドレスでユーザーを検索する GET リクエストを送信します
      // {yourOktaApiToken} を Okta API トークンに置き換えてください
      // (参照: https://developer.okta.com/docs/api/getting_started/getting_a_token.html) 
      request({
        url: url,
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
          'Accept': 'application/json',
          'Authorization': 'SSWS ' + '{yourOktaApiToken}'
        },
        json: true
      }, function (error, response, body) {
        // レスポンスが成功したことを確認します
        if (response.statusCode !== 200) return callback();
    
        // Auth0 に保存するデータを設定してユーザーを移行します
        return callback(null, {
          user_id: body.id,
          username: body.profile.login,
          email: body.profile.login,
          email_verified: true,
          name: body.profile.firstName + ' ' + body.profile.lastName
        });
      });
    }
    
    スクリプトが動作するかどうかを確認するには、スクリプト上部の Try ボタンをクリックします。
  4. カスタムデータベース接続をテストします。接続を試す をクリックします。Auth0 Lock widget が表示されます。Okta ユーザーのメールアドレスとパスワードを入力し、ログイン をクリックします。接続が正常に機能していることを示す Web ページと、ユーザー情報が表示されます。
  5. 新しくインポートされたユーザーを確認するには、Auth0 Dashboard > ユーザー管理 > ユーザーを開きます。

シナリオ 3: Stormpath から Auth0 にユーザーを移行する

  1. ユーザーのインポートを有効にする: Auth0 Dashboard > Authentication > Database に移動し、データベース接続を選択します。Settings で、Import Users to Auth0 オプションを有効にします。
  2. 接続でアプリケーションを有効にする: Applications ビューを選択します。データベース接続を使用するアプリケーションを有効にします。
  3. Login script を作成します。Login スクリプトは、ユーザーがログインを試みても、そのアカウントが Auth0 データベースに見つからない場合に実行されます。usernamepassword パラメーターにユーザーの認証情報を渡し、Stormpath の API を呼び出してユーザーを認証するスクリプトを作成する必要があります。

    認証に成功すると、Stormpath からのレスポンスにユーザーアカウントの URL が含まれます。次に、そのアカウント URL に対して 2 回目のリクエストを実行し、ユーザー情報を取得します。取得したユーザー情報を抽出し、コールバック関数で Auth0 に渡すことができます。
    function login(username, password, callback) {
      // {yourStormpathClientId} 属性をあなたの Stormpath ID に置き換えてください
      var url = 'https://api.stormpath.com/v1/applications/{yourStormpathClientId}/loginAttempts';
    
      // Stormpath ではユーザー資格情報を base64 エンコードされたメッセージとして渡す必要があります
      var message = username + ':' + password;
      var pass = new Buffer(message).toString('base64');
    
      // ユーザーを認証するための POST リクエストを送信します
      request({
        url: url,
        method: 'POST',
        auth: {
          // API クライアントID
          user: '{yourStormpathClientId}',
          // API クライアントシークレット
          password: '{yourStormpathClientSecret}'
        },
        headers: {
          'Content-Type': 'application/json'
        },
        json: {
          type: 'basic',
          // base64 エンコードされた資格情報を渡します
          value: pass
        }
      }, function (error, response, body) {
        // レスポンスが成功した場合は続行します
        if (response.statusCode !== 200) return callback();
        // 成功レスポンスにはユーザー情報を取得するための URL が含まれます
        var accountUrl = body.account.href;
    
        // ユーザー情報を取得するために2回目のリクエストを送信します(今回は GET リクエスト)
        request({
          url: accountUrl,
          method: 'GET',
          auth: {
            // API クライアントID
            user: '{yourStormpathClientId}',
            // API クライアントシークレット
            password: '{yourStormpathClientSecret}'
          }
        }, function (errorUserInfo, responseUserInfo, bodyUserInfo) {
          // 成功レスポンスを受け取った場合は処理を続けます
          if (responseUserInfo.statusCode !== 200) return callback();
    
          var parsedBody = JSON.parse(bodyUserInfo);
          // ユーザー識別子を取得するために Stormpath API の URL 部分を除去します
          var id = parsedBody.href.replace('https://api.stormpath.com/v1/accounts/', '');
    
          // 最後に、Auth0 に保存するデータを設定してユーザーを移行します
          return callback(null, {
            user_id : id,
            username: parsedBody.username,
            email: parsedBody.email,
            // Stormpath で有効なユーザーであれば既にメールアドレスを確認済みと見なし、
            // email_verified を true に設定します
            // このフィールドを設定しない場合、ユーザーにアカウント確認を求める
            // メールが送信されます
            email_verified: true,
            // Stormpath から引き継ぎたい追加フィールドをここに追加してください
          });
        });
      });
    }
    
    スクリプトをテストして動作するかどうかを確認するには、スクリプトの上にある Try ボタンをクリックします。
  4. Get User script を作成します: Get User スクリプトは、ユーザーがパスワードリセットを試みた際に、そのアカウントが Auth0 データベース内に見つからない場合に実行されます。Stormpath API の /accounts エンドポイントを呼び出し、ユーザーのメールアドレスを email パラメーターとして渡すスクリプトを作成する必要があります。 成功すると、Stormpath はユーザー情報を返します。その情報を抽出し、コールバック関数を通じて Auth0 に渡すことができます。
    function getByEmail(email, callback) {
      // {yourStormpathClientId} 属性をあなたの Stormpath ID に置き換えてください
      var url = 'https://api.stormpath.com/v1/applications/{yourStormpathClientId}/accounts';
    
      request({
        url: url,
        method: 'GET',
        auth: {
          // API クライアントID
          user: '{yourStormpathClientId}',
          // API クライアントシークレット
          password: '{yourStormpathClientSecret}'
        },
        qs: { q: email }
      }, function (error, response, body) {
        if (response.statusCode !== 200) return callback();
    
        var parsedBody = JSON.parse(body);
        var user = parsedBody.items[0];
    
        if (!user) return callback();
    
        var id = user.href.replace('https://api.stormpath.com/v1/accounts/', '');
    
        return callback(null, {
          user_id: id,
          username: user.username,
          email: user.email,
          email_verified: true,
          // Stormpath から引き継ぎたい追加フィールドをここに追加してください
        });
      });
    }
    
    スクリプトの上にある Try ボタンをクリックして、スクリプトが正しく動作するかどうかを確認します。
  5. カスタムデータベース接続をテストするには、[接続を試す] をクリックします。Auth0 Lock ウィジェットが表示されます。Stormpath ユーザーのメールアドレスとパスワードを入力し、[ログイン] をクリックします。接続が正しく機能していることを示す、ユーザー情報を含む Web ページが表示されます。
  6. 新しくインポートされたユーザーを確認するには、Dashboard > ユーザー管理 > ユーザーに移動してください。