← Cloudflare API Shield / api-shield / security
Ověřování JSON Web Tokens
JSON Web Tokens (JWT) se často používají jako součást ověřovací komponenty mnoha webových aplikací. Protože JWT hrají klíčovou roli při identifikaci uživatelů a jejich přístupu, je důležité zajistit integritu tokenu.
Ověřování JWT v rámci API Shield kryptograficky ověřuje příchozí JWT dříve, než dorazí k originu vašeho API. Odhalí tokeny, které jsou expirované, pozměněné nebo ještě neplatné. Poté vytvoříte pravidlo, které na výsledek ověření reaguje.
Proces
Ověřování JWT se skládá ze dvou částí: konfigurace tokenu, která Cloudflare říká, jak JWT najít a ověřit, a pravidla, které na základě výsledků ověření provede danou akci.
Po vytvoření konfigurace tokenu Cloudflare u každého požadavku v zóně zkontroluje na nakonfigurovaných místech přítomnost JWT. Jakmile Cloudflare JWT najde, token ověří a ověřené nároky zpřístupní v http.request.jwt.claims pole. Dostupná pole a standardní claims najdete v Pole pro ověřování JWT reference. Nepotřebujete pravidlo ani operaci v Endpoint Management pro ověřování. Pravidla určují, jak Cloudflare na výsledky reaguje.
Přidat konfiguraci ověření tokenu
-
V dashboardu Cloudflare přejděte na Security Settings stránce.
Přejděte na Nastavení ↗ -
Filtrovat podle Zneužití API.
-
Na Konfigurace tokenů, vyberte Konfigurace tokenů.
-
Zadejte název konfigurace.
-
Vyberte, kde má Cloudflare u příchozích požadavků hledat JWT pro tuto konfiguraci, například v hlavičce nebo cookie, a uveďte její název.
-
Zkopírujte a vložte veřejný klíč (klíče) vašeho vystavitele JWT (JWKS).
Každý vystavitel JWT obvykle zveřejňuje veřejné klíče (JWKS) pro ověřování na známé URL adrese na internetu. Pokud nevíte, kde je získat, obraťte se na svého správce identit.
Aby byla vaše JWKS automaticky aktuální, když ji poskytovatel identity obnoví, můžete použít Worker. Více informací najdete v Konfigurace Workers pro automatickou aktualizaci klíčů , kde najdete více informací o nastavení Workeru.
Reagujte na výsledky ověření JWT
Pro nové bezpečnostní zásady Cloudflare obecně doporučuje používat vlastní pravidla WAF.
- WAF custom rules : tyto použijte pro zásady platné pro celou zónu založené na ověřených nárokech JWT. Vlastní pravidla mohou kombinovat nároky s dalšími signály, například skóre útoku. Koncové body nemusí být ve funkci Endpoint Management.
- Pravidla ověřování JWT : tyto použijte, pokud se má vynucování vztahovat jen na konkrétní operace v Endpoint Management. Tato pravidla podporují
is_jwt_valid()ais_jwt_present()funkce, které nejsou ve vlastních pravidlech k dispozici.
Cloudflare ověřuje JWT stejným způsobem bez ohledu na to, jaký typ pravidla zvolíte.
Chcete-li například ve výrazu pravidla odkázat na jednoduchý řetězcový nárok, použijte lookup_json_string() s ID konfigurace tokenu a názvem claimu:
lookup_json_string(http.request.jwt.claims["<TOKEN_CONFIGURATION_ID>"][0], "claim_name")Úplný příklad najdete v Vydat výzvu pro administrátora v nároku (claim) JWT na základě skóre útoku. Přehled všech dostupných polí najdete v Pole pro ověřování JWT reference.
Přidat pravidlo ověření JWT
Pravidla ověřování JWT využívají operace z Endpoint Management k určení, kde Cloudflare uplatní jejich log nebo block jako akci.
-
V dashboardu Cloudflare přejděte na Bezpečnostní pravidla stránce.
Přejděte na Bezpečnostní pravidla ↗ -
V části API JWT validation rules vyberte Vytvořit pravidlo.
-
Zadejte název pravidla.
-
Vyberte hostname, pro který chcete pomocí pravidla chránit požadavky s uloženými koncovými body.
-
Zrušte výběr koncových bodů, které chcete vyloučit z vynucování pravidla ověřování JWT.
-
Vyberte konfiguraci tokenu odpovídající příchozím požadavkům.
-
Vyberte, zda se má na těchto koncových bodech přítomnost tokenu striktně vyžadovat.
- Nemusíte očekávat, že 100% klientů bude se svými požadavky odesílat JWT. V takovém případě zvolte Ignorovat. Ověřování JWT bude i nadále ověřovat JWT, které jsou přítomné.
- Případně můžete očekávat, že všechny požadavky na vybraný hostitel a koncové body budou obsahovat JWT. V takovém případě zvolte Označit jako nevyhovující.
-
Vyberte akci, která se má provést u požadavků nevyhovujících pravidlům. Jde například o JWT, které neprojdou validací (vypršelé, pozměněné nebo tokeny s neplatným podpisem), nebo o požadavky bez JWT, pokud Označit jako nevyhovující byl vybrán v předchozím kroku.
-
Vyberte Save.
Zvláštní případy
Ověření dvou JWT s různými poskytovateli identity v jednom požadavku
Pokud očekáváte, že v požadavku budou přítomny dva různé JWT a chcete ověřit oba, musíte vytvořit dvě samostatné konfigurace tokenu. Při výběru obou konfigurací v ověřovacím pravidle zvolte Ověřit všechny konfigurace v části Chování ověřování u více konfigurací.
Podpořit migraci od jednoho poskytovatele identity k jinému
Pokud plánujete migraci mezi dvěma různými poskytovateli identity, musíte vytvořit dvě samostatné konfigurace tokenu a dvě samostatná ověřovací pravidla, každé odpovídající své vlastní konfiguraci. Díky tomu můžete měnit akci jednotlivých ověřovacích pravidel podle aktuálního stavu migrace.
JSON Web Tokens s Bearer prefix
API Shield ověří JSON Web Tokeny bez ohledu na to, zda obsahují Bearer prefix.
Limit počtu požadavků podle uživatele (JWT claim)
Požadavky můžete omezovat na základě libovolného nároku uvnitř JSON Web Tokenu (JWT), například:
- Registrované claims jako
audnebosub - Vlastní claims jako
userEmail, včetně vnořených vlastních nároků, jako jeuser.email
Omezování počtu požadavků na základě hodnot JWT claim funguje pouze u platných JSON Web Tokenů. Pokud na dané cestě neblokujete neplatné JSON Web Tokeny, Všechny deklarace JWT budou započítány a případně blokovány pokud je v Point of Presence (PoP) zjištěn vysoký provoz.
Musíte také počítat s JWT claimem, který uživatele jednoznačně identifikuje. Pokud zvolíte claim, který je stejný pro mnoho vašich uživatelů, budou se jejich rate limity počítat dohromady.
Limit počtu požadavků podle úrovně uživatele
Pokud na svém webu nebo v aplikaci nabízíte více úrovní a chcete podle nich vynucovat rate limiting, například:
- Pokud
"aud": "free-tier", omezte frekvenci na pět požadavků za minutu. - Pokud
"aud": "premium-tier", omezte frekvenci na 50 požadavků za minutu.
Můžete postupovat podle níže uvedeného příkladu pravidla pro omezení četnosti požadavků:
(http.request.method eq "GET" and
http.host eq "<YOUR_DOMAIN>" and
http.request.uri.path matches "</EXAMPLE_PATH>" and
lookup_json_string(http.request.jwt.claims["<JWT_TOKEN_CONFIGURATION_ID>"][0], "aud") eq "free-tier"Ignorovat OPTIONS CORS požadavky typu preflight
Z důvodu zabezpečení sdílení prostředků mezi zdroji (CORS) odesílají webové prohlížeče „preflight“ požadavky pomocí metody OPTIONS metodu na API endpointy před odesláním GET (nebo jiné sloveso) požadavek. Podle definice OPTIONS požadavky typu preflight neobsahují přihlašovací údaje (autentizační hlavičky ani soubory cookie) a jsou anonymní.
Pokud očekáváte, že platnými klienty vašeho API budou i webové prohlížeče, a chcete zabránit blokování OPTIONS požadavků z těchto prohlížečů Cloudflare doporučuje přidat or http.request.method eq "OPTIONS" do svých pravidel ověřování JWT.
Dostupnost
Ověřování JWT je dostupné všem zákazníkům API Shield. Zákazníci s plánem Enterprise, kteří si API Shield nezakoupili, si mohou vyzkoušet API Shield jako služba bez smlouvy ↗ v Cloudflare dashboardu nebo se obraťte na svůj tým podpory účtu.
Omezení
Ověřování JWT funguje pouze u JWT odesílaných v hlavičkách požadavku klienta nebo v cookies. Pokud vaši klienti odesílají JWT v POST tělo, obraťte se na svůj account team.