利用可能性はAuth0プランによって異なる
この機能が利用できるかどうかは、使用しているログイン実装とAuth0プラン(または契約)によります。詳細については、「価格設定」をお読みください。
- アカウントリンク拡張機能の使用
- の使用
- 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_ID
とSECONDARY_ACCOUNT_PROVIDER
は、ユーザーの一意のIDによって推測できます。たとえば、ユーザーIDがgoogle-oauth2|108091299999329986433
の場合、要求でgoogle-oauth2
の部分をprovider
、108091299999329986433
の部分をuser_id
として設定します。provider
とuser_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を使ったアカウントリンクの例
基本的なアカウントリンクの実装は次のとおりです。プライマリユーザーがアカウントとアクションを正常にリンクするためには、ログインフローを開始する必要があります。
- アクションにリンクする可能性のあるユーザーアカウントを識別します。
- アクションのリダイレクト機能とトークンを使用して、外部リンクアプリにリダイレクトします。
- リンクするすべてのアカウントに対して、ユーザーの資格情報を使用して認証することを要求します。
- 署名済みJWTにエンコードされた認証の結果を使用してアクションにリダイレクトし、そのトークンの信頼性と内容を検証します。
- 結果に基づいて、Management API呼び出しでアカウントリンクを実行します。
- アクションを使用して、トランザクションの残りの部分をプライマリユーザーに切り替えます。