Skip to main content
Connected Accounts for Token Vault を使用すると、アプリケーションは Token Vault を通じて、ユーザーに代わって外部 API に安全にアクセスできます。標準的なユーザー認証では、ソーシャルまたはエンタープライズのアイデンティティプロバイダー経由でユーザーのログインを処理しますが、Connected Accounts ではユーザープロファイルを Google、GitHub、Slack などの外部サービスにリンクし、ユーザーに代わって外部 API への委任アクセスを可能にします。 ユーザーが サポート対象の外部プロバイダー への接続とアクセスの認可を正常に完了すると、Auth0 は次の処理を行います。
  • そのアカウントを接続済みアカウントとしてユーザーに関連付けます。
  • 接続済みアカウントについて、外部プロバイダーのアクセストークンとリフレッシュトークンを Token Vault に保存します。
Connected Accounts for Token Vault は、複数の外部アカウントにリンクされた統合的な Auth0 ユーザープロファイルを作成および管理し、シームレスな認可を実現します。その後、アプリケーションは Token Vault に保存された資格情報を取得し、ユーザーに代わって外部 API を利用します。

ユーザー認証と Connected Accounts の違い

サポート対象のソーシャル接続またはエンタープライズ接続に対して Connected Accounts を設定すると、Auth0 はソーシャルまたはエンタープライズのログインフロー (/authorize エンドポイント) ではなく、Connected Accounts フロー (/me/v1/connected-accounts エンドポイント) を使用して、アクセストークンとリフレッシュトークンを Token Vault に取得・保存します。Connected Accounts フローが正常に完了すると、Auth0 はそのユーザーアカウントをユーザープロファイルの connected_accounts 配列に追加します。一方、ソーシャルまたはエンタープライズのログインフローでは、Auth0 はそのユーザーアカウントをユーザープロファイルの identities 配列に追加します。 次の表は、ユーザー認証フローと Connected Accounts フローの違いを示しています。 サポート対象のソーシャル接続またはエンタープライズ接続では、ユーザー認証、Connected Accounts、またはその両方を有効にできます。次の表では、接続に スコープ を渡す方法も含めて、目的設定ごとの動作を説明します。

仕組み

Connected Accounts フローは、My Account API を使用して、対応している外部プロバイダーにまたがるユーザーの接続済みアカウントを作成・管理します。 ユーザーがクライアントアプリケーションから Connected Accounts リクエストを開始する前に、クライアントアプリケーションは My Account API にアクセスするため、Connected Accounts のスコープを含むアクセストークンを取得しておく必要があります。
アプリケーションで Organizations を使用している場合は、Connected Accounts フローを開始する前に、対象の組織でユーザーを認証してください。Token Vault は接続済みアカウントをユーザーの Auth0 プロファイルに保存するため、組織の各メンバーが自分の外部アカウントを接続し、認可する必要があります。
次のシーケンス図は、Connected Accounts フロー全体の流れを示しています。
ユーザーが Auth0 経由でサポート対象の外部プロバイダーにログインすると、クライアントアプリケーションから Connected Accounts リクエストを開始します。
  1. クライアントアプリケーションは、外部プロバイダーに送信するスコープやその他のパラメータを渡して、My Account API の /me/v1/connected-accounts/connect エンドポイントに POST リクエストを送信します。詳しくは、Connected Accounts リクエストを開始するを参照してください。
  2. My Account API は、一意の auth_session と、ユーザーをウェブブラウザーにリダイレクトするための ticket を含む connect_uri を作成します。クライアントアプリケーションは、後で検証するために auth_session を保存します。DPoP が設定されている場合、My Account API は DPoP Proof JWT を検証します。
  3. クライアントアプリケーションは、ブラウザーでユーザーの認証と認可を行うため、ticket をクエリパラメータとして含む connect_uri にユーザーをリダイレクトします。クライアントアプリケーションは、PKCE を使用した Authorization Code フロー と同様に、code_challenge または code_challenge_method を URL に渡すこともできます。
  4. ユーザーは同意画面で、接続に必要な権限を確認し、認可します。
  5. ユーザーが接続を正常に認可すると、外部プロバイダーはユーザーを My Account API にリダイレクトし、My Account API は単一使用の connect_code を含む redirect_uri を使って、さらにユーザーをクライアントアプリケーションにリダイレクトします。
  6. クライアントアプリケーションは、/me/v1/connected-accounts/complete エンドポイントに POST リクエストを送信して、connect_codecode_verifier (該当する場合) 、および元の auth_session を My Account API に提示します。詳しくは、Connected Accounts リクエストを完了するを参照してください。
  7. My Account API は、次を確認してリクエストを検証します。
    • auth_session が、そのユーザーに対して元々発行された ID と一致すること
    • リクエストが、Connected Accounts フローを開始したのと同じデバイスから送信されていること
    • DPoP Proof JWT (設定されている場合)
    • 単一使用の connect_code
    • code_verifier (PKCE フローを使用している場合)
  8. 検証が成功すると、Auth0 Authorization Server はアカウントをユーザープロファイルの connected_accounts 配列に追加し、接続済みアカウントのアクセストークンとリフレッシュトークンを Token Vault に保存します。
  9. My Account API は、アカウントが正常に接続されたことを示す 200 ステータスコードをクライアントアプリケーションに返し、フローを完了します。

前提条件

Connected Accounts を設定する前に、次の設定が完了していることを確認してください。
  • 各接続済みアカウントに関連付けられたアクセストークンとリフレッシュトークンを Token Vault に安全に保存できるよう、クライアントアプリケーションに対して Configure Token Vault を行います。
  • 認証済みユーザーがアカウントを接続および管理するために使用する Configure the My Account API を行います。
  • My Account API 用のアクセストークンを取得するため、Configure Multi-Resource Refresh Token (MRRT) を行います。
  • (任意) My Account API とクライアントアプリケーションに対して Configure DPoP を行い、アクセストークンに送信者制約を適用してトークンの盗難を防止します。デフォルトでは、My Account API は DPoP にバインドされたアクセストークンを受け入れることができます。

My Account API を設定する

Connected Accounts を使用するには、Auth0 Dashboard で My Account API を設定します。
  1. アプリケーション > APIs に移動し、My Account API を有効化するを選択します。
  2. 有効化したら、Auth0 My Account API を選択し、続いて Application Access タブを選択します。
  3. 対象のクライアントアプリケーションを見つけて Edit を選択し、そのアプリケーションのアクセスポリシーを設定します。
  4. User Access を選択し、AuthorizationAuthorized を選択します。
  5. 権限については、そのアプリケーションに Connected Accounts のスコープAll で選択します。
  6. Save を選択します。これにより、クライアントアプリケーションがユーザーに代わって Connected Accounts のスコープで My Account API にアクセスできるようにするクライアントグラントが作成されます。
  7. Multi-Resource Refresh Token を使用している場合は、設定 タブに移動します。Access SettingsAllow Skipping User Consent を選択します。

マルチリソース リフレッシュトークンを設定する

マルチリソース リフレッシュトークン (MRRT) を設定すると、ユーザーが再度認証しなくても、新しい My Account API のアクセストークンや他の API 用のアクセストークンと交換できる、単一の長期間有効なリフレッシュトークンを取得できます。 MRRT は、Auth0 Dashboard または Management API で設定できます。
Auth0 Dashboard で MRRT を設定するには、次の手順を実行します。
  1. アプリケーション > アプリケーション に移動し、対象のアプリケーションを選択します。
  2. Multi-Resource Refresh TokenEdit Configuration を選択します。
  3. My Account API で MRRT を有効にするには、My Account API をオンにします。

Connected Accounts を設定する

接続に Connected Accounts を設定する前に、その接続がクライアントアプリケーションで認可されていることを確認してください。 Auth0 Dashboard では、次のように操作します。
  1. Authentication > Social Connections または Enterprise Connections に移動し、接続を選択します。
  2. アプリケーション を選択し、クライアントアプリケーションに対してその接続をオンにします。
Connected Accounts は、Auth0 Dashboard または Management API で設定できます。
Auth0 Dashboard で Connected Accounts を設定するには:
  1. Authentication > Social Connections または Enterprise Connections に移動します。
  2. Create Connection を選択するか、既存の接続を選択します。
  3. PurposeConnected Accounts for Token Vault をオンにします。Purpose の設定によっては、Auth0 Dashboard で offline_access を有効にする必要があります。これにより、クライアントアプリケーションは Connected Accounts フロー中に外部プロバイダーからリフレッシュトークンを取得できるようになります。詳しくは、ユーザー認証と Connected Accounts の違いを参照してください。
  4. Save をクリックします。

Connected Accounts のアクセストークンを取得する

Connected Accounts のリクエストを開始する前に、Connected Accounts のスコープが付与された My Account API のアクセストークンを取得します。 以下のセクションでは、Multi-Resource Refresh Token (MRRT) を使用して、My Account API のアクセストークンを取得する方法を説明します。

リフレッシュトークンを取得する

クライアントアプリケーションで MRRT を設定した後、認可コードフローを開始し、取得した認可コードをリフレッシュトークンに交換します。 以下は、My Account API の API 識別子 https://{yourDomain}/me/ に対して、リフレッシュトークンを返すための offline_scope と、1 回限り使用できる認可コードを含む、機密クライアント向けの認可コードフローのリクエストです。
/tokenエンドポイントで、1回限りの認可コードをリフレッシュトークンに交換します:

リフレッシュトークンを My Account API のアクセストークンに交換する

リフレッシュトークンを取得したら、リフレッシュトークンのグラントタイプを使用して、Connected Accounts のスコープを持つ My Account API のアクセストークンに交換します。

Connected Accounts リクエストを開始する

Connected Accounts リクエストを開始するには、次のパラメーターを指定して、My Account API の /me/v1/connected-accounts/connect エンドポイントに POST リクエストを送信します。
Google のソーシャル接続を使用する場合は、接続の設定時に Auth0 Dashboard で offline_access を選択していることを確認してください。これは、クライアントアプリケーションが Auth0 Authorization Server からリフレッシュトークンを取得するために必要です。
成功すると、My Account API は次のようなレスポンスを返します。
Webブラウザーで、ticket をクエリパラメータとして付与した connect_uri にアクセスします。同意画面でスコープの一覧を承認したら、URL フラグメントから connect_code を取り出して保存します。

Connected Accounts リクエストの完了

Connected Accounts リクエストを完了するには、以下のパラメーターを指定して /me/v1/connected-accounts/complete エンドポイントに POST リクエストを送信します。
成功すると、My Account API は次のようなレスポンスを返します。

Connected Accounts の管理

ユーザーの接続済みアカウントを管理するには、/me/v1/connected-accounts コレクションを使用します。 /connected-accounts コレクションを使用する前に、Connected Accounts 用のアクセストークンを取得するを参照してください。

Connected Accounts の接続を照会する

ユーザープロファイルにリンクされている接続の一覧を取得するには、/me/v1/connected-accounts/connections エンドポイントに GET リクエストを送信します。
成功した場合、My Accounts API は次のようなレスポンスを返します。

接続済みアカウントを取得する

ユーザープロファイルにリンクされた接続済みアカウントの一覧を取得するには、/me/v1/connected-accounts/accounts エンドポイントに GET リクエストを送信します。
成功すると、My Accounts APIは次のようなレスポンスを返します。
また、Management API を使用して、/users/{userId}/connected-accounts エンドポイントに GET リクエストを送信することで、ユーザープロファイルの接続済みアカウントの一覧を取得することもできます。
成功すると、Management API から次のようなレスポンスが返されます。

特定の接続の接続済みアカウントを取得する

GET リクエストを /me/v1/connected-accounts/accounts エンドポイントに送信し、接続名をクエリパラメータとして渡すと、ユーザープロファイルにリンクされている、指定した接続で絞り込まれた接続済みアカウントの一覧を取得できます。
成功すると、My Accounts API は次のようなレスポンスを返します。これは google-oauth2 の接続でフィルタリングされたものです。

接続済みアカウントを削除

指定した ID の接続済みアカウントを削除するには、/me/v1/connected-accounts/accounts/{connectedAccountId} エンドポイントに DELETE リクエストを送信します。
接続済みアカウントを削除すると、Auth0 は外部プロバイダーのアクセストークンとリフレッシュトークンを Token Vault から削除します。ただし、これによって外部プロバイダーのトークンが自動的に取り消されるわけではなく、リフレッシュトークンを使って新しいアクセストークンを取得できる可能性は残ります。トークンが別の場所で共有またはコピーされている場合は、外部プロバイダーのトークンを手動で取り消す必要があります。 成功すると、My Accounts API は次のようなレスポンスを返します。