- そのアカウントを 接続済みアカウント としてユーザーに関連付けます。
- 接続済みアカウント用の外部プロバイダーのアクセストークンとリフレッシュトークンを Token Vault に保存します。
ユーザー認証と Connected Accounts の違い
/authorize エンドポイント) ではなく、Connected Accounts フロー (/me/v1/connected-accounts エンドポイント) を使用して、アクセストークンとリフレッシュトークンを取得し、Token Vault に保存します。Connected Accounts フローが正常に完了すると、Auth0 はそのユーザーアカウントをユーザープロファイルの connected_accounts 配列に追加します。これに対して、ソーシャルまたはエンタープライズのログインフローでは、Auth0 はそのユーザーアカウントをユーザープロファイルの identities 配列に追加します。
次の表は、ユーザー認証フローと Connected Accounts フローの違いを説明しています。
| ユーザー認証 | Connected Accounts | |
|---|---|---|
| フロー | /authorize エンドポイントを使用するログインフロー | My Account API の /me/v1/connected-accounts エンドポイントを使用する Connected Accounts フロー |
| 目的 | ソーシャルまたはエンタープライズの IDプロバイダーでユーザーを認証する | ユーザーがサポート対象の外部プロバイダー経由でログインし、アカウントを接続してその接続を認可すると、接続済みアカウントのアクセストークンとリフレッシュトークンを Token Vault に保存する |
| Authentication | Connected Accounts | 動作 | スコープ |
|---|---|---|---|
| Enabled | Disabled | この接続は、有効な IDプロバイダーとしてユーザーを認証するために /authorize ログインフローを使用します。 | Auth0 Dashboard または Management API を使用して、接続に必要なスコープを渡します。実行時には、このリストに認可リクエストの connection_scope パラメーターに含まれる追加のスコープが自動的に補完されます。 |
| Disabled | Enabled | この接続は、Connected Accounts フローを使用して、その接続のトークンを取得し、Token Vault に保存します。この接続は、ユーザー認証のために /authorize ログインフローを使用せず、有効な IDプロバイダーの一覧からも除外されます。 | Auth0 Dashboard または Management API を使用して、接続に必要なスコープを渡します。実行時には、認可リクエストの scopes パラメーターに含まれるスコープが、接続で必要とされ、かつ Auth0 Dashboard で有効になっている offline_access を除き、Auth0 Dashboard で選択したスコープより優先されます。注: 接続で必要な場合、Auth0 は offline_access を有効にするよう求めます。これにより、クライアントアプリケーションは Auth0 からリフレッシュトークンを取得できるようになります。接続に対して offline_access を Auth0 Dashboard で有効にする必要があります。 |
| Enabled | Enabled | この接続は、有効な IDプロバイダーとしてユーザーを認証するために /authorize ログインフローを使用します。また、Connected Accounts フローを使用して、その接続のアクセストークンを取得し、Token Vault に保存します。 | Auth0 Dashboard と Management API を使用して、接続に必要なスコープを渡します。実行時には、scopes パラメーターに含まれるスコープが、接続で必要とされ、かつ Auth0 Dashboard で有効になっている offline_access を除き、Auth0 Dashboard で選択したスコープより優先されます。注: 接続で必要な場合、Auth0 は offline_access を有効にするよう求めます。これにより、クライアントアプリケーションは Auth0 からリフレッシュトークンを取得できるようになります。接続に対して offline_access を Auth0 Dashboard で有効にする必要があります。 |
動作の仕組み
アプリケーションで Organizations を使用している場合は、Connected Accounts フローを開始する前に、対象の組織でユーザーを認証してください。Token Vault は接続済みアカウントをユーザーの Auth0 プロファイルに保存するため、各組織メンバーは自分の外部アカウントを接続して認可することになります。

- クライアントアプリケーションは、外部プロバイダーに送信するスコープやその他のパラメーターを渡して、My Account API の
/me/v1/connected-accounts/connectエンドポイントにPOSTリクエストを送信します。詳しくは、Connected Accounts リクエストを開始するを参照してください。 - My Account API は、一意の
auth_sessionと、ユーザーを Web ブラウザーにリダイレクトするためのticketを含むconnect_uriを作成します。クライアントアプリケーションは、後で検証するためにauth_sessionを保存します。DPoP が構成されている場合、My Account API は DPoP Proof JWT を検証します。 - クライアントアプリケーションは、ブラウザーでユーザー認証と認可を行うため、クエリーパラメーターとして
ticketを含むconnect_uriにユーザーをリダイレクトします。クライアントアプリケーションは、Authorization Code Flow with PKCE と同様に、code_challengeまたはcode_challenge_methodを URL に渡すこともできます。 - ユーザーは同意画面で接続を行い、その接続に必要な権限を認可します。
- ユーザーが接続を正常に認可すると、外部プロバイダーはユーザーを My Account API にリダイレクトし、My Account API は単回使用の
connect_codeを含むredirect_uriを使ってユーザーをクライアントアプリケーションにリダイレクトします。 - クライアントアプリケーションは、
/me/v1/connected-accounts/completeエンドポイントにPOSTリクエストを送信して、connect_code、code_verifier(該当する場合) 、および元のauth_sessionを My Account API に提示します。詳しくは、Connected Accounts リクエストを完了するを参照してください。 - My Account API は、次の点を確認してリクエストを検証します。
auth_sessionが、そのユーザーに対して元々発行された ID と一致すること- リクエストが Connected Accounts フローを開始したときと同じデバイスから送信されていること
- DPoP Proof JWT (構成されている場合)
- 単回使用の
connect_code code_verifier(PKCE フローを使用している場合)
- 検証に成功すると、Auth0 認可サーバーはユーザープロファイルの
connected_accounts配列にアカウントを追加し、接続済みアカウントのアクセストークンとリフレッシュトークンを Token Vault に保存します。 - My Account API は、アカウントが正常に接続されたことを示す
200ステータスコードをクライアントアプリケーションに返して、フローを完了します。
前提条件
- 各接続済みアカウントに関連付けられたアクセストークンとリフレッシュトークンを Token Vault に安全に保存できるよう、クライアントアプリケーションの Token Vault を設定 します。
- 認証済みユーザーがアカウントの接続と管理に使用する My Account API を設定 します。
- My Account API のアクセストークンを取得できるよう、Multi-Resource Refresh Token (MRRT) を設定 します。
- (任意) アクセストークンに sender constraint を適用してトークンの盗難を防ぐため、My Account API とクライアントアプリケーションの DPoP を設定 します。My Account API は、デフォルトで DPoP にバインドされたアクセストークンを受け入れることができます。
My Account API を設定する
- Applications > APIs に移動し、My Account API を有効化します。
- 有効化したら、Auth0 My Account API を選択し、Application Access タブを開きます。
- 対象のクライアントアプリケーションを見つけて Edit を選択し、アプリケーションアクセスポリシーを設定します。
- User Access を選択し、Authorization で Authorized を選択します。
- 権限については、そのアプリケーションに対して Connected Accounts スコープ を All で選択します。
- Save を選択します。これにより、クライアントアプリケーションがユーザーに代わって Connected Accounts のスコープで My Account API にアクセスできるようにするクライアントグラントが作成されます。
- Multi-Resource Refresh Token を使用している場合は、Settings タブに移動します。Access Settings で Allow Skipping User Consent を選択します。
Multi-Resource Refresh Token を設定する
- Auth0 Dashboard
- Management API
Auth0 Dashboard で MRRT を設定するには、次の手順に従います。
- Applications > Applications に移動し、対象のアプリケーションを選択します。
- Multi-Resource Refresh Token で Edit Configuration を選択します。
- My Account API で MRRT を有効にするには、My Account API をオンにします。
Connected Accounts を設定する
- Authentication > Social Connections または Enterprise Connections に移動し、接続を選択します。
- Applications を選択し、クライアントアプリケーションに対してその接続をオンにします。
- Auth0 Dashboard
- Management API
Auth0 Dashboard を使用して Connected Accounts を設定するには:
- Authentication > Social Connections または Enterprise Connections に移動します。
- Create Connection を選択するか、既存の接続を選択します。
- Purpose で Connected Accounts for Token Vault をオンにします。Purpose の設定によっては、Auth0 Dashboard で
offline_accessを有効にする必要があります。これにより、クライアントアプリケーションは Connected Accounts フロー中に外部プロバイダーからリフレッシュトークンを取得できるようになります。詳しくは、ユーザー認証と Connected Accounts の違い を参照してください。 - Save をクリックします。
Connected Accounts のアクセストークンを取得する
リフレッシュトークンを取得する
offline_scope と、My Account API 識別子 https://{yourDomain}/me/ に対する使い捨ての認可コードを含む、コンフィデンシャルクライアント向けの認可コードフローリクエストです。
/token エンドポイントでリフレッシュトークンに交換します。
リフレッシュトークンを My Account API のアクセストークンに交換する
Connected Accounts リクエストを開始する
/me/v1/connected-accounts/connect エンドポイントに POST リクエストを送信します。
Google のソーシャル接続では、接続の設定時に Auth0 Dashboard で
offline_access を選択していることを確認してください。これは、クライアントアプリケーションが Auth0 認可サーバーからリフレッシュトークンを取得するために必要です。| パラメーター | 説明 |
|---|---|
connection | 接続の名前です。Google のソーシャル接続の場合は、google-oauth2 に設定します。 |
redirect_uri | クライアントアプリケーションのコールバック URL です。 |
state | 攻撃を防ぐために、リクエストに関連付ける一意のランダム文字列です。 |
scopes | (省略可能) 文字列の配列として外部プロバイダーに渡すスコープです。 Google のソーシャル接続にスコープを渡す場合は、少なくとも openid と profile を含めてください。実行時には、接続で必要とされ、かつ Auth0 Dashboard で有効になっている offline_access を除き、scopes パラメーターに含まれるスコープが Auth0 Dashboard で選択したスコープより優先されます。 |
| Parameter | Description |
|---|---|
auth_session | プライマリユーザーの現在の認証済みセッションを表すセッション ID。クライアントアプリケーションは、後で検証できるようにこのセッション ID を保存します。 |
connect_uri | クライアントアプリケーションがユーザーをリダイレクトする URL。この URL を開くと、外部プロバイダーでの認可を処理するためのウェブブラウザーが起動します。 |
connect_params | connect_uri に必要な追加パラメーター。My Account API がリクエストの検証に使用する一時チケットが含まれます。 |
expires_in | セッションの有効期限 (秒単位) 。 |
ticket をクエリパラメーターとして指定した connect_uri にアクセスします。同意画面でスコープの一覧を承認し、URL フラグメントから connect_code を抽出して保存します。
Connected Accounts リクエストを完了する
/me/v1/connected-accounts/complete エンドポイントに POST リクエストを送信します。
| Parameter | Description |
|---|---|
auth_session | プライマリユーザーの現在の認証済みセッションを表すセッション ID。クライアントアプリケーションは、後で検証できるようにこのセッション ID を保存します。 |
connect_code | 外部プロバイダーの認可フローで受け取る、使い捨てで短時間のみ有効な code。この code は、外部 API の最終的なアクセストークンを取得するために、サーバー側で安全に引き換えられます。 |
redirect_uri | 外部プロバイダーとの接続の認可が正常に完了した後にユーザーがリダイレクトされる、アプリケーションの正確なコールバック URL。この値は、フローの開始時に使用した redirect_uri と一致している必要があります。 |
| Parameter | Description |
|---|---|
id | 接続済みアカウントの一意の識別子。 |
connection | 接続の名前。 |
created_at | 接続済みアカウントが作成され、ユーザープロファイルにリンクされた日時を示すタイムスタンプ。 |
scopes | 外部プロバイダーへの接続時に、ユーザーがアプリケーションに付与した OAuth スコープ (権限) 。これらのスコープによって、アプリケーションが実行できる外部 API の操作が決まります。 |
access_type | 付与されたアクセスの種類を示します。一般的な値は offline で、これはリフレッシュトークンが正常に取得されて保存され、ユーザーがオフラインのときでもアプリケーションがアクセスを維持できることを意味します。 |
接続済みアカウントの管理
/me/v1/connected-accounts コレクションを使用します。
/connected-accounts コレクションを使用する前に、接続済みアカウント用のアクセストークンを取得してください。
接続済みアカウントの接続を照会する
/me/v1/connected-accounts/connections エンドポイントに GET リクエストを送信します:
接続済みアカウントを照会する
/me/v1/connected-accounts/accounts エンドポイントに GET リクエストを送信します。
/users/{userId}/connected-accounts エンドポイントに GET リクエストを送信すると、ユーザープロファイルに紐付けられたアカウントの一覧を取得することもできます。
指定した接続の接続済みアカウントを照会する
GET リクエストを /me/v1/connected-accounts/accounts エンドポイントに送信し、クエリパラメーターとして接続名を指定すると、ユーザープロファイルに関連付けられた指定の接続でフィルタリングされた接続済みアカウントの一覧が返されます。
google-oauth2 接続で絞り込まれた、次のようなレスポンスを返します。
接続済みアカウントを削除
/me/v1/connected-accounts/accounts/{connectedAccountId} エンドポイントに DELETE リクエストを実行します。