メインコンテンツへスキップ
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
フロー/authorize エンドポイントを使用するログインフローMy Account API の /me/v1/connected-accounts エンドポイントを使用する Connected Accounts フロー
目的ソーシャルまたはエンタープライズのアイデンティティ プロバイダーでユーザーを認証するサポート対象の外部プロバイダー経由でユーザーがログインし、接続を行い、その接続を承認した際に、接続済みアカウント用のアクセストークンとリフレッシュトークンを Token Vault に保存する
サポート対象のソーシャルまたはエンタープライズ接続に対しては、ユーザー認証、Connected Accounts、またはその両方を有効にできます。次の表は、各種 Purpose 設定における動作と、接続にスコープを渡す方法を説明します。
AuthenticationConnected Accounts動作スコープ
EnabledDisabledこの接続は /authorize ログインフローを使用して、正当なアイデンティティ プロバイダーとしてユーザーを認証します。Auth0 Dashboard または Management API を使用して、接続に必要なスコープを渡します。実行時には、この一覧に、認可リクエストの connection_scope パラメーターに含まれる追加のスコープが自動的に補完されます。
DisabledEnabledこの接続は Connected Accounts フローを使用して、この接続用のトークンを Token Vault に取得・保存します。この接続は /authorize ログインフローを使用してユーザーを認証せず、有効なアイデンティティ プロバイダーの一覧には含まれません。Auth0 Dashboard または Management API を使用して、接続に必要なスコープを渡します。実行時には、認可リクエストの scopes パラメーターに含まれるスコープが、接続で必要とされ Auth0 Dashboard で有効になっている offline_access を除き、Auth0 Dashboard で選択されたスコープよりも優先されます。

注意: 接続で必要な場合、Auth0 は offline_access を有効化するよう促し、クライアントアプリケーションが Auth0 からリフレッシュトークンを取得できるようにします。Auth0 Dashboard でその接続に対して offline_access を有効にする必要があります。
EnabledEnabledこの接続は /authorize ログインフローを使用して、正当なアイデンティティ プロバイダーとしてユーザーを認証します。また、Connected Accounts フローも使用して、この接続のアクセストークンを Token Vault に取得・保存します。Auth0 Dashboard および Management API を使用して、接続に必要なスコープを渡します。実行時には、scopes パラメーターに含まれるスコープが、接続で必要とされ Auth0 Dashboard で有効になっている offline_access を除き、Auth0 Dashboard で選択されたスコープよりも優先されます。

注意: 接続で必要な場合、Auth0 は offline_access を有効化するよう促し、クライアントアプリケーションが Auth0 からリフレッシュトークンを取得できるようにします。Auth0 Dashboard でその接続に対して offline_access を有効にする必要があります。

仕組み

Connected Accounts フローは、My Account API を使用して、サポート対象の外部プロバイダー間でユーザーの接続済みアカウントを作成および管理します。 ユーザーがクライアント アプリケーションから Connected Accounts リクエストを開始できるようにするには、事前にクライアント アプリケーションで、Connected Accounts 用のスコープを含む アクセストークンを取得 し、My Account API にアクセスできるようにしておく必要があります。 次のシーケンス図は、Connected Accounts フローのエンドツーエンドの流れを示しています。
ユーザーが Auth0 を介してサポート対象の外部プロバイダーでログインすると、クライアント アプリケーションから Connected Accounts リクエストを開始します。
  1. クライアント アプリケーションは、My Account API の /me/v1/connected-accounts エンドポイントに対して POST リクエストを実行し、外部プロバイダーに送信するスコープおよびその他のパラメーターを渡します。詳細は、Connected Accounts リクエストの開始 を参照してください。
  2. My Account API は、一意の auth_session と、ユーザーを Web ブラウザーにリダイレクトする ticket を含む connect_uri を作成します。クライアント アプリケーションは、後で検証するために auth_session を保存します。DPoP が構成されている場合、My Account API は DPoP Proof JWT を検証します。
  3. クライアント アプリケーションは、ブラウザーでのユーザー認証および認可のために、ticket をクエリ パラメーターとして付加した connect_uri にユーザーをリダイレクトします。クライアント アプリケーションは、Authorization Code Flow with PKCE のように、code_challengecode_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 認可サーバーはアカウントをユーザー プロファイル上の connected_accounts 配列に追加し、接続済みアカウントのアクセストークンとリフレッシュトークンを Token Vault に保存します。
  9. My Account API は、アカウントが正常に接続されたことを示す 200 ステータスコードをクライアント アプリケーションに返してフローを完了します。

前提条件

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

My Account API を構成する

Connected Accounts を使用するには、Auth0 Dashboard で My Account API を構成します。
  1. Applications > APIs に移動し、My Account API を有効化します。
  2. 有効化したら、Auth0 My Account API を選択し、Applications タブを開きます。
  3. クライアントアプリケーションのトグルをオンにして、My Account API へのアクセスを許可します。
  4. ドロップダウンメニューから、このアプリケーションに対して Connected Accounts スコープ を選択します。
  5. Update を選択します。これにより、クライアントアプリケーションがユーザーに代わって Connected Accounts スコープ付きで My Account API にアクセスできるようにする クライアントグラント が作成されます。
  6. Multi-Resource Refresh Token を使用している場合は、Settings タブに移動します。Access Settings セクションで Allow Skipping User Consent を選択します。

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

Multi-Resource Refresh Token (MRRT) を設定して、My Account API アクセストークンおよびその他の API 用に、新しいアクセストークンと交換可能な、長期間有効な単一のリフレッシュトークンを取得します。これにより、ユーザーに再認証を要求する必要がなくなります。 MRRT は Auth0 Dashboard または Management API で設定できます。
Auth0 Dashboard で MRRT を設定するには:
  1. Applications > Applications に移動し、対象のアプリケーションを選択します。
  2. Multi-Resource Refresh Token の下で、Edit Configuration を選択します。
  3. My Account API で MRRT を有効にするには、My Account API のトグルをオンにします。

Connected Accounts を構成する

接続に対して Connected Accounts を構成する前に、その接続がクライアントアプリケーションで許可されていることを確認してください。 Auth0 Dashboard で次を実行します。
  1. Authentication > Social Connections または Enterprise Connections に移動し、接続を選択します。
  2. Applications を選択し、クライアントアプリケーション用の接続をトグルで有効にします。
Connected Accounts は Auth0 Dashboard または Management API を使用して構成できます。
Auth0 Dashboard を使用して Connected Accounts を構成するには、次の手順を実行します。
  1. Authentication > Social Connections または Enterprise Connections に移動します。
  2. Create Connection を選択するか、既存の接続を選択します。
  3. PurposeUse for Connected Accounts for Token Vault をトグルで有効にします。Purpose の設定によっては、Connected Accounts フロー中にクライアントアプリケーションが外部プロバイダーからリフレッシュトークンを取得できるように、Auth0 Dashboard で offline_access を有効にする必要があります。詳細については、User authentication vs Connected Accounts を参照してください。
  4. Save をクリックします。

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

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

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

クライアントアプリケーションに対して MRRT を設定 した後、認可コードフローを開始し、その結果として得られる認可コードをリフレッシュトークンと交換します。 次の例は、機密クライアント用の認可コードフローリクエストで、My Account API 識別子 https://{yourDomain}/me/ に対するリフレッシュトークンと一度だけ使用できる認可コードを返すために offline_scope を含めたものです。
open "https://{yourDomain}/authorize?client_id=<CLIENT_ID>&response_type=code&prompt=login&scope=openid%20profile%20offline_access&redirect_uri=<REDIRECT_URI>&state=<STATE>&audience=https://my-example-api.com"
/token エンドポイントで、1回限りの認可コードをリフレッシュトークンに交換します。
curl -s --request POST \
  --url "https://{yourDomain}/oauth/token" \
  --header 'Content-Type: application/json' \
  --data-binary @- <<EOF | jq -r '.refresh_token'
{
  "grant_type": "authorization_code",
  "code": "<CONNECT_CODE>",
  "scope": "openid profile offline_access",
  "client_id": "<CLIENT_ID>",
  "client_secret": "<CLIENT_SECRET>",
  "audience": "https://{yourDomain}/me/",
  "redirect_uri": "<REDIRECT_URI>"
}
EOF

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

リフレッシュトークンを取得したら、refresh_token グラントタイプを使用して、Connected Accounts のスコープを持つ My Account API のアクセストークンに交換します。
curl -s -X POST "https://{yourDomain}/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=refresh_token" \
  --data-urlencode "client_id=<CLIENT_ID>" \
  --data-urlencode "client_secret=<CLIENT_SECRET>" \
  --data-urlencode "refresh_token=<REFRESH_TOKEN>" \
  --data-urlencode "audience=https://{yourDomain}/me/" \
  --data-urlencode "scope=openid profile offline_access create:me:connected_accounts read:me:connected_accounts delete:me:connected_accounts"

Connected Accounts リクエストの開始

Connected Accounts リクエストを開始するには、My Account API の /me/v1/connected-accounts/connect エンドポイントに対して、以下のパラメーターを指定して POST リクエストを送信します。
Google ソーシャル接続の場合、接続を設定する際に Auth0 Dashboard で offline_access を必ず選択してください。これは、クライアントアプリケーションが Auth0 認可サーバーからリフレッシュトークンを取得するために必要です。
パラメーター説明
connection接続の名前。Google ソーシャル接続の場合は、google-oauth2 を指定します。
redirect_uriクライアントアプリケーションのコールバック URL。
state攻撃を防ぐためにリクエストに関連付けられた、一意のランダムな文字列。
scopes(任意) 外部プロバイダーに文字列の配列として渡されるスコープ。

Google ソーシャル接続のスコープを渡すために使用する場合は、最低でも openidprofile を含めてください。実行時には、scopes パラメーターに含まれるスコープが、接続で必要とされ Auth0 Dashboard で有効化されている場合の offline_access を除き、Auth0 Dashboard で選択されたスコープより優先されます。
curl --request POST "https://{yourDomain}/me/v1/connected-accounts/connect" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <MY_ACCOUNT_API_TOKEN>" \
--data '{
    "connection": "google-oauth2",
    "redirect_uri": "<REDIRECT_URI>",
    "state": "<STATE>",
    "scopes": ["openid","profile"] // 渡されたスコープは Auth0 Dashboard で選択したスコープを上書きします
}'
成功すると、My Account API は次のようなレスポンスを返します。
ParameterDescription
auth_sessionプライマリーユーザーの現在の認証済みセッションを表すセッション ID。クライアントアプリケーションは、後で検証するためにこのセッション ID を保存します。
connect_uriクライアントアプリケーションがユーザーをリダイレクトする URL。外部プロバイダーとの認可を処理するために Web ブラウザーを開きます。
connect_paramsconnect URI に必要な追加パラメーター。My Account API がリクエストを検証するために使用する一時チケットを含みます。
expires_inセッションの有効期限(秒)。
{
  "auth_session": "PKM-CYkdx2FyLb4Oob4ED91cSE7i_XJ4SVJByik0xKQxz9CgUZ5JlYr-aMPty0Xr",
  "connect_uri": "https://{yourDomain}.us.auth0.com/connect",
  "connect_params": {
    "ticket": "9375f326-5846-4b57-ae8b-8042573f7c1f"
  },
  "expires_in": 300
}
Webブラウザーで、クエリパラメーターとして ticket を付与した connect_uri にアクセスします。コンセント画面で表示されるスコープ一覧を承認し、URLフラグメントに含まれる connect_code を抽出して保存します。
open https://{yourDomain}.us.auth0.com/connected-accounts/connect?ticket={tickedId}

Connected Accounts リクエストの完了

Connected Accounts リクエストを完了するには、次のパラメーターを指定して /me/v1/connected-accounts/complete エンドポイントに POST リクエストを送信します。
パラメーター説明
auth_sessionプライマリーユーザーの現在の認証済みセッションを表すセッション ID です。クライアントアプリケーションは、このセッション ID を後で検証するために保存します。
connect_code外部プロバイダーの認可プロセスから受け取る、1 回限り・短時間のみ有効なコードです。このコードは、外部 API 用の最終的なアクセストークンを取得するために、サーバー側で安全に交換されます。
redirect_uri外部プロバイダーとの接続を正常に認可した後にユーザーが送られた、アプリケーションの正確なコールバック URL です。この値は、フローを開始する際に使用した redirect_uri と一致している必要があります。
curl --location "https://{yourDomain}/me/v1/connected-accounts/complete" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <MY_ACCOUNT_API_TOKEN>" \
--data '{
    "auth_session": "<AUTH_SESSION>",
    "connect_code": "<CONNECT_CODE>",
    "redirect_uri": "<REDIRECT_URI>"
}'
If successful, the My Account API returns a response like the following:
パラメーター説明
id接続済みアカウントの一意の識別子。
connection接続の名前。
created_at接続済みアカウントが作成され、ユーザープロファイルにリンクされた日時。
scopesユーザーが外部プロバイダーへの接続時に、アプリケーションへのアクセスを許可した特定の OAuth スコープ(権限)。これらのスコープによって、アプリケーションが外部 API に対して実行できるアクションが決まります。
access_type付与されたアクセスの種類を示します。一般的な値は offline で、これはリフレッシュトークンが正常に取得および保存されており、ユーザーがオフラインの場合でもアプリケーションがアクセスを維持できることを意味します。
{
  "id": "cac_6ZqSK7Kj1R8LDZJvSb1tAn",
  "connection": "google-oauth2",
  "created_at": "2025-10-13T21:09:04.126Z",
  "scopes": [
    "https://www.googleapis.com/auth/calendar",
    "https://www.googleapis.com/auth/calendar.addons.execute",
    "https://www.googleapis.com/auth/calendar.events",
    "https://www.googleapis.com/auth/calendar.events.readonly",
    "https://www.googleapis.com/auth/calendar.settings.readonly",
    "https://www.googleapis.com/auth/userinfo.profile",
    "openid"
  ],
  "access_type": "offline"
}

連携アカウントを管理する

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

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

/me/v1/connected-accounts/connections エンドポイントに GET リクエストを送信して、ユーザープロファイルにリンクされている接続の一覧を取得します。
curl -X GET --location "https://{yourDomain}/me/v1/connected-accounts/connections" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <MY_ACCOUNT_API_TOKEN>"
成功すると、My Accounts API は次のようなレスポンスを返します。
{
  "connections": [
    {
      "name": "google-oauth2",
      "strategy": "google-oauth2",
      "scopes": [
        "email",
        "profile",
        "https://www.googleapis.com/auth/calendar",
        "https://www.googleapis.com/auth/calendar.events",
        "https://www.googleapis.com/auth/calendar.addons.execute",
        "https://www.googleapis.com/auth/calendar.events.readonly",
        "https://www.googleapis.com/auth/calendar.settings.readonly",
        "openid"
      ]
    },
    {
      "name": "custom",
      "strategy": "oauth2",
      "scopes": [
        "openid"
      ]
    }
  ]
}

接続済みアカウントをクエリする

/me/v1/connected-accounts/accounts エンドポイントに GET リクエストを送信して、ユーザー プロファイルにリンクされた接続済みアカウントの一覧を取得します。
curl -X GET --location "https://{yourDomain}/me/v1/connected-accounts/accounts" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <MY_ACCOUNT_API_TOKEN>"
リクエストが成功すると、My Accounts API は次のようなレスポンスを返します。
{
  "accounts": [
    {
      "id": "cac_6ZqSK7Kj1R8LDZJvSb1tAn",
      "connection": "google-oauth2",
      "access_type": "offline",
      "scopes": [
        "https://www.googleapis.com/auth/calendar",
        "https://www.googleapis.com/auth/calendar.addons.execute",
        "https://www.googleapis.com/auth/calendar.events",
        "https://www.googleapis.com/auth/calendar.events.readonly",
        "https://www.googleapis.com/auth/calendar.settings.readonly",
        "https://www.googleapis.com/auth/userinfo.profile",
        "openid"
      ],
      "created_at": "2025-10-13T21:09:04.126Z"
    },
    {
      "id": "cac_fH32E6CWN7HcWZN5w9Vieq",
      "connection": "custom",
      "access_type": "offline",
      "scopes": [
        "offline_access",
        "openid",
        "profile"
      ],
      "created_at": "2025-10-13T18:06:47.216Z"
    }
  ]
}
Management API を使用して、GET リクエストを /users/{userId}/connected-accounts エンドポイントに送信すると、ユーザープロファイルの接続済みアカウント一覧を取得することもできます。
curl -X GET --location "https://{yourDomain}/api/v2/users/{userId}/connected-accounts" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>"
成功すると、Management APIは次のようなレスポンスを返します。
{
  "connected_accounts": [
    {
      "id": "cac_6ZqSK7Kj1R8LDZJvSb1tAn",
      "connection": "google-oauth2",
      "connection_id": "con_uBbSbbSpqGqOTvRu",
      "strategy": "google-oauth2",
      "access_type": "offline",
      "scopes": [
        "https://www.googleapis.com/auth/calendar",
        "https://www.googleapis.com/auth/calendar.addons.execute",
        "https://www.googleapis.com/auth/calendar.events",
        "https://www.googleapis.com/auth/calendar.events.readonly",
        "https://www.googleapis.com/auth/calendar.settings.readonly",
        "https://www.googleapis.com/auth/userinfo.profile",
        "openid"
      ],
      "created_at": "2025-10-13T21:09:04.126Z"
    }
  ]
}

特定の接続に対する接続済みアカウントのクエリ

/me/v1/connected-accounts/accounts エンドポイントに GET リクエストを送信し、クエリパラメータとして接続名を指定して、ユーザープロファイルにリンクされている接続済みアカウントのうち、指定した接続に属するものだけの一覧を取得します。
curl -X GET --location "https://{yourDomain}/me/v1/connected-accounts/accounts?connection={connectionName}" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <MY_ACCOUNT_API_TOKEN>"
成功すると、My Accounts API は google-oauth2 接続でフィルタリングされた次のようなレスポンスを返します。
{
  "accounts": [
    {
      "id": "cac_6ZqSK7Kj1R8LDZJvSb1tAn",
      "connection": "google-oauth2",
      "access_type": "offline",
      "scopes": [
        "https://www.googleapis.com/auth/calendar",
        "https://www.googleapis.com/auth/calendar.addons.execute",
        "https://www.googleapis.com/auth/calendar.events",
        "https://www.googleapis.com/auth/calendar.events.readonly",
        "https://www.googleapis.com/auth/calendar.settings.readonly",
        "https://www.googleapis.com/auth/userinfo.profile",
        "openid"
      ],
      "created_at": "2025-10-13T21:09:04.126Z"
    }
  ]
}

連携済みアカウントを削除する

指定した ID の連携済みアカウントを削除するには、DELETE リクエストを /me/v1/connected-accounts/accounts/{connectedAccountId} エンドポイントに送信します。
curl -X DELETE --location "https://{yourDomain}/me/v1/connected-accounts/accounts/{connectedAccountId}" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <MY_ACCOUNT_API_TOKEN>"
接続済みアカウントを削除すると、Auth0 は Token Vault から外部プロバイダーのアクセストークンとリフレッシュトークンを削除します。これは外部プロバイダー側のトークンを自動的に失効させるものではなく、リフレッシュトークンは引き続き新しいアクセストークンの取得に使用できる可能性があります。トークンが共有されていたり他の場所にコピーされている場合は、外部プロバイダー側でトークンを手動で失効させる必要があります。 成功すると、My Accounts API は次のようなレスポンスを返します。
HTTP/1.1 204 No Content