Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Linked App Token

最終更新 Markdown で表示Agent セットアップ

Linked App Token ポリシーセレクターを使うと、あるアプリケーションの Access ポリシーで、別のアプリケーション向けに発行されたトークンを受け入れられます。あるアプリケーションがユーザーの代わりに、別のアプリケーションへ認証済みリクエストを送るときに便利です。たとえば、MCP サーバーが社内 API を呼び出す場合や、マイクロサービスがユーザー ID をダウンストリームサービスへ転送する場合です。

Linked App Token は次の 2 つのフローに対応しています。

セルフホストからセルフホスト

このフローでは、Application A は セルフホスト Access アプリケーション で、別のセルフホスト Access アプリケーションである Application B へリクエストを送ります。ユーザーが Application A に認証すると、Cloudflare Access はユーザーの JWT を Cf-Access-Jwt-Assertion ヘッダーで Application A に送ります。Application A はそのトークンを Cf-Access-Token ヘッダーで Application B へ転送できます。Access は Application B のポリシーにある Linked App Token ルールに対してトークンを検証し、トークンが Application A 向けに発行されていればリクエストを許可します。

flowchart LR
accTitle: セルフホストからセルフホストへの Linked App Token フロー
    User[ユーザー] --> appA["Application A <br> (セルフホスト)"]
    appA -- "Cf-Access-Token: &lt;JWT&gt;" --> appB["Application B <br> (セルフホスト)"]
    idp[ID プロバイダー] <--> appA

前提条件

1. Linked App Token ポリシーを作成する

転送されたリクエストを受け取るダウンストリームアプリケーション(Application B)にポリシーを作成します。

  1. Cloudflare ダッシュボード で、Zero Trust > Access controls > Applications を開きます。

  2. Application B を選び、Edit を選びます。

  3. Policies タブを開き、Create new policy を選びます。

  4. ポリシーの ActionService Auth に設定します。

  5. SelectorLinked App Token を選びます。

  6. Value で Application A を選びます。例:

    アクション ルールタイプ セレクター
    Service Auth Include Linked App Token application-a
  7. ポリシーを保存します。

  8. Application B で、ポリシーを Access policies リストに追加します。

  9. アプリケーションを保存します。

  1. Application A の uid を取得します。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applicationsbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"type": "self_hosted",
    	"name": "application-a",
    	...
    }
  2. ダウンストリームアプリケーションに Access ポリシーを作成し、app_uid の値を Application A の uid に置き換えます。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Write
    Create an Access reusable policybash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "Application A からのリクエストを許可",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. Access JWT を転送する

Cloudflare Access がユーザーを Application A に認証すると、署名済み JWT を Cf-Access-Jwt-Assertion リクエストヘッダーで送ります。Application A はこのトークンを Cf-Access-Token ヘッダーで Application B へ転送する必要があります。

Cf-Access-Token: <JWT from Cf-Access-Jwt-Assertion>

Access が Application B へのリクエストを受け取ると、次の処理を行います。

  1. Cf-Access-Token ヘッダーからトークンを取り出します。
  2. トークンが Application A 向けに発行されたことを検証します(Linked App Token ルールの app_uid と一致すること)。
  3. 有効な場合、Access は Application B の AUD タグにスコープした新しい Cf-Access-Jwt-Assertion を発行し、Application B のオリジンへ転送します。監査ログでは、リクエストは元のユーザーに紐づけられます。

SaaS からセルフホスト

この例では、Access for SaaS アプリケーションOAuth を実装する MCP サーバーなど)が、セルフホスト Access アプリケーションへリクエストを送ります。SaaS アプリは Cloudflare Access から OAuth のアクセストークンを取得し、Authorization: Bearer ヘッダーでセルフホストアプリケーションへ送ります。

flowchart LR
accTitle: SaaS からセルフホストへの Linked App Token フロー
    User[ユーザー] --> appA["Application A <br> (Access for SaaS)"]
    appA -- "Authorization: Bearer &lt;token&gt;" --> appB["Application B <br> (セルフホスト)"]
    idp[ID プロバイダー] <--> appA

前提条件

1. Linked App Token ポリシーを作成する

セルフホストアプリケーション(Application B)にポリシーを作成します。

  1. Cloudflare ダッシュボード で、Zero Trust > Access controls > Applications を開きます。

  2. セルフホストアプリ(Application B) を選び、Edit を選びます。

  3. Policies タブを開き、Create new policy を選びます。

  4. ポリシーの ActionService Auth に設定します。

  5. SelectorLinked App Token を選びます。

  6. Value で Access for SaaS アプリ(Application A) を選びます。例:

    アクション ルールタイプ セレクター
    Service Auth Include Linked App Token application-a
  7. ポリシーを保存します。

  8. セルフホストアプリ(Application B) で、ポリシーを Access policies リストに追加します。

  9. アプリケーションを保存します。

  1. Access for SaaS アプリ(Application A) の uid を取得します。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applicationsbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"type": "saas",
    	"name": "my-saas-app",
    	...
    }
  2. ダウンストリームアプリケーションに Access ポリシーを作成し、app_uid の値を Access for SaaS アプリ(Application A) の uid に置き換えます。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Write
    Create an Access reusable policybash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "SaaS アプリからのリクエストを許可",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. トークン転送を設定する

SaaS アプリケーションは、OAuth の access_token を HTTP ヘッダーでセルフホストアプリケーションへ転送する必要があります。

Authorization: Bearer ACCESS_TOKEN

エンドツーエンドの流れは次のとおりです。

  1. ユーザーは OAuth 経由で Access for SaaS アプリに対して認証します。
  2. 成功すると、アプリケーションは access_token を受け取ります。
  3. アプリケーションは、Authorization: Bearer ヘッダーにトークンを付けてセルフホストアプリケーションへリクエストを送ります。
  4. Cloudflare Access はトークンを検査し、linked_app_token ルールに照合して検証します。有効ならリクエストを許可します。

既知の制限

  • Linked App Token ポリシーは セルフホストアプリケーション にのみ追加できます。SaaS アプリケーション やほかのアプリケーション種類には追加できません。
  • この機能は、認証と ID に Cloudflare Access JWT を使うアプリケーションで最もよく動作します。ダウンストリームアプリケーションが Cloudflare Access のあとに独自の認証層を実装している場合、Access の検証を通過したリクエストでも、アプリケーション側で拒否されることがあります。
  • 上流アプリケーションが Managed OAuth を使う場合、クライアントが受け取るのは JWT ではなく 不透明なアクセストークン です。クライアントはこのトークンを Cf-Access-Token ヘッダーとしてダウンストリームアプリケーションへ直接転送できません。代わりに、上流アプリケーションのオリジンが Cf-Access-Jwt-Assertion ヘッダー(解決済み JWT を含む)を読み取り、Cf-Access-Token としてダウンストリームアプリケーションへ転送する必要があります。プロキシなしでクライアントから複数のエンドポイントへアクセスしたい場合は、代わりに マルチドメイン Access アプリケーション を検討してください。

役に立ちましたか?