WordPressプラグインのLogin by Auth0でユーザーを移行する

ユーザー移行機能は、カスタムデータベースと呼ばれるAuth0コア機能をLogin by Auth0プラグインのURLエンドポイントと組み合わせて使用​​し、ユーザーが既存のWordPressユーザーアカウントで認証できるようにします。カスタムデータベースの詳細については、「カスタムデータベース接続」をお読みください。

仕組み

データ移行を有効にすると、プラグインは2つの安全なエンドポイントを公開し、Auth0がWordPressアカウントを使用してユーザーを認証できるようにします。これらのエンドポイントはシークレットトークンで保護されており、Auth0が使用するIPアドレスのみを許可するように設定できます。

ログイン フローは次のとおりです。

  1. ユーザーは、Auth0ログインフォーム(サイトに埋め込まれているか、Auth0でホストされている)を使用してログインを試みます。

  2. Auth0がデータベース接続で提供された資格情報に関連付けられたユーザーを見つけられない場合は、ユーザー資格情報と移行トークンを使用してWordPressサイトの移行エンドポイントを呼び出します。

  3. プラグインは、指定されたユーザー名/メールアドレスを持つユーザーをWordPressデータベース内で見つけ、パスワードを検証します。

  4. ユーザーが正常に認証された場合、Auth0はサイトのデータベース接続にユーザーを作成し、ユーザーを認証してログインさせます。

  5. ユーザーが次回ログインするときには、Auth0ユーザーを使用するため、移行エンドポイントはスキップされます。

ユーザー移行は、サイトが最初にAuth0に接続されたときに設定する必要があります。ユーザーが既に存在するデータベース接続のカスタムデータベーススクリプトをオンまたはオフにしようとすると失敗します。モード間の移動の詳細については、トラブルシューティングのセクションを参照してください。

セットアップと構成

ユーザー移行を構築する最も簡単な方法は、プラグインを最初にインストールするときにセットアップウィザードを使用することです。プロセスの詳細については、「Login by Auth0をインストールする」をお読みください。

ユーザー移行セットアップウィザードを完了できなかった場合、またはプロセスを詳しく確認したい場合は、以下の手順に従ってください。これもユーザーがいないデータベース接続でゼロから開始します。次のプロセスは、トラフィックのないサイトまたはメンテナンスモードがオンになっているサイトで完了する必要があります。

  1. アプリケーションを作成して正しく構成し、アプリケーション用の空のデータベース接続を作成してアクティブ化します。これらは、標準のセットアップウィザードプロセスで作成されたものと同じにすることも、ゼロから作成することもできます。セットアップウィザードの詳細については、「Login by Auth0をインストールする」をお読みください。

  2. WordPressのAuth0 > [Settings(設定)]画面で、アプリケーションのドメイン、クライアントID、クライアントシークレットが[Basic(基本)]タブの正しいフィールドに保存されていることを確認します。

  3. [Advanced(詳細)]ビューで、[User Migration Endpoints(ユーザー移行エンドポイント)]設定を有効にし、[Save Changes(変更を保存)]を選択します。定数ベースの設定を使用している場合は、AUTH0_ENV_MIGRATION_WStrueに設定し、AUTH0_ENV_MIGRATION_TOKENを、一重引用符やバックスラッシュを含まない、長さが16桁以上の安全なランダム文字列に設定します。

  4. 設定の下に、セキュリティトークンが表示されます。この値は、プロセスの後半で必要になるため、このページは開いたままにしておきます。

  5. Auth0ダッシュボードで、使用するデータベース接続に移動し、ユーザー名の要求およびAuth0にユーザーをインポートを有効にします。

  6. [Custom Database(カスタムデータベース)]ビューを選択し、[Use my own database(独自のデータベースを使用する)]を有効にします。

  7. [Database Action Scripts(データベースアクションスクリプト)]下の設定に、の2つのタブがあります。1つは[Login(ログイン)]用、もう1つは[Get User(ユーザー取得)]用です。

  8. [Login(ログイン)]ビューを選択し、既存のコードを消去し、GitHubリポジトリからdb-login.jsコードをコピーして、コードエディターに貼り付けます。

  9. この手順はバージョン3.10.0以前用です。{THE_WS_URL} を探し、それをWordPressインスタンスのサイトURLに置き換え、その後に/index.php?a0_action=migration-ws-loginを続けます。サイトURLは、wp-adminの[Settings(設定)] > [General(一般)] 画面にあります。これをテストするには、ブラウザに完全なURLを貼り付けます。{"status":401,"error":"Unauthorized"} と表示されます。

  10. この手順はバージョン 3.10.0 以前用です。{THE_WS_TOKEN} を探し、それを[User Migration Endpoints(ユーザー移行エンドポイント)]設定の下に表示されるトークンに置き換えます。

  11. エディターにエラーは表示されません。すべて問題がなければ、トップの[Save(保存)]をクリックします。

  12. この手順はバージョン3.11.0以降用です。[Settings(設定)]までスクロールし、次の構成変数を追加します。 - endpointUrlをWordPressインスタンスのサイトURL(wp-admin > [Settings(設定)] > [General(一般)] > 「サイトURL」フィールドに設定し、その後に/index.php?a0_action=を続けます。 - migrationTokenを上記の手順4で確認したセキュリティトークンの値に設定します。 - userNamespaceをAuth0のアプリケーション名に設定するか、文字、数字、ダッシュのみを含むその他の値に設定します。

    WordPress Plugin custom database settings
  13. トップの[Try(試す)]ボタンをクリックし、表示されるフォームで有効なWordPressユーザーアカウントを使用します。「プロファイルは」に続いてユーザーのデータが表示されます。表示されない場合は、以下のトラブルシューティングセクションを参照してください。

  14. [Get User(ユーザーの取得)]ビューを選択し、既存のコードを消去し、GitHubリポジトリからdb-login.jsコードをコピーして、コードエディターに貼り付けます。

  15. この手順は3.10.0以前用です。{THE_WS_URL} を探し、それをWordPressインスタンスのサイトURLに置き換え、その後に/index.php?a0_action=migration-ws-loginを続けます。サイトURLは、wp-adminの[Settings(設定)] > [General(一般)] 画面にあります。これをテストするには、ブラウザに完全なURLを貼り付けます。{"status":401,"error":"Unauthorized"} と表示されます。

  16. この手順は3.10.0以前用です。{THE_WS_TOKEN} を探し、それを[User Migration Endpoints(ユーザー移行エンドポイント)]設定の下に表示されるトークンに置き換えます。

  17. エディターにエラーは表示されません。すべて問題がなければ、[Save(保存)]をクリックします。

  18. トップの[Try(試す)]ボタンをクリックし、表示されるフォームで有効なWordPressユーザーアカウントが記載されたメールを使用します。「プロファイルは」に続いてユーザーのデータが表示されます。表示されない場合は、以下のトラブルシューティングセクションを参照してください。

  19. 新しいブラウザセッションで、WordPressサイトのログインページに移動し、ログインを試みます(ユーザーがデータベースにまだ存在していないことが必要です)。最初はログインプロセスに通常より時間がかかりますが、成功するはずです。その後のログインは速くなります。

  20. (オプション)移行エンドポイントの追加セキュリティをオンにするには、WordPress のAuth0 > Settings(設定)画面に移動し、オンにして[Save Changes(変更を保存)]を選択します。別のユーザーでログインして、Auth0がエンドポイントにアクセスできることをテストします。

この時点で、ユーザー移行のセットアップは完了し、既存のWordPressユーザーはAuth0データベース接続に徐々に移行されます。

トラブルシューティング

ユーザー移行の問題は通常、複数の場所で発生します。

  • カスタムデータベーススクリプトのURLまたはトークンが正しくありません。

  • IP許可リストがオンになっていますが、IPアドレスが正しくありません。

  • WordPressインスタンス上の制限されたエンドポイントまたはキャッシュされたエンドポイントです。

問題のトラブルシューティングを開始する最良の方法は、[Auth0 Dashboard] > [Authentication(認証)] > [Database(データベース)]で使用されているデータベース接続のカスタムデータベースビューにあるLogin(ログイン)スクリプトの[Try(試行)]ボタンを使用することです。以下は、表示される可能性のあるエラーメッセージと修正手順です。

位置0の JSON に予期しないトークン<があります

これは、カスタムスクリプトが使用可能な形式でデータを取得していないことを意味します。データベーススクリプトでこの問題が発生する原因は、エンドポイントURLが正しくないことが考えられます。

まず、スクリプトの10行目にあるURLをコピーして、ブラウザーに貼り付けます。エンドポイントが正しい場合は、次の2つのメッセージのいずれかが表示されます。

{"status":401,"error":"Unauthorized"}

// または

{"status":403,"error":"Forbidden"}

表示されているのがホームページまたは404である場合、URLは正しくありません。WordPress管理画面の[Settings(設定)] > [General(一般)] > [Site(サイト)URL]でサイトURLを探します。ログインスクリプトの場合は末尾に/index.php?a0_action=migration-ws-loginを追加し、ユーザー取得スクリプトの場合は末尾に/index.php?a0_action=migration-ws-get-userを追加します。

- バージョン3.10.0以前の場合:URLの値は、request.post呼び出しの最初のパラメーターとしてスクリプト自体に表示されます。 - バージョン3.11.0以降の場合:トークン値は構成変数に保存されます。関数の最初の行に以下を追加し、[Try(試行)]ボタンを使用して、endpointUrlに保存されている内容を確認します。

callback(null, configuration);

URLが正しいことがわかっていてもこの問題が解決しない場合は、ホストに問い合わせて、それらのURLがキャッシュされていないか、何らかの方法で制限されていないかを確認してください。

メールアドレスまたはパスワードが間違っています

これは、他に問題が発生した場合に表示されるデフォルトのエラーです。現在の問題をトラブルシューティングする最も簡単な方法は、返送されているエラーを一時的に出力することです (これらは、攻撃者に攻撃の材料を与える可能性のあるものを表示しないように、デフォルトでは不透明になっています)。

ログインスクリプトの30行目で、次の内容を変更します。

callback(null);

次の内容に変更:

callback(wpUser.error);

スクリプトを保存し、再度接続を試みます。次のいずれかのメッセージが表示され、以下の手順で問題を特定できるようになっています。問題を解決したら、スクリプトを元に戻します。

Forbidden(禁止)

これは、WordPressインストールで移行エンドポイントがオフになっていることを意味します。WordPressで、Auth0 > Settings(設定) > Advanced(詳細)に移動し、User Migration Endpoints(ユーザー移行エンドポイント)をオンにします。そこに表示されるトークンが、両方のカスタムデータベーススクリプトで使用されているトークンと同じであることを確認します。

  • バージョン3.10.0以前の場合:トークン値は、スクリプト自体のaccess_tokenの後に表示される必要があります。

  • バージョン3.11.0以降の場合:トークン値は構成変数に保存されます。関数の最初の行に以下を追加し、[Try(試行)]ボタンを使用して、migrationTokenに保存されている内容を確認します。

callback(null, configuration);

Unauthorized(未認可)

これは、移行IP許可リストがオンになっているが、着信IPアドレスがリストにないことを意味します。ログインスクリプトのすぐ下に、IPアドレスのリストが表示されます。

WordPress User Migration - Auth0 IP Addresses

これらのIPアドレスがすべて、プラグインのAuth0 > Settings(設定) > Advanced(詳細)の下にあるWordPressに表示されていることを確認します。

WordPress User Migration - IP Whitelist

Auth0にリストされているIPアドレスの1つ以上がWordPressに表示されない場合は、不足しているアドレスをフィールドに追加して、設定ページを保存します。また、不足しているIPアドレスを含む投稿をAuth0コミュニティに作成し(「wordpress」というタグを付けてください)、問題に対処できるようにします。

承認されていません: 承認ヘッダーがありません

セキュリティトークンがデータベーススクリプト(行16)にないか、サーバーがヘッダーを正しく処理していません。ログインスクリプトをチェックして、トークンが存在し、WordPressにあるトークンと一致していることを確認します。トークンが存在し、正しい場合は、ホストに連絡して、認証ヘッダーを解析できるようにする必要があります。サーバーのトラブルシューティングについては、stackoverflow.comのApache 2.4 + PHP-FPMとAuthorizationヘッダーをお読みください。トークンの取得方法を確認するには、GitHubリポジトリのプラグインコード

無効なトークン

データベーススクリプトのセキュリティトークンが正しくありません。ログインスクリプトの16行目をチェックして、トークンがWordPressのものと一致していることを確認してください。

無効な資格情報

使用されているメールアドレスやパスワードが正しくありません。正しいメールアドレスを入力していること、およびパスワードが正しいことを確認してください。ユーザーパスワードを別のものにリセットして、正しいパスワードであることを確認できます。

メールを変更できない、またはユーザーデータが正しくない

Auth0テナントで複数のカスタムデータベース接続を使用していて、メールアドレスを変更できない、または間違ったユーザーのユーザーデータが保存されている場合は、Auth0でユーザーIDが重複している可能性があります。この問題は、3.11.0をインストールする新しいサイトでは修正されていますが、それ以前に作成された接続では、次のいずれかを実行して手動で修正する必要があります。

  • 保存する必要があるユーザーデータが保存されていない場合 (ログインをサポートするためだけに接続を使用し、メタデータを保存していない場合)、上記の手順(3.11.0の注記を使用)を使用して新しいカスタムデータベース接続を作成し、アプリケーションをこの新しい接続に切り替えることができます(古い接続は必ずオフにしてください)。移行が再開され、ユーザー エクスペリエンスに影響はありません。

  • Auth0に保持する必要があるデータがある場合は、ユーザーのインポート/エクスポート拡張機能を使用してユーザーデータを調整できます。 1.上記の手順(3.11.0 の注記を使用)を使用して新しいカスタムデータベース接続を作成します。 2.既存の接続からすべてのユーザーをエクスポートします(切り替え中はサイトをメンテナンスモードにして、ユーザーが取り残されないようにすることをお勧めします)。 3.すべてのユーザーIDを変更して、新しい接続を作成するときに使用する名前空間を追加します。ユーザーIDは、auth0|123からauth0|Your-WP-Site-Name|123のような形式になります。インポートスキーマに従うために必要な他のすべてのフィールドを調整します。詳細については、一括ユーザーインポートのデータベーススキーマと例を参照してください。 4.アプリケーションの新しい接続をオンにし、古い接続をオフにします。 5.新しいユーザーデータを新しい接続にインポートしてテストします。

  • 有料アカウントをお持ちの場合は、サポートチームに連絡してデータベース更新スクリプトを実行し、ユーザーIDを名前空間バージョンに変更し、同時にデータベーススクリプトに名前空間を追加することができます(上記のセットアップと構成の手順12)。