nowość: pobierz podręcznik JWT za darmo i ucz się jwts dogłębnie!
czym jest JSON Web Token?
JSON Web Token (JWT) jest otwartym standardem (RFC 7519), który definiuje zwarty i samowystarczalny sposób bezpiecznego przesyłania informacji między stronami jako obiekt JSON. Informacje te można zweryfikować i zaufać, ponieważ są podpisane cyfrowo. JWTs może być podpisywany za pomocą klucza tajnego (za pomocą algorytmu HMAC) lub pary kluczy publicznych / prywatnych za pomocą RSA lub ECDSA.,
chociaż JWTs może być szyfrowany, aby zapewnić poufność między stronami, skupimy się na podpisanych tokenach. Podpisane tokeny mogą weryfikować integralność zawartych w nich roszczeń, podczas gdy zaszyfrowane tokeny ukrywają te roszczenia przed innymi stronami. Gdy tokeny są podpisywane za pomocą par klucza publicznego/prywatnego, podpis potwierdza również, że TYLKO strona posiadająca klucz prywatny jest osobą, która go podpisała.
kiedy należy używać tokenów internetowych JSON?
oto kilka scenariuszy, w których przydatne są tokeny JSON Web:
-
autoryzacja: jest to najczęstszy scenariusz korzystania z JWT., Gdy użytkownik zostanie zalogowany, każde kolejne żądanie będzie zawierać JWT, umożliwiając użytkownikowi dostęp do tras, usług i zasobów, które są dozwolone za pomocą tego tokena. Single Sign On to funkcja, która szeroko wykorzystuje JWT w dzisiejszych czasach, ze względu na niewielki narzut i możliwość łatwego użycia w różnych domenach.
-
wymiana informacji: tokeny JSON Web to dobry sposób na bezpieczne przesyłanie informacji między stronami. Ponieważ JWTs można podpisywać—na przykład za pomocą par kluczy publicznych/prywatnych – możesz być pewien, że nadawcy są tym, za kogo się podają., Ponadto, ponieważ podpis jest obliczany przy użyciu nagłówka i ładunku, można również sprawdzić, czy zawartość nie została naruszona.
Jaka jest struktura tokenów internetowych JSON?
w swojej zwartej formie, JSON Web tokeny składają się z trzech części oddzielonych kropkami (.
), które są:
- nagłówek
- ładunek
- podpis
dlatego JWT zazwyczaj wygląda następująco.
xxxxx.yyyyy.zzzzz
Podzielmy poszczególne części.,
nagłówek
nagłówek zazwyczaj składa się z dwóch części: typu tokena, którym jest JWT, oraz używanego algorytmu podpisywania, takiego jak HMAC SHA256 lub RSA.
na przykład:
{ "alg": "HS256", "typ": "JWT"}
następnie ten JSON jest kodowany Base64Url tworząc pierwszą część JWT.
Payload
druga część Tokena to payload, który zawiera roszczenia. Oświadczenia to oświadczenia dotyczące podmiotu (zazwyczaj użytkownika) i dodatkowych danych.Istnieją trzy rodzaje roszczeń: roszczenia zarejestrowane, publiczne i prywatne.,
-
Registered claims: są to wstępnie zdefiniowane roszczenia, które nie są obowiązkowe, ale zalecane, aby zapewnić zestaw użytecznych, interoperacyjnych roszczeń. Niektóre z nich to: iss (emitent), exp (czas wygaśnięcia), sub (temat), aud (publiczność) i inne.
zauważ, że nazwy twierdzeń mają tylko trzy znaki, ponieważ JWT ma być zwarte.
-
roszczenia publiczne: mogą być definiowane do woli przez osoby korzystające z JWTs., Aby uniknąć kolizji, powinny być zdefiniowane w rejestrze tokenów sieciowych IANA JSON lub zdefiniowane jako URI zawierające odporną na kolizję przestrzeń nazw.
-
roszczenia prywatne: są to roszczenia niestandardowe tworzone w celu wymiany informacji między stronami, które zgadzają się na ich wykorzystanie i nie są roszczeniami zarejestrowanymi lub publicznymi.
przykładowym ładunkiem może być:
{ "sub": "1234567890", "name": "John Doe", "admin": true}
ładunek jest następnie kodowany Base64Url, tworząc drugą część tokenu sieciowego JSON.,
należy pamiętać, że dla podpisanych tokenów informacja ta, choć zabezpieczona przed manipulacją, jest czytelna dla każdego. Nie umieszczaj tajnych informacji w elementach ładunku lub nagłówka JWT, chyba że są one zaszyfrowane.
podpis
aby utworzyć część podpisu, musisz wziąć zakodowany nagłówek, zakodowany ładunek, sekret, algorytm określony w nagłówku i podpisać to.,
na przykład, jeśli chcesz użyć algorytmu HMAC SHA256, podpis zostanie utworzony w następujący sposób:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
podpis służy do sprawdzenia, czy wiadomość nie została zmieniona po drodze, a w przypadku tokenów podpisanych kluczem prywatnym może również sprawdzić, czy nadawca JWT jest tym, za kogo się podaje.
łączenie wszystkich
wyjście to trzy ciągi URL Base64 oddzielone kropkami, które mogą być łatwo przekazywane w środowiskach HTML i HTTP, a jednocześnie są bardziej kompaktowe w porównaniu do standardów opartych na XML, takich jak SAML.,
poniżej przedstawiono JWT, który ma zakodowany poprzedni nagłówek i ładunek i jest podpisany sekretem.
Jeśli chcesz zagrać z JWT i wprowadzić te pojęcia w życie, możesz użyć jwt.io Debugger do dekodowania, weryfikacji i generowania JWTs.
jak działają tokeny JSON Web?
w uwierzytelnianiu, gdy użytkownik pomyślnie zaloguje się za pomocą swoich poświadczeń, zostanie zwrócony Token sieciowy JSON. Ponieważ tokeny są poświadczeniami, należy zachować szczególną ostrożność, aby zapobiec problemom z bezpieczeństwem., Ogólnie rzecz biorąc, nie należy przechowywać tokenów dłużej niż jest to wymagane.
nie należy również przechowywać poufnych danych sesji w pamięci przeglądarki ze względu na brak zabezpieczeń.
Gdy użytkownik chce uzyskać dostęp do chronionej trasy lub zasobu, agent użytkownika powinien wysłać JWT, zazwyczaj w nagłówku autoryzacji za pomocą schematu Bearer. Zawartość nagłówka powinna wyglądać następująco:
Authorization: Bearer <token>
może to być, w niektórych przypadkach, bezpaństwowy mechanizm autoryzacji., Chronione trasy serwera sprawdzą poprawność JWT w nagłówku Authorization
, a jeśli jest obecny, użytkownik będzie mógł uzyskać dostęp do chronionych zasobów. Jeśli JWT zawiera niezbędne dane, potrzeba odpytywania bazy danych o określone operacje może zostać zmniejszona, choć nie zawsze tak jest.
jeśli token zostanie wysłany w nagłówkuAuthorization
, Cross-Origin Resource Sharing (CORS) nie będzie problemem, ponieważ nie używa plików cookie.,
poniższy diagram pokazuje, jak JWT jest uzyskiwany i używany do uzyskiwania dostępu do interfejsów API lub zasobów:
- aplikacja lub klient żąda autoryzacji do serwera autoryzacji. Odbywa się to za pośrednictwem jednego z różnych przepływów autoryzacji. Na przykład typowa aplikacja internetowa zgodna z OpenID Connect przejdzie przez punkt końcowy
/oauth/authorize
przy użyciu przepływu kodu autoryzacji. - Po udzieleniu autoryzacji serwer autoryzacji zwraca token dostępu do aplikacji.,
- aplikacja używa tokena dostępu do chronionego zasobu (takiego jak API).
należy pamiętać, że w przypadku podpisanych tokenów wszystkie informacje zawarte w tokenie są narażone na użytkowników lub inne strony, nawet jeśli nie są w stanie ich zmienić. Oznacza to, że nie należy umieszczać tajnych informacji w tokenie.
dlaczego warto używać tokenów internetowych JSON?
porozmawiajmy o zaletach JSON Web Tokens (JWT) w porównaniu do Simple Web Tokens (SWT) i Security Assertion Markup Language Tokens (SAML).,
ponieważ JSON jest mniej wyrazisty niż XML, gdy jest zakodowany, jego rozmiar jest również mniejszy, dzięki czemu JWT jest bardziej kompaktowy niż SAML. To sprawia, że JWT jest dobrym wyborem do przekazywania w środowiskach HTML i HTTP.
pod względem bezpieczeństwa SWT może być podpisywany tylko symetrycznie przez wspólny sekret przy użyciu algorytmu HMAC. Jednak tokeny JWT i SAML mogą używać pary kluczy publicznych/prywatnych w formie certyfikatu X. 509 do podpisywania. Podpisywanie XML za pomocą podpisu cyfrowego XML bez wprowadzania niejasnych luk w zabezpieczeniach jest bardzo trudne w porównaniu z prostotą podpisywania JSON.,
parsery JSON są powszechne w większości języków programowania, ponieważ mapują bezpośrednio do obiektów. I odwrotnie, XML nie ma naturalnego mapowania dokumentu do obiektu. Ułatwia to pracę z JWT niż SAML.
Jeśli chodzi o użycie, JWT jest używany w skali internetowej. Podkreśla to łatwość przetwarzania po stronie klienta tokenu internetowego JSON na wielu platformach, zwłaszcza mobilnych.,
porównanie długości zakodowanego JWT i zakodowanego SAML
Jeśli chcesz dowiedzieć się więcej o tokenach JSON Web, a nawet zacząć ich używać do uwierzytelniania we własnych aplikacjach, przejdź do strony docelowej JSON Web Token pod adresem Auth0.
Leave a Reply