Welcome to Our Website

JSON Web Token (JWT) wyjaśnione

JSON Web Token jest standardem używanym do tworzenia tokenów dostępu dla aplikacji.

działa to w ten sposób: serwer generuje token potwierdzający tożsamość użytkownika i wysyła go do klienta.

klient wysyła token z powrotem do serwera dla każdego kolejnego żądania, więc serwer wie, że żądanie pochodzi z konkretnej tożsamości.

ta architektura okazuje się bardzo skuteczna w nowoczesnych aplikacjach internetowych, gdzie po uwierzytelnieniu użytkownika wykonujemy żądania API do REST lub GraphQL API.

kto używa JWT?, Na przykład Google. Jeśli korzystasz z interfejsów API Google, będziesz korzystać z JWT.

JWT jest podpisany kryptograficznie (ale nie zaszyfrowany, dlatego używanie HTTPS jest obowiązkowe podczas przechowywania danych użytkownika w JWT), więc istnieje gwarancja, że możemy mu zaufać, gdy go otrzymamy, ponieważ żaden pośrednik nie może przechwycić i zmodyfikować go lub przechowywanych danych, bez ich unieważnienia.

To powiedziawszy, JWTs są często krytykowane za ich nadużywanie, a zwłaszcza za ich używanie, gdy można użyć mniej problematycznych rozwiązań.

musisz wyrobić sobie opinię na ten temat., Nie opowiadam się za technologią nad inną, po prostu przedstawiam wszystkie możliwości i narzędzia, które masz do dyspozycji.

do czego są dobre? Głównie uwierzytelnianie API i autoryzacja server-to-server.

w jaki sposób generowany jest token JWT?

za pomocą węzła.,js możesz wygenerować pierwszą część tokena używając tego kodu:

const header = { "alg": "HS256", "typ": "JWT" }const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64')

ustawiamy algorytm podpisywania na HMAC SHA256 (JWT obsługuje wiele algorytmów), a następnie tworzymy bufor z tego JSON-a2911ea7e2 zakodowany obiekt, a kodujemy go za pomocą Base64.

wynik częściowy toeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.

następnie dodajemy ładunek, który możemy dostosować dowolnymi danymi., Istnieją zastrzeżone klucze, w tym iss I exp, które identyfikują emitenta i czas wygaśnięcia tokena.

możesz dodać własne dane do tokena za pomocą obiektu:

const payload = { username: 'Flavio' }

konwertujemy ten obiekt, kodowany JSON, do bufora i kodujemy wynik za pomocą base64, tak jak wcześniej:

const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64')

w tym przypadku wynik częściowy to eyJ1c2VybmFtZSI6IkZsYXZpbyJ9.,

następnie otrzymujemy podpis z nagłówka i zawartości payload, co zapewnia, że nasza zawartość nie może zostać zmieniona, nawet jeśli zostanie przechwycona, ponieważ nasz podpis zostanie unieważniony. Aby to zrobić, użyjemy crypto moduł węzła:

używamy secretKey tajny klucz i utworzymy zakodowaną reprezentację zaszyfrowanego podpisu base64.,

wartość podpisu w naszym przypadku to

MQWECYWUT7bayj8miVgsj8KdYI3ZRVS+WRRZjfZrGrw=

prawie skończyliśmy, wystarczy połączyć 3 części nagłówka, ładunku i podpis, oddzielając je kropką:

const jwt = `${encodedHeader}.${encodedPayload}.${signature}`

uwierzytelnianie API

jest to prawdopodobnie jedyny sensowny sposób użycia JWT.

powszechnym scenariuszem jest: rejestrujesz się w usłudze i pobierasz JWT z Pulpitu nawigacyjnego usługi. To jest to, czego będziesz używać od teraz do uwierzytelniania wszystkich żądań na serwerze.,

innym przypadkiem użycia, który jest odwrotnie, jest wysyłanie JWT, gdy zarządzasz API i klienci łączą się z Tobą, i chcesz, aby użytkownicy wysyłali kolejne żądania, po prostu przekazując token.

w takim przypadku Klient musi gdzieś przechowywać token. Gdzie jest najlepsze miejsce? W pliku cookie HttpOnly. Wszystkie inne metody są podatne na ataki XSS i jako takie należy ich unikać. Plik cookie HttpOnly nie jest dostępny z JavaScript i jest automatycznie wysyłany do serwera origin na każde żądanie, więc idealnie pasuje do przypadku użycia.,

Wybierz najlepszą bibliotekę JWT

w zależności od używanego języka i środowiska możesz wybierać spośród wielu bibliotek. Najpopularniejsze są wymienione w jwt.io strona internetowa.

nie używaj JWTs jako tokenów sesji

nie powinieneś używać JWTs do sesji. Użyj zwykłego mechanizmu sesji po stronie serwera, ponieważ jest on znacznie bardziej wydajny i mniej podatny na ekspozycję danych.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *