メインコンテンツへスキップ
ユーザーアカウントをリンクして、プライマリとセカンダリの関係を形成します。リンクが成功すると、エンドポイントはプライマリアカウントIDの新しい配列を返します。 Auth0は、様々なIDプロバイダーのユーザーアカウントのリンクをサポートします。これにより、ユーザーはどのアカウントからでも認証でき、アプリによって認識され、同じユーザープロファイルに関連付けられます。

利用可能性はAuth0プランによって異なる

この機能が利用できるかどうかは、使用しているログイン実装とAuth0プラン(または契約)によります。詳細については、「価格設定」をお読みください。
Auth0 は、デフォルトですべてのIDを個別のものとして扱います。たとえば、ユーザーが最初にAuth0データベースにログインし、次にGoogle またはFacebook経由でログインした場合、Auth0ではこれら2つの試行は2人の別々のユーザーとして表示されます。 アカウントのリンクには3つの方法があります。
  • アカウントリンク拡張機能の使用
  • の使用
  • Auth0.jsの使用
各オプションの詳細を確認するには、下のタブを使用してください。

アカウントリンク拡張機能

Dashboardのアカウントリンク拡張機能をインストールして構成すると、2つ目のアカウントを作成したユーザーの初回ログイン時に、古いアカウントと新しいアカウントをリンクするよう求めることができます。ユーザーは、2つのアカウントをリンクするか、別々にしておくかを選択できます。

Management APIエンドポイント

Auth0 Management APIが提供するユーザーアカウントのリンクエンドポイントは、次の2つの方法で呼び出すことができます:
  • ユーザーが開始するアカウントリンクで、update:current_user_identitiesスコープを含むアクセストークンを使用する
  • サーバー側のアカウントリンクで、update:usersスコープを含むアクセストークンを使用する

ユーザーが開始するクライアント側のアカウントリンク

クライアント側のコードからユーザーが開始するアカウントリンクの場合は、ペイロードに次の項目を含んでいるアクセストークンを使用します:
  • update:current_user_identitesスコープ
  • URLの一部としてプライマリアカウントのuser_id
  • セカンダリアカウントのIDトークンがRS256で署名されていること、クライアントを識別するaudクレームが要求アクセストークンのazpクレームの値と一致していること。update:current_user_identitiesスコープを含むアクセストークンは、現在ログインしているユーザーの情報を更新する場合のみ 使用できます。そのため、このメソッドは、ユーザーがリンクプロセスを開始する場合に適しています。

サーバー側のアカウントリンク

サーバー側のアカウントリンクの場合は、ペイロードに次の項目を含んでいるアクセストークンを使用します:
  • update:usersスコープ
  • URLの一部としてプライマリアカウントのuser_id
  • セカンダリアカウントのuser_id
  • セカンダリアカウントのIDトークンがRS256で署名されていること、クライアントを識別するaudクレームが要求アクセストークンのazpクレームの値と一致していること。update:usersスコープを含むアクセストークンは、任意の ユーザーの情報更新に使用できます。そのため、このメソッドは、サーバー側コードでの使用のみを意図しています。
SECONDARY_ACCOUNT_USER_IDSECONDARY_ACCOUNT_PROVIDERは、ユーザーの一意のIDによって推測できます。たとえば、ユーザーIDがgoogle-oauth2|108091299999329986433の場合、要求でgoogle-oauth2の部分をprovider108091299999329986433の部分をuser_idとして設定します。provideruser_idの代わりに、セカンダリアカウントのIDトークンをペイロードの一部として送信できます:

Auth0.jsライブラリー

Auth0.jsライブラリーを使用できます。まず、Management APIの呼び出しに使用できるアクセストークンを取得しなければなりません。それには、Auth0.jsを初期化する際にhttps://{yourDomain}/api/v2/オーディエンスを指定します。認証フローの一部としてアクセストークンを取得します。代わりに、checkSessionメソッドを使用することもできます。アクセストークンを取得したら、そのアカウントのAuth0ドメインとアクセストークンを渡して新しいauth0.Managementインスタンスを作成することができます。詳細については、Auth0.js > ユーザー管理をご覧ください。

ルールを使用して不足している情報を追加する

ユーザーがログインすると、アプリはプライマリID からユーザー情報を受け取ります。Auth0は、セカンダリIDの情報を使用して、不足しているプロファイルフィールドを自動的に補完しようとしません。たとえば、プライマリIDがデータベース接続から取得され、given_nameプロパティとfamily_nameプロパティが欠落しており、セカンダリIDがユーザーの姓名を含むGoogleソーシャル接続から取得されている場合、アプリケーションは2番目のIDに含まれるデータを受信しません セカンダリIDの情報を使用してプライマリIDに不足している情報を追加するには、次の例のようなルールを記述します。

Actionsを使ったアカウントリンク

Auth0 Actionsを使用して、Management APIを呼び出してユーザーアカウントをリンクできます。Auth0 は、アカウントのリンク後に正しいプライマリユーザーに自動的に変更されないため、アカウントのリンクが成功したらアクションコード内で変更してください。

Actionsを使ったアカウントリンク

ActionsはAuth0機能を柔軟に拡張できますが、ユーザーアカウントをリンクするときには注意が必要です。アカウントリンクが安全でないと、悪意のあるアクターが正当なユーザーアカウントにアクセスできるようになってしまいます。以下の点を常に念頭に置いてください:アカウントを手動でリンクする際には毎回 、ユーザーに資格情報の入力を求めようにします。リンクさせる前には必ず、テナントが両方 のアカウントに認証を要求するようにします。

Actionsを使ったアカウントリンクの例

基本的なアカウントリンクの実装は次のとおりです。
プライマリユーザーがアカウントとアクションを正常にリンクするためには、ログインフローを開始する必要があります。
  1. アクションにリンクする可能性のあるユーザーアカウントを識別します。
  2. アクションのリダイレクト機能とトークンを使用して、外部リンクアプリにリダイレクトします。
  3. リンクするすべてのアカウントに対して、ユーザーの資格情報を使用して認証することを要求します。
  4. 署名済みJWTにエンコードされた認証の結果を使用してアクションにリダイレクトし、そのトークンの信頼性と内容を検証します。
  5. 結果に基づいて、Management API呼び出しでアカウントリンクを実行します。
  6. アクションを使用して、トランザクションの残りの部分をプライマリユーザーに切り替えます。
これらの手順を実行するために、ログイン後のアクションの例には次の内容が含まれます。

もっと詳しく