JWT (Json Web Token) to standard uwierzytelniania i udostępniania informacji. Oparte naformacie JSON, jest niezbędna dla każdego dewelopera, który chce wyróżnić się na swoim terenie.
Ponieważ składa się z długiego ciągu znaków, w tym liter i cyfr, JWT może przestraszyć każdego, kto zobaczy go po raz pierwszy. Ma także kilka roszczeń różnych typów i funkcji oraz własne działanie w każdym segmencie, który go tworzy.
Kompaktowa, kompletna i łatwa w użyciu, ta funkcjonalność gwarantuje przede wszystkim bezpieczeństwo poprzez kilka roszczeń i podpis cyfrowy. Ponadto jest obsługiwany przez szeroką gamę języków.
Jeśli chcesz dowiedzieć się głębiej, czym jest jwt i jak go używać, chodź ze mną!
- Co to jest JWT?
- Zrozum różnicę pomiędzy uwierzytelnianiem a autoryzacją!
- Do czego służy biblioteka dekodowania JWT?
- Jaka jest podstawowa struktura JWT?
- Jak działają JWT (tokeny internetowe JSON)?
- Kiedy stosować i do czego służy JWT?
- Jak korzystać z JWT? Tworzenie tokena w praktyce!
- Weryfikacja tokena
- Jak uwierzytelnić JWT (token sieciowy JSON)?
Co to jest JWT?
Token sieciowy Json jeststandard uwierzytelniania i wymiany informacji, zdefiniowany w RFC7519. W skrócie składa się z zestawu żądań. JWT jest niezbędny, ponieważ jest to:niezwykle bezpieczny sposóbudostępnianie informacji i uwierzytelnianie użytkowników. Jest to format tekstowy, powszechnie akceptowany w kilku językach, co jest cechą charakterystycznąużyj JSON jako podstawy.
Na tym polega duża różnica między JWT a innymi opcjami, ponieważ JSON jest korzystniejszym standardem wymiany i przechowywania informacji. Niektórzy z konkurentów to SWT (Simple Web Tokens) i SAML (Security Assertion Markup Language Tokens), które korzystają ze standardu XML.
JWT jest tak naprawdę jednym z elementów jeszcze większej struktury, jaką jest tzwJOSE (podpisywanie i szyfrowanie obiektów Json). JOSE zawiera kilka innych specyfikacji. Są to: JWE (Json Web Encryption), odpowiedzialny za szyfrowanie podpisu tokena; JWA (Json Web Algorithms) w zakresie algorytmu; JWK (Json Web Keys), odpowiadający kluczom podpisującym; JWS (Json Web Signature), podpis tokenowy. Wreszcie element JWT, JOSE, jest samym tokenem.
Czym są tokeny?
W podsumowaniu,tokenem jest podpis cyfrowy, czyli klucz. Token jest dokładnie elementem JWT parasola JOSE, który, jak widzieliśmy, zawiera kilka innych elementów.
To jest dokładnie specyfikacja JWT, to jest sam JWT. Odtąd będziemy mówić o tokenie jwt w odniesieniu do tokena.
Zatem token, czyli JWT, to astrunowy, ciąg znaków służący jako odniesienie do reprezentowania obiektu. W praktyce zatem token jwt jestciąg znaków składający się z trzech części. Później przyjrzymy się trzem segmentom znaków tworzącym token.
Tokeny jwt mogą być podpisane lub szyfrowane. W pierwszym przypadku wykorzystywany jest JWS (Json Web Signature). Do szyfrowania należy zastosować element JOSE to JWE (Json Web Encryption).
Zrozum różnicę pomiędzy uwierzytelnianiem a autoryzacją!
Jak widzieliśmy, JWT umożliwia uwierzytelnianie i wymianę informacji pomiędzy użytkownikami. Z tego powodu należy pamiętać, że uwierzytelnianie i autoryzacja sąróżne etapy. Zasadniczo, jeśli użytkownik chce uzyskać autoryzację dostępu do określonych treści, musi przejść uwierzytelnienie.
W praktyce,uwierzytelnianie następuje w taki sposób, że użytkownik potwierdza swoją tożsamość, wykazując, że może uzyskać dostęp do tego dostępu. Autoryzacja z kolei dotyczy aspektu uprawnień.
Do czego służy biblioteka dekodowania JWT?
Biblioteka dekodowania JWT działa podobnierepozytorium. Służy do pomocydekodowanie tokenów jwt. Jak widzieliśmy, są one zakodowane w Base64, co oznacza, że zawartość zawarta w tokenie staje się znanym nam kluczem znakowym. Należy pamiętać, że treść ta nie jest tajna, ponieważ w celu uzyskania jasnego dostępu do jej tematów można zastosować dekodowanie jwt.
Ponieważ są oparte na JSON, tokeny noszą cechy łatwej użyteczności i szerokiej gamy języków, które je akceptują. Istnieją zatem repozytoria, na których można znaleźćgithubiena przykład lub czasami na liście plikówStrona przedstawicielska JWT. Należy pamiętać, że biblioteki dekodujące jwt nie weryfikują tokena, a jedynie go dekodują.
Jaka jest podstawowa struktura JWT?
Teraz, gdy rozumiemy, czym jest token jwt, przyjrzyjmy się jego strukturze. W jednym z tych tokenów znajduje się payload, czyli informacja o użytkowniku, jego uprawnieniach i podpisie, gdzie sprawdzana jest ważność tokena. Jest samowystarczalny, ponieważ zawiera tę informację w sobie.
Jest to złożone ztrzy sekwencjeznaków:nagłówek, ładunek i podpis. Podział między każdym z nich jest określony przezkropka. Serializacja odbywa się przy użyciu metody kodowania danych Base64. W serializacji kompaktowej struktura wygląda następująco:
podpis.nagłówka.ładunek
aaaaa.bbbbbb.cccccc
Każdy z tych segmentów ma swoją charakterystykę i specyfikę, przyjrzyjmy się bliżej każdemu z nich.
nagłówek
Z języka angielskiego nagłówek oznacza dokładnie to samo słowo „nagłówek” w naszym języku. Położony wpoczątek tokenu, nagłówek jest obiektem JSON. Składa się z dwóch elementów tjalgityp. Alg wskazuje, który algorytm szyfrowania jest używany, a typ wskazuje typ tokena. Razem tworzą pierwszą sekwencję przed pierwszym punktem.
Istnieje kilka algorytmów, które można zastosować w alg, takich jak na przykład HMAC, SH256, HS384 lub RSA.
Następnie zastosowanym algorytmem (alg) jest HS256. Typ tokena, określony przez typ, to JWT. W naszym przykładzie HS256 jest algorytmem web json, który posiada klucz symetryczny i nie korzysta z certyfikatów. Cała demonstracja tokenów w tym tekście wykorzystywałagenerowanie tokenów jwt z JWT.
{"alg": "HS256", "typ": "JWT"}
Jego segment w tokenie wygląda następująco:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Ładunek
Payload, drugi segment naszego JWT, jest również obiektem JSON. To jest w segmencie ładunku, gdzieroszczenia, które mogą być trzech typów:zarejestrowany, prywatny i publiczny(odpowiednio zarejestrowane, prywatne i publiczne). Oświadczenia są roszczeniami, są częścią ładunku jednego z tych tokenów.
O ile roszczenia zarejestrowane są zgłaszane w sposób z góry ustalony przez samą JWT, roszczenia prywatne i publiczne tworzone są przez samego użytkownika. Różnica między prywatnymi i publicznymi spersonalizowanymi oświadczeniami polega na tym, że prywatne roszczenia zwykle zawierają prywatne informacje na temat danej organizacji i są dostępne tylko dla tych użytkowników, którzy są zaangażowani w ten token jwt.
Korzystając z twierdzeń publicznych, należy zachować szczególną ostrożność, aby uniknąć kolizji. Aby to zrobić, musisz użyć narzędziaRejestr tokenów internetowych IANA Json.
Zarejestrowane roszczenia nie są obowiązkowe,ale gwarantują niepowtarzalność tokena. Te z góry określone oświadczenia mogą być również różnego rodzaju, standaryzowane przez sam system. Przyjrzymy się każdemu z nich poniżej:
- jti: oznacza identyfikator tokenu Json, jest to unikalna tożsamość (id) tokena.
- jest: to roszczenie odnosi się do użytkownika, który wystawił token. Termin pochodzi od Emitenta.
- to:pochodzi od terminu Issued At. Określa czas istnienia tokena, począwszy od chwili jego wydania.
- uwaga:oznacza: Nie wcześniej. Innymi słowy, określa, kiedy token jwt stanie się ważny. W praktyce iat, który widzieliśmy wcześniej, można traktować jako nbf, gdy ta opcja jest aktywna.
- do potęgi:pochodzi od terminu wygaśnięcie. Jest używany w odniesieniu do czasu wygaśnięcia tokena jwt. Po tym okresie token nie jest już przyjmowany do przetwarzania. Jest to szczególnie przydatne, ponieważ zapobiega użyciu tokena jwt przez osobę niepożądaną, ponieważ zapewnia tokenowi użyteczność.
- pod:Pochodzi od terminu Temat i identyfikuje temat tokena.
- dźwięk:Wreszcie, twierdzenie to pochodzi od terminu Audiencja. Identyfikuje odbiorców tego tokena, czyli tego, kto go skonsumuje. Pojedynczy użytkownik lub kilku może zostać zgłoszonych do tokena jako publiczny. W przypadku wielu użytkowników informacja podana jest w formie tablicy.
Ważne jest, aby nie dodawać wrażliwych informacji do ładunku, ponieważ można zweryfikować zawartość każdego segmentu tokena jwt. Ten proces wizualizacji treści odbywa się za pomocą dekodowania Base64. Jak widać, proces dekodowania Base64 w celu wizualizacji zawartości tokena jest odwrotny do tego, co odbywa się w przypadku jego generowania, czyli kodu Base64.
Zobaczmy teraz, jak segment ładunku wygląda w praktyce:
{"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
W przykładzie wykorzystano podrzędne zgłoszenie zarejestrowane, które dotyczy tematu tokena jwt, spersonalizowanej nazwy zgłoszenia i w końcu kolejnego zarejestrowanego zgłoszenia, iat, które wskazuje czas, w którym wydano token jwt. Segment ten w końcowym wyniku tokena jwt będzie wyglądał następująco:
JzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Podpis
Segment podpisu jest jednym z najbardziej wrażliwych elementów naszego tokena jwt. W praktyce podpis jest składanypoprzez zakodowanie nagłówka i ładunku dodanych do słowa kluczowego. Inaczej mówiąc, segment ten jest zatem swego rodzaju produktem dwóch pozostałych. Słowo kluczowe jest wyborem tego, kto tworzy token jwt.
Segment ten jest przetwarzany w formacie określonym w typie nagłówka, JWT. Wracając do naszego przykładu, w nagłówku mieliśmy odwołanie do typu JWT. Podpis pozwala sprawdzić, czy wiadomość tokena jwt nie została w którymś momencie naruszona.
To tajne słowo kluczowe daje moc generowania innych tokenów i dlatego jest dostępne wyłącznie dla serwera. W naszym tokenie wybrane słowo kluczowe było tajne. Dlatego pole Podpis wyglądało następująco:
HMACSHA256(base64UrlEncode(nagłówek) + „.” +base64UrlEncode(ładunek),segredo)
Jeśli chodzi o token jwt, mamy następujące:
B3I_4fBaJu8mC5J3VSdlvy0lZiIuakS0_MmMrqEY_e4
Jak działają JWT (tokeny internetowe JSON)?
W praktyce tokeny jwt są kluczami dostępu podpisanymi cyfrowo, co gwarantujebezpieczeństwo i niezawodnośćw związku z dostępem dopunkty końcoweAPI. W trakcie podpisywania tokenów serwer może zweryfikować autentyczność tokena, gdyż sam przenosi informację o pochodzeniu tokena.
Takie tokenywyróżniają się zawartością i podpisem, w tym samym czasie. Zatem, jak widzieliśmy, zawartość a jest widoczna poprzez dekodowanie Base64, dlatego pomimo rozbudowanego zestawu znaków należy zwrócić uwagę na to, aby jego treść nie była w żaden sposób tajna ani trudna do odczytania!
Wiemy już, że tym, co wyróżnia silne bezpieczeństwo JWT, nie jest możliwość ukrycia informacji, ale wiarygodność roszczeń i mechanizmów podpisu. Dlatego ważne jest, aby jeszcze bardziej wykorzystać możliwości funkcji i zastosować sposoby dalszego ograniczania i gwarantowania jej bezpieczeństwa, np. poprzez żądanie czasu wygaśnięcia, exp lub roszczenie nbf, a nie wcześniej.
Kiedy stosować i do czego służy JWT?
Do tego przyzwyczajony jest głównie JWTuwierzytelnianie, autoryzacja i udostępnianie informacji. Najczęstszym zastosowaniem jest autoryzacja (autoryzacja jwt). Jak już wiesz, najpierw wymagana jest autoryzacja.
Innym częstym zastosowaniem jest wymiana informacji. W tym sensie JWT wyróżnia się dużym bezpieczeństwem tej operacji. To dlatego, że tak jestsprawdzalnyszczegółowe informacje o tym, kto go wydał. Możliwe jest również, dzięki istnieniu nagłówka i ładunku, sprawdzenie integralności treści, gwarantując w ten sposób bezpieczeństwo przed manipulacją materiałem.
Jak korzystać z JWT? Tworzenie tokena w praktyce!
Teraz, gdy znasz szczegółowo każdy segment tokena jwt, przejdźmy do tworzenia! Aby dojść do efektu końcowego, czyli gotowego tokena, przechodzimy przez kilka kroków.
Jak widzieliśmy, najpierw należy podyktować algorytm (alg) i typ (typ), to w nagłówku. Onagłówekktóry jest nagłówkiem tokena, pierwszym segmentem przed pierwszą kropką, pierwszą konkatenacją.
Po drugie, nieładunek, informowane są roszczenia tego tokena, które mogą być rejestrowane lub personalizowane, a spersonalizowane roszczenia mogą być publiczne lub prywatne. Nagłówek jest przetwarzany przy użyciu Base64. Drugi, również Ładunek. Obydwa są następnie łączone kropką „.”
Na koniec mamy segmentPodpis, z częścią nagłówka, ładunkiem i słowem kluczowym. Korzystając z przykładu tworzenia tokenu jwt, z którego korzystaliśmy do tej pory, nadal musimy połączyć te trzy elementy. Połączenie nagłówka, ładunku i podpisu następuje w 2 punktach końcowych, pomiędzy każdym z segmentów:
6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.B3I_4fBaJu8mC5J3VSdlvy0lZiIuakS0_MmMrqEY_e4
Możesz przetestować to, co tu zobaczyliśmy, za pośrednictwem platformyDebuger jwt.io!
Weryfikacja tokena
Istnieje kilka sposobów obserwowania walidacji tokena jwt. Pierwszy z nich przechodziobserwacja jego struktury. Teraz, gdy wiesz, czym są te trzy segmenty i jak są zbudowane, możesz rozpoznać, kiedy są one przynajmniej zgodne z podstawową strukturą. Ciągle możeszspójrz na użyte twierdzeniai sprawdzić, czy są one zgodne z propozycją.
Oprócz tego bardziej intuicyjnego sposobu możesz w szczególności sprawdzić poprawność podpisu pliku jwt. W ten sposób,zastosuj dekodowanie i użyj biblioteki dekodowania jwtdla weryfikacji.
Jak uwierzytelnić JWT (token sieciowy JSON)?
Uwierzytelnienie jest niezbędne. W nim po zalogowaniu użytkownik otrzymuje swój token i może uzyskać dostęp do punktów końcowych API. Dostęp ten odbywa się za pomocąNazwa użytkownika i hasłolub innego rodzaju żądanych danych. To logowanie w celu uwierzytelnienia odbywa się w następującym formacie:
{"e-mail" : "[chroniony e-mailem]”,„hasło”: „m94s32uz08a”}
Od tego momentu tworzony będzie token, który zostanie odesłany do użytkownika, który zażądał uwierzytelnienia.
Teraz, gdy już wiesz, czym jest token JSON i jak go używać, możesz poznać możliwości tego typu klucza. Dzięki temu tokenowi i znajomości dekodowania jwt i uwierzytelniania jwt możesz udostępniać informacje ze znacznie większym spokojem i bezpieczeństwem.
Czy podobała Ci się ta treść? Zobacz takżelista 26 przydatnych narzędzi dla programistów.