Jaka jest różnica między tokenami JWT a tokenem okaziciela?

116

Dowiaduję się czegoś o autoryzacji, np. Basic, Digest, OAuth2.0, JWTs i Bearer Token.

Teraz mam pytanie.

Wiesz, że tokeny JWT są używane jako Access_Token w standardzie OAuth2.0. Tokeny JWT pojawiają się pod adresem RFC 7519, a token okaziciela znajduje się pod adresem RFC 6750.

Na przykład Nosiciel:

Authorization: Bearer <token>

Kiedyś wysyłałem token na serwer przez AJAX lub dodawałem token do ciągu zapytania adresu URL. Wiem, że token można również wysłać, dodając go do nagłówka żądania. Czy to oznacza, że ​​token należy dodać do nagłówka Authorization Bearer?

Czy mógłbyś mi powiedzieć o związku między JWT a Bearer Token? Wielkie dzięki.

laoqiren
źródło

Odpowiedzi:

93

JWT to standard kodowania tokenów zawierający ładunek danych JSON, który można podpisywać i szyfrować.

JWT może być używany do wielu rzeczy, między innymi są to tokeny okaziciela, czyli informacja, którą możesz przekazać jakiejś usłudze, która dzięki posiadaniu jej (jesteś „okazicielem”) daje Ci dostęp do czegoś.

Tokeny okaziciela mogą być dołączane do żądania HTTP na różne sposoby, jednym z nich (prawdopodobnie preferowanym) jest nagłówek Authorization. Ale możesz też umieścić go w parametrze żądania, pliku cookie lub treści żądania. Dzieje się tak głównie między tobą a serwerem, do którego próbujesz uzyskać dostęp.

Thilo
źródło
W takim razie jak przeanalizować token w nagłówku Authorization, jest Bearer, muszę użyć String.slice (), czy jest jakieś oprogramowanie pośredniczące, aby go przeanalizować?
laoqiren
Używam Node.js
laoqiren
Użyj auth-headerpakietu, jeśli chcesz mieć minimalny parser
Demurgos
1
Lub po prostu użyj String.slice () :)
Paul Siersma,
146

Krótka odpowiedź

Tokeny JWT to wygodny sposób kodowania i weryfikowania roszczeń .

Token okaziciela to po prostu ciąg znaków, potencjalnie dowolny, używany do autoryzacji.

Kontekst (czas opowieści)

Kilka lat temu, przed rewolucją JWT, <token>był to po prostu ciąg bez wewnętrznego znaczenia, np. 2pWS6RQmdZpE0TQ93X. Ten token został następnie wyszukany w bazie danych, która zawierała żądania tego tokenu. Wadą tego podejścia jest to, że dostęp do bazy danych (lub pamięci podręcznej) jest wymagany za każdym razem, gdy używany jest token.

Tokeny JWT kodują i weryfikują (poprzez podpisywanie) własne oświadczenia . Pozwala to ludziom na wydawanie krótkoterminowych tokenów JWT, które są bezpaństwowe (czytaj: samodzielne, nie zależą od nikogo innego). Nie muszą trafiać w DB. Zmniejsza to obciążenie bazy danych i upraszcza architekturę aplikacji, ponieważ tylko usługa, która wystawia tokeny JWT, musi się martwić o trafienie do warstwy bazy danych / trwałości (z refresh_tokenktórą prawdopodobnie się spotkałeś).

rmharrison
źródło
Dzięki, a co z Mac w autoryzacji, czy Mac i Bearer to to samo?
laoqiren
Najlepiej odpowiedzieć gdzie indziej, np .: dzone.com/articles/oauth-20-bearer-token-profile
rmharrison