← Cloudflare One / cloudflare-one / access-controls / applications
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 : Samostatně hostovaná aplikace předá svůj Access JWT jiné samostatně hostované aplikaci. Jde o nejjednodušší nastavení, které nevyžaduje žádnou další konfiguraci OAuth.
- Ze SaaS na self-hosted : Aplikace Access for SaaS (například MCP server pomocí OAuth) odešle svůj přístupový token OAuth do self-hosted aplikace.
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: <JWT>" --> 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):
-
V Cloudflare dashboard ↗, přejděte na Zero Trust > Řízení přístupu > Aplikace.
-
Vyberte Application B a vyberte Úprava.
-
Přejděte na Zásady kartu a vyberte Vytvořit novou zásadu.
-
Nastavte zásadu Akce na Service Auth.
-
Pro Selektor, vyberte Linked App Token.
-
Pro Hodnota, vyberte Application A. Například,
Akce Typ pravidla Selektor Hodnota Service Auth Include Linked App Token application-a -
Uložte zásadu.
-
V aplikaci B přidejte zásadu do Zásady Access seznamu.
-
Uložte aplikaci.
-
Získejte
uidAplikace A:
Alespoň jeden z následujících oprávnění tokenu je povinné:Požadovaná oprávnění API tokenu
Access: Apps and Policies RevokeAccess: Apps and Policies WriteAccess: Apps and Policies Read
List Access applicationscurl "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", ... } -
Vytvořte zásadu Access pro podřízenou aplikaci a nahraďte
app_uidhodnotu suidAplikace A:
Alespoň jeden z následujících oprávnění tokenu je povinné:Požadovaná oprávnění API tokenu
Access: Apps and Policies Write
Vytvořit opakovaně použitelnou zásadu Accesscurl "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í:
- Extrahujte token z
Cf-Access-Tokenhlavička. - Ověřte, že token byl vydán pro aplikaci A (odpovídající
app_uidv pravidle Linked App Token). - Pokud je platný, Access vydá nový
Cf-Access-Jwt-Assertionomezený 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 <token>" --> 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):
-
V Cloudflare dashboard ↗, přejděte na Zero Trust > Řízení přístupu > Aplikace.
-
Vyberte self-hosted aplikaci (Application B) a vyberte Úprava.
-
Přejděte na Zásady kartu a vyberte Vytvořit novou zásadu.
-
Nastavte zásadu Akce na Service Auth.
-
Pro Selektor, vyberte Linked App Token.
-
Pro Hodnota, vyberte aplikaci Access for SaaS (Application A). Například,
Akce Typ pravidla Selektor Hodnota Service Auth Include Linked App Token application-a -
Uložte zásadu.
-
V self-hosted aplikaci (aplikace B) přidejte zásadu do Zásady Access seznamu.
-
Uložte aplikaci.
-
Získejte
uidaplikace Access for SaaS (Aplikace A):
Alespoň jeden z následujících oprávnění tokenu je povinné:Požadovaná oprávnění API tokenu
Access: Apps and Policies RevokeAccess: Apps and Policies WriteAccess: Apps and Policies Read
List Access applicationscurl "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", ... } -
Vytvořte zásadu Access pro podřízenou aplikaci a nahraďte
app_uidhodnotu suidaplikace Access for SaaS (Aplikace A):
Alespoň jeden z následujících oprávnění tokenu je povinné:Požadovaná oprávnění API tokenu
Access: Apps and Policies Write
Vytvořit opakovaně použitelnou zásadu Accesscurl "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_TOKENPrůběh celého procesu je následující:
- Uživatel se ověří vůči aplikaci Access for SaaS pomocí OAuth.
- V případě úspěchu aplikace obdrží
access_token. - Aplikace odešle požadavek na self-hosted aplikaci s tokenem v
Authorization: Bearerhlavička. - Cloudflare Access zkontroluje token a ověří ho oproti
linked_app_tokenpravidlo. Pokud je platný, je požadavek povolen.
Známá omezení
- Zásadu Linked App Token lze přidat pouze do self-hosted aplikace. Nelze jej přidat do Aplikace SaaS nebo jiné typy aplikací.
- Tato funkce funguje nejlépe s aplikacemi, které se spoléhají na Cloudflare Access JWT pro ověřování a identitu. Pokud navazující aplikace implementuje vlastní vrstvu ověřování za Cloudflare Access, požadavky, které projdou ověřením Access, může aplikace přesto odmítnout.
- Když upstream aplikace používá Managed OAuth, klient obdrží neprůhledný přístupový token, nikoli JWT. Klient nemůže tento token přeposlat přímo navazujícím aplikacím jako
Cf-Access-Tokenhlavičky. Místo toho musí origin upstream aplikace přečístCf-Access-Jwt-Assertionhlavičky (která obsahuje získaný JWT) a přepošlete ji jakoCf-Access-Tokendo navazující aplikace. Pokud chcete, aby klienti přistupovali k více endpointům bez proxy, zvažte použití vícedoménová aplikace Access místo toho.