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 . Na jego główne zastosowania wskazano proces uwierzytelniania użytkownika oraz bezpiecznej wymiany informacji.
Struktura tokenu 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 (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, Clojure, Common Lisp, Dart, Elixir, Go, Haskell, Java, JavaScript, Lua, Perl, PHP, PowerShell, Python, Ruby, Rust, Scala czy Swift, a także dla takich środowisk uruchomieniowych, jak .NET czy Node.js.
Przypisy
Linki zewnętrzne jwt.io – witryna poświęcona informacjom oraz narzędziami związanymi z JWT.
Kategoria:Standardy internetowe Kategoria:Metadane