メインコンテンツへスキップAuth0は、様々なIDプロバイダーのユーザーアカウントのリンクをサポートします。これによりユーザーは、どのアカウントから認証してもアプリによって認識され、同じユーザープロファイルに関連付けられます。
利用可能性はAuth0プランによって異なる
この機能が利用できるかどうかは、使用しているログイン実装とAuth0プラン(または契約)によります。詳細については、「価格設定」をお読みください。
Auth0は、デフォルトではすべてのIDを個別のIDとして扱います。たとえば、あるユーザーが最初にAuth0データベースにログインし、次にGoogleまたはFacebook経由でログインした場合、これら2つの試行は、Auth0には2人の別々のユーザーとして表示されます。ユーザーがアカウントを明示的にリンクできるようにする機能を実装できます。このシナリオでは、ユーザーは、恐らくGoogleなどの初期プロバイダーを使用してログインします。貴社のアプリケーションには、別のアカウントを最初のアカウントにリンクできるようにするリンク、またはボタンが搭載されているでしょう。その場合、ユーザーが2番目のプロバイダーでログインしたときに2番目のアカウントが最初のアカウントにリンクされるよう、ユーザーがこのリンク/ボタンをクリックすると、アプリケーションが呼び出しを行います。
- ユーザーが、IDプロバイダーごとに個別のプロファイルを作成せずに、任意のIDプロバイダーを使用してログインできること
- 登録ユーザーは、新しいソーシャルログインまたはパスワードレスログインを使用できるものの、既存のプロファイルは引き続き使用できること
- パスワードレスログインを使用して登録したユーザーが、より詳細なプロファイルを有するアカウントにリンクできるようになること
- アプリケーションが、様々な接続に保存されているユーザープロファイルデータを取得できるようになること
アカウントリンクが安全でないと、悪意のあるアクターが正当なユーザーアカウントにアクセスできるようになってしまいます。以下の点を常に念頭に置いてください:
手動、自動アカウントリンクの両方について、テナントは、リンクが発生する前に両方のアカウントの認証を要求する必要があります。
また、すべての手動アカウントリンクで、ユーザーに資格情報の入力を求める必要があります。
アカウントをリンクするプロセスでは、2つの既存のユーザープロファイルが1つにマージされます。アカウントをリンクする場合は、プライマリアカウントとセカンダリアカウントを指定する必要があります。
次の例では、サンプルのプライマリアカウントとセカンダリアカウントに対して、リンクされたプロファイルがどのようになるかを説明しています。
以下にご注意ください:
user_idおよびその他のすべてのメインプロファイルのプロパティは、引き続きプライマリIDのプロパティであること
user.identities配列の最初のIDが、プライマリIDであること
- これで、セカンダリアカウントがプライマリプロファイルの
user.identities配列に埋め込まれること
- セカンダリアカウントの属性は、配列内の対応するIDの
profileDataフィールド内に配置されること
- プライマリアカウントの
user_metadataとapp_metadataは、変更されていないこと
- セカンダリアカウントの
user_metadataとapp_metadataは、破棄されること
- ユーザープロファイルと関連付けられたIDの自動マージは、行われないこと
- セカンダリアカウントは、ユーザーリストから削除されること
- プライマリアカウントを削除すると、セカンダリアカウントも削除されること
メタデータは、アカウントのリンク中に自動でマージされません。マージする場合は、Manage API/users/patch_users_by_idエンドポイントを使用して、手動で行う必要があります。
Auth0 Node.js SDK for APIv2も、ご利用いただけます。
詳細については、「Understand How Metadata Works in User Profiles(ユーザープロファイルでのメタデータの仕組みを理解する)」をお読みください。
アカウントリンクを実装するには、次の2つの方法があります:
- ユーザー主導のアカウントリンク:ユーザーが、アプリの管理者画面を使用してアカウントをリンクできるようにします。
- 推奨されるアカウントリンク:同じメールアドレスを持つアカウントを特定し、アプリ内でユーザーにそれらをリンクするよう促します。
通常、アカウントリンクは認証されたユーザーが主導します。貴社のアプリは、ユーザーのプロフィールページにある、**[Link accounts(アカウントのリンク)]**ボタンのようなUIを有していなければなりません。
シングルページアプリケーションでユーザー主導のアカウントリンクを実装する方法について詳しくは、「Client-Side Account Linking(クライアント側のアカウントリンク)」をご一読ください。通常のウェブアプリケーションでユーザー主導のアカウントリンクを実装する方法について詳しくは、「Server-Side Account Linking(サーバー側のアカウントリンク)」をご一読ください。
同じメールアドレスを持つアカウントを特定し、ユーザーにリンクするよう促すことができます。たとえば、ユーザーはuser@gmail.comでGoogleのアカウントを作成し、同じメールアドレスにリンクされたアカウントでFacebookにログインできます。
その場合は、リンク先のアカウントで最初に認証を行うことで、使用可能なアカウントの一覧をユーザーに表示して、リンクできるようにすることが可能です。
また、Account Link拡張機能を使用しても、同じ結果を得ることができます。
以前は一部のケースで、IDトークンを使ってユーザーアカウントのリンクやリンク解除ができました。しかし、この機能は廃止されます。今後はすべてのケースでアクセストークンを使用する必要があります。