novinka: získejte JWT Handbook zdarma a učit JWTs do hloubky!
co je JSON Web Token?
JSON Web Token (JWT) je otevřený standard (RFC 7519), který definuje kompaktní a soběstačný způsob, jak pro bezpečný přenos informací mezi stranami jako JSON objekt. Tyto informace lze ověřit a důvěřovat, protože jsou digitálně podepsány. JWTs lze podepsat pomocí tajného (s HMAC algoritmem) nebo dvojice veřejných/soukromých klíčů pomocí RSA nebo ECDSA.,
přestože JWTs lze zašifrovat tak, aby poskytovaly utajení mezi stranami, zaměříme se na podepsané tokeny. Podepsané žetony mohou ověřit integritu nároků obsažených v něm, zatímco šifrované tokeny tyto nároky skrývají od jiných stran. Když jsou žetony podepsány pomocí párů veřejných / soukromých klíčů, podpis také potvrzuje, že pouze strana, která drží soukromý klíč, je ta, která jej podepsala.
kdy byste měli používat webové tokeny JSON?
zde jsou některé scénáře, kde jsou užitečné webové tokeny JSON:
-
autorizace: Toto je nejběžnější scénář pro použití JWT., Jakmile je uživatel přihlášen, každý další požadavek bude zahrnovat JWT, což uživateli umožní přístup k trasám, službám a zdrojům, které jsou s tímto tokenem povoleny. Single Sign On je funkce, která v dnešní době široce používá JWT, protože má malou režii a schopnost snadno se používat v různých doménách.
-
výměna informací: Webové tokeny JSON jsou dobrým způsobem bezpečného přenosu informací mezi stranami. Protože JWTs lze podepsat-například pomocí párů veřejných / soukromých klíčů-můžete si být jisti, že odesílatelé jsou tím, kým říkají, že jsou., Navíc, jak je podpis vypočítán pomocí záhlaví a užitečného zatížení, můžete také ověřit, že s obsahem nebylo manipulováno.
jaká je struktura webového tokenu JSON?
V jeho kompaktní formě, JSON Web Žetony se skládá ze tří částí oddělených tečkami (.
), které jsou:
- Záhlaví
- Nosnost
- Podpis
Proto, JWT obvykle vypadá takto.
xxxxx.yyyyy.zzzzz
pojďme rozebrat různé části.,
Záhlaví
záhlaví se obvykle skládá ze dvou částí: typ tokenu, který je JWT a podpisu algoritmus používá, například HMAC SHA256 nebo RSA.
například:
{ "alg": "HS256", "typ": "JWT"}
pak je tento JSON zakódován tak, aby tvořil první část JWT.
užitečné zatížení
druhou částí tokenu je užitečné zatížení, které obsahuje nároky. Nároky jsou prohlášení o subjektu (typicky uživatel) a další údaje.Existují tři typy nároků: registrované, veřejné a soukromé nároky.,
-
registrované nároky: jedná se o soubor předdefinovaných nároků, které nejsou povinné, ale doporučené, aby poskytly soubor užitečných, interoperabilních nároků. Některé z nich jsou: iss (emitent), exp (doba vypršení platnosti), sub (předmět), aud (publikum) a další.
Všimněte si, že jména tvrzení jsou pouze tři znaky, pokud JWT má být kompaktní.
-
Veřejné nároky: tyto mohou být definovány podle libosti těmi, kteří používají JWTs., Aby se však předešlo kolizím, měly by být definovány v registru webových tokenů IANA JSON nebo definovány jako URI, který obsahuje jmenný prostor odolný proti kolizi.
-
soukromé nároky: jedná se o vlastní nároky vytvořené za účelem sdílení informací mezi stranami, které se dohodly na jejich používání a nejsou registrovanými ani veřejnými nároky.
příkladem užitečného zatížení může být:
{ "sub": "1234567890", "name": "John Doe", "admin": true}
užitečné zatížení je pak zakódováno Base64Url a tvoří druhou část webového tokenu JSON.,
uvědomte si, že pro podepsané tokeny jsou tyto informace, i když jsou chráněny proti manipulaci, čitelné kýmkoli. Nevkládejte tajné informace do užitečného zatížení nebo hlavičkových prvků JWT, pokud nejsou šifrovány.
Podpis
vytvořit podpis část budete muset vzít kódované záhlaví, kódované nálož, tajemství, algoritmus uvedený v záhlaví, a znamení, že.,
například, pokud chcete použít HMAC SHA256 algoritmus, podpis bude vytvořen následujícím způsobem:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
podpis slouží k ověření, že zpráva nebyla změněna, a v případě tokenů podepsána pomocí soukromého klíče, to může také ověřit, že odesílatel JWT je, kdo to říká, že to je.
dát dohromady
výstup je tři Base64-URL řetězce oddělené tečkami, které lze snadno předat v HTML a HTTP prostředí, přičemž je kompaktnější ve srovnání s XML-based standardy, jako je SAML.,
následující text ukazuje JWT, který má zakódovaný předchozí záhlaví a užitečné zatížení a je podepsán tajemstvím.
Pokud chcete hrát s JWT a dát tyto pojmy do praxe, můžete použít jwt.io Ladicí program dekódovat, ověřovat a vytvářet JWTs.
jak fungují webové tokeny JSON?
při ověřování, když se uživatel úspěšně přihlásí pomocí svých pověření, bude vrácen webový Token JSON. Vzhledem k tomu, žetony jsou pověření, je třeba věnovat velkou pozornost, aby se zabránilo bezpečnostním problémům., Obecně byste neměli držet žetony déle, než je požadováno.
také byste neměli ukládat citlivá data relace do úložiště prohlížeče kvůli nedostatečné bezpečnosti.
kdykoli chce uživatel přistupovat k chráněné trase nebo zdroji, měl by uživatel odeslat JWT, obvykle v záhlaví autorizace pomocí schématu nositele. Obsah hlavičky by měl vypadat takto:
Authorization: Bearer <token>
To může být v některých případech bez státní příslušnosti povolení mechanismu., Chráněné trasy serveru zkontrolují platný JWT v záhlaví Authorization
, a pokud je přítomen, bude mít uživatel přístup k chráněným zdrojům. Pokud JWT obsahuje potřebná data, může být potřeba dotazovat databázi pro určité operace snížena, i když tomu tak nemusí být vždy.
Pokud je token odeslán v záhlavíAuthorization
, sdílení zdrojů s křížovým původem (CORS) nebude problém, protože nepoužívá soubory cookie.,
následující diagram ukazuje, jak JWT je získán a použit pro přístup k Api nebo zdrojů:
- aplikace nebo klient požaduje povolení k autorizaci serveru. To se provádí prostřednictvím jednoho z různých autorizačních toků. Například typická webová aplikace kompatibilní s OpenID Connect projde koncovým bodem
/oauth/authorize
pomocí toku autorizačního kódu. - po udělení autorizace vrátí autorizační server do aplikace přístupový token.,
- aplikace používá přístupový token pro přístup k chráněnému zdroji (jako API).
uvědomte si, že s podepsanými tokeny jsou všechny informace obsažené v tokenu vystaveny uživatelům nebo jiným stranám, i když je nemohou změnit. To znamená, že byste neměli do tokenu vkládat tajné informace.
proč bychom měli používat webové tokeny JSON?
pojďme mluvit o výhodách JSON Web tokenů (JWT) ve srovnání s jednoduchými Web tokeny (SWT) a zabezpečení tvrzení značkovací jazykové tokeny (SAML).,
jako JSON je méně verbose než XML, když je kódován jeho velikost je také menší, takže JWT kompaktnější než SAML. To dělá JWT dobrou volbou, které mají být předány v HTML a HTTP prostředí.
security-wise, SWT může být symetricky podepsán pouze sdíleným tajemstvím pomocí algoritmu HMAC. Tokeny JWT a SAML však mohou pro podpis použít pár veřejných/soukromých klíčů ve formě certifikátu x.509. Podpis XML s digitálním podpisem XML bez zavedení nejasných bezpečnostních děr je ve srovnání s jednoduchostí podpisu JSON velmi obtížný.,
JSON parsery jsou běžné ve většině programovacích jazyků, protože mapují přímo na objekty. Naopak XML nemá přirozené mapování dokumentu na objekt. To usnadňuje práci s JWT než SAML tvrzení.
pokud jde o použití, JWT se používá v internetovém měřítku. To zdůrazňuje snadnost zpracování webového tokenu JSON na straně klienta na více platformách, zejména mobilních.,
Srovnání délky zakódované JWT a zakódované SAML
Pokud si chcete přečíst více o JSON Web Žetony a dokonce začít používat k provádění ověřování ve vaší vlastní aplikace, přejděte na JSON Web Token vstupní stránku na Auth0.
Leave a Reply