JSON Web Token
JSON Web Token, JWT – otwarty standard przemysłowy, definiujący sposób wymiany danych komputerowych między określonymi stronami za pośrednictwem dokumentów JSON. Został zaproponowany w maju 2015 przez stowarzyszenie IETF w dokumencie RFC 7519 ↓. Na jego główne zastosowania wskazano proces uwierzytelniania użytkownika oraz bezpiecznej wymiany informacji[1].
Struktura tokenu[2]
Tokeny JWT tworzone są z trzech niezależnych części składowych oddzielanych znakiem kropki:
nagłówek.ładunek.podpis
Zawartości poszczególnych części w tokenie są kodowane według standardu RFC 4648 ↓ (Base64Url), które posłużą do utworzenia właściwego tokenu.
Nagłówek
Nagłówek jest osobnym dokumentem JSON, informującym o typie przekazywanego tokenu (pole typ, w tym przypadku: JWT) oraz o zastosowanym algorytmie szyfrowania asymetrycznego (pole alg), takimi jak HMAC, RSA czy ECDSA.
Na przykład, dla tokenu typu JWT, szyfrowanego algorytmem HMAC-SHA256, nagłówek będzie zawierał poniższy dokument:
{
"alg": "HS256",
"typ": "JWT"
}
Ładunek
Główną częścią JWT jest przekazywany ładunek (tzw. payload). W postaci dokumentu JSON dostarcza dane, które jedna ze stron chce przekazać.
Przykładowo, przekazując dane sesji określonego zalogowanego użytkownika, zawierające jego identyfikator logowania oraz uprawnienia w witrynie internetowej, mogłyby wyglądać następująco:
{
"login": "John_Doe",
"isAdmin": true
}
Sygnatura
Sygnatura (nazywana również podpisem) jest używany do weryfikacji autentyczności utworzonego tokenu JWT. Jest tworzony i szyfrowany wybranym algorytmem na podstawie zakodowanego nagłówka i ładunku tokenu z opcjonalnym kluczem szyfrowania.
Użycie
Podczas procesu autoryzacji użytkownika z użyciem JWT, przy poprawnym jego zalogowaniu jest zwracany wygenerowany token, który zostaje przechowany w danych lokalnych przeglądarki internetowej – na przykład w pamięci lokalnej, pamięci sesji lub pliku cookie, zamiast klasycznego przechowywania identyfikatora sesji.
Kiedy użytkownik witryny chce uzyskać dostęp do zasobu z ograniczonym dostępem, podczas wykonywania takiego żądania dodawany jest dodatkowy nagłówek Authorization:
Authorization: Bearer <token>
Serwer otrzymujący wartość w nagłówku nie przechowuje go w pamięci, by porównać ze sobą ciągi znaków – zamiast tego sprawdza, czy posiada prawidłową sygnaturę używaną przez serwer i na podstawie ich zgodności przyznaje dostęp używając zawartości ładunku tokenu.
Implementacje
JWT posiada znaczną liczbę gotowych implementacji standardu. Pojawiły się m.in. dla języków C[3], Clojure[4], Common Lisp[5], Dart[6], Elixir[7], Go[8], Haskell[9], Java[10], JavaScript[11], Lua[12], Perl[13], PHP[14], PowerShell[15], Python[16], Ruby[17], Rust[18], Scala[19] czy Swift[20], a także dla takich środowisk uruchomieniowych, jak .NET[21] czy Node.js[22].
Przypisy
- ↑ Get Started with JSON Web Tokens. auth0.com. [dostęp 2022-06-16]. (ang.).
- ↑ JSON Web Token Introduction. jwt.io. [dostęp 2022-06-16]. (ang.).
- ↑ benmcollins/libjwt: JWT C Library. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ liquidz/clj-jwt: Clojure library for JSON Web Token(JWT). github.com. [dostęp 2022-06-17]. (ang.).
- ↑ gschjetne/cljwt: A Common Lisp library for issuing and validating JSON Web Tokens. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ deftomat/JustJWT: A JWT library for Dart.. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ joken-elixir/joken: Elixir JWT library. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ Repozytorium biblioteki jwt-go języka Go w serwisie GitHub. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ jwt: JSON Web Token (JWT) decoding and encoding. hackage.haskell.org. [dostęp 2022-06-17]. (ang.).
- ↑ auth0/java-jwt: Java implementation of JSON Web Token (JWT). github.com. [dostęp 2022-06-17]. (ang.).
- ↑ kjur/jsrsasign: The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free cryptography library supporting RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, OCSP, CMS SignedData, TimeStamp, CAdES and JSON Web Signature/Token in pure JavaScript.. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ SkyLothar/lua-resty-jwt: JWT For The Great Openresty. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ Crypt::JWT - JSON Web Token (JWT, JWS, JWE) as defined by RFC7519, RFC7515, RFC7516. metacpan.org, 2021-11-28. [dostęp 2022-06-17]. (ang.).
- ↑ lcobucci/jwt: A simple library to work with JSON Web Token and JSON Web Signature. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ SP3269/posh-jwt: JWT (JSON Web Tokens) implementation in Powershell. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ jpadilla/pyjwt: JSON Web Token implementation in Python. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ jwt/ruby-jwt: A ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ Keats/jsonwebtoken: JWT lib in rust. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ jwt-scala/jwt-scala: JWT support for Scala. Bonus extensions for Play, Play JSON, Json4s, Circe, uPickle, Spray and Argonaut. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ kylef/JSONWebToken.swift: Swift implementation of JSON Web Token (JWT).. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ jwt-dotnet/jwt: Jwt.Net, a JWT (JSON Web Token) implementation for .NET. github.com. [dostęp 2022-06-17]. (ang.).
- ↑ auth0/node-jsonwebtoken: JsonWebToken implementation for node.js. github.com. [dostęp 2022-06-17]. (ang.).
Linki zewnętrzne
- jwt.io – witryna poświęcona informacjom oraz narzędziami związanymi z JWT.
- J. Bradley, N. Sakimura, JSON Web Token (JWT), RFC 7519, IETF, maj 2015, DOI: 10.17487/RFC7519, ISSN 2070-1721, OCLC 943595667 (ang.).
- S. Josefsson, The Base16, Base32, and Base64 Data Encodings, RFC 4648, IETF, październik 2006, DOI: 10.17487/RFC4648, ISSN 2070-1721, OCLC 943595667 (ang.).
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.