INTEGRITY Dokumentace

Linked App Token

Linked App Token selektor zásad umožňuje, aby zásada Access na jedné aplikaci přijímala tokeny vydané pro jinou aplikaci. To se hodí, když jedna aplikace potřebuje jménem uživatele odesílat ověřené požadavky jiné aplikaci: například server MCP volající interní API nebo mikroslužba předávající identitu uživatele navazující službě.

Linked App Token podporuje dva toky:

Self-hosted to self-hosted

V tomto postupu je aplikace A self-hosted aplikace Access která potřebuje odesílat požadavky do aplikace B, další samostatně hostované aplikace Access. Když se uživatel ověří u aplikace A, Cloudflare Access odešle JWT uživatele aplikaci A v Cf-Access-Jwt-Assertion hlavičky. Aplikace A pak může tento token přeposlat aplikaci B v Cf-Access-Token hlavičky. Access token ověří podle pravidla Linked App Token v zásadě aplikace B a požadavek povolí, pokud byl token vydán pro aplikaci A.

flowchart LR
accTitle: Self-hosted to self-hosted linked app token flow
    User --> appA["Application A <br> (self-hosted)"]
    appA -- "Cf-Access-Token: &lt;JWT&gt;" --> appB["Application B <br> (self-hosted)"]
    idp[Identity provider] <--> appA

Předpoklady

1. Vytvořte zásadu Linked App Token

Vytvořte zásadu pro aplikaci B (podřízenou aplikaci, která bude přijímat přeposílané požadavky):

  1. V Cloudflare dashboard, přejděte na Zero Trust > Řízení přístupu > Aplikace.

  2. Vyberte Application B a vyberte Úprava.

  3. Přejděte na Zásady kartu a vyberte Vytvořit novou zásadu.

  4. Nastavte zásadu Akce na Service Auth.

  5. Pro Selektor, vyberte Linked App Token.

  6. Pro Hodnota, vyberte Application A. Například,

    Akce Typ pravidla Selektor Hodnota
    Service Auth Include Linked App Token application-a
  7. Uložte zásadu.

  8. V aplikaci B přidejte zásadu do Zásady Access seznamu.

  9. Uložte aplikaci.

  1. Získejte uid Aplikace A:

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applications
    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. Vytvořte zásadu Access pro podřízenou aplikaci a nahraďte app_uid hodnotu s uid Aplikace A:

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • Access: Apps and Policies Write
    Vytvořit opakovaně použitelnou zásadu Access
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "Allow requests from Application A",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. Přepošlete Access JWT

Když Cloudflare Access ověří uživatele pro aplikaci A, odešle podepsaný JWT v Cf-Access-Jwt-Assertion hlavička požadavku. Aplikace A musí tento token předat aplikaci B v Cf-Access-Token hlavičku:

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

Když Access obdrží požadavek na aplikaci B, provede následující:

  1. Extrahujte token z Cf-Access-Token hlavička.
  2. Ověřte, že token byl vydán pro aplikaci A (odpovídající app_uid v pravidle Linked App Token).
  3. Pokud je platný, Access vydá nový Cf-Access-Jwt-Assertion omezený na značku AUD aplikace B, přepošle ho na origin aplikace B a přiřadí požadavek k původnímu uživateli v protokolu auditu.

Ze SaaS na self-hosted

V tomto příkladu Aplikace Access for SaaS (například server MCP, který implementuje OAuth) potřebuje odesílat požadavky na interně hostovanou aplikaci Access. Aplikace SaaS získá od Cloudflare Access přístupový token OAuth a odešle jej interně hostované aplikaci v Authorization: Bearer hlavička.

flowchart LR
accTitle: SaaS to self-hosted linked app token flow
    User --> appA["Application A <br> (Access for SaaS)"]
    appA -- "Authorization: Bearer &lt;token&gt;" --> appB["Application B <br> (self-hosted)"]
    idp[Identity provider] <--> appA

Předpoklady

1. Vytvořte zásadu Linked App Token

Vytvořte zásadu pro Self-hosted aplikaci (aplikaci B):

  1. V Cloudflare dashboard, přejděte na Zero Trust > Řízení přístupu > Aplikace.

  2. Vyberte self-hosted aplikaci (Application B) a vyberte Úprava.

  3. Přejděte na Zásady kartu a vyberte Vytvořit novou zásadu.

  4. Nastavte zásadu Akce na Service Auth.

  5. Pro Selektor, vyberte Linked App Token.

  6. Pro Hodnota, vyberte aplikaci Access for SaaS (Application A). Například,

    Akce Typ pravidla Selektor Hodnota
    Service Auth Include Linked App Token application-a
  7. Uložte zásadu.

  8. V self-hosted aplikaci (aplikace B) přidejte zásadu do Zásady Access seznamu.

  9. Uložte aplikaci.

  1. Získejte uid aplikace Access for SaaS (Aplikace A):

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applications
    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. Vytvořte zásadu Access pro podřízenou aplikaci a nahraďte app_uid hodnotu s uid aplikace Access for SaaS (Aplikace A):

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • Access: Apps and Policies Write
    Vytvořit opakovaně použitelnou zásadu Access
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "Allow requests from SaaS app",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. Nakonfigurujte přeposílání tokenů

Aplikace SaaS musí předat OAuth access_token do vlastní hostované aplikace v hlavičce HTTP:

Authorization: Bearer ACCESS_TOKEN

Průběh celého procesu je následující:

  1. Uživatel se ověří vůči aplikaci Access for SaaS pomocí OAuth.
  2. V případě úspěchu aplikace obdrží access_token.
  3. Aplikace odešle požadavek na self-hosted aplikaci s tokenem v Authorization: Bearer hlavička.
  4. Cloudflare Access zkontroluje token a ověří ho oproti linked_app_token pravidlo. Pokud je platný, je požadavek povolen.

Známá omezení