Czym są tokeny typu bearer?
Dowiedz się, czym są tokeny bearer, jak działają w OAuth 2.0 i JWT, czym różnią się od tokenów dostępu oraz poznaj najlepsze praktyki ich użycia.
Za niemal każdym nowoczesnym logowaniem do aplikacji lub żądaniem API stoi cichy bohater: token bearer. Możesz go nie zauważać, ale jest tam za każdym razem, gdy łączysz usługi, logujesz się lub pobierasz dane z chmury.
W tym przewodniku wyjaśniamy, do czego służą tokeny bearer, dlaczego są ważne i jak bezpiecznie się nimi posługiwać.
Czym jest token bearer?
Token bearer to fragment danych, zwykle ciąg znaków, który potwierdza, że jego posiadacz ma prawo dostępu do zasobu. Ważne jest to, że każdy, kto niesie (ang. bear) ten token, może z niego skorzystać bez dodatkowego udowadniania swojej tożsamości.
Pomyśl o karcie pokładowej linii lotniczych. Gdy masz ją w ręce, możesz przejść przez kontrolę bezpieczeństwa i wejść do samolotu. Nikt nie prosi cię już o dowód, jeśli karta jest ważna. Podobnie token bearer pozwala twojej aplikacji „wejść na pokład API” bez ponownego sprawdzania tożsamości przy każdym żądaniu.
Na przykład, gdy zalogujesz się do Spotify na swoim telefonie, nie musisz podawać hasła za każdym razem, gdy uruchamiasz piosenkę. Zamiast tego aplikacja przechowuje token bearer, który mówi serwerom Spotify: „to żądanie pochodzi od autoryzowanego użytkownika”.
Jak działają tokeny bearer w praktyce
Przepływ użycia tokenów bearer można podzielić na kilka kroków:
-
Użytkownik się loguje
Załóżmy, że logujesz się do aplikacji bankowej swoim loginem i hasłem.
-
Dostawca tożsamości wydaje token
Po zweryfikowaniu dane logowania serwer uwierzytelniający odsyła token bearer. Może on wyglądać tak:
-
Klient używa tokenu
Za każdym razem, gdy klikniesz „Sprawdź saldo” lub „Przelej środki”, aplikacja dołącza token do żądania HTTP:
-
API go weryfikuje
Serwer sprawdza, czy token jest ważny, nie wygasł oraz czy zawiera odpowiednie uprawnienia (np.
read:balance
lubwrite:transfer
). -
Dostęp zostaje udzielony
Jeśli wszystko się zgadza, serwer zwraca żądane informacje.
Ten model jest szeroko wykorzystywany w usługach takich jak API GitHub, gdzie programiści uwierzytelniają się tokenem bearer zamiast podawać dane logowania przy każdym żądaniu.
Dlaczego tokeny bearer zyskały popularność
Tokeny bearer stały się popularne, ponieważ rozwiązały typowe problemy bezpieczeństwa w sieci. W przeciwieństwie do sesji po stronie serwera, nie trzeba dla każdego zalogowanego użytkownika przechowywać oddzielnych danych sesyjnych. Zamiast tego token sam zawiera wystarczającą informację, by serwer mógł zweryfikować żądania.
Na przykład w architekturze mikrousług, gdzie dziesiątki usług rozmawiają ze sobą, centralny magazyn sesji byłby trudny w utrzymaniu i nieefektywny. Dzięki tokenom bearer każda usługa może niezależnie weryfikować żądania, a system pozostaje lekki i skalowalny.
Konkretna sytuacja: API Slacka w dużej mierze opierają się na tokenach bearer. Gdy budujesz bota Slacka, dostajesz token, który umożliwia botowi wykonywanie zapytań do API Slacka bez konieczności utrzymywania sesji dla każdego użytkownika.
Co zawiera token bearer?
Wiele tokenów bearer jest implementowanych jako JWT (JSON Web Tokens). Są to zakodowane ciągi zawierające informacje o użytkowniku i jego uprawnieniach.
Rozkodujmy przykładowy JWT:
Co to znaczy:
sub
: Podmiot, czyli unikalny ID użytkownika.name
: Imię i nazwisko użytkownika.iat
: Czas wygenerowania tokenu (issued at).exp
: Czas ważności (do kiedy token jest ważny).scope
: Zakres uprawnień — w tym przypadku aplikacja może zarówno czytać, jak i zapisywać wiadomości.
W praktyce, jeśli token Jane miałby tylko zakres read:messages
, aplikacja mogłaby pobierać jej wiadomości, ale nie wysyłać nowych w jej imieniu.
Tokeny bearer vs tokeny dostępu: jaka jest różnica?
Łatwo pomylić tokeny bearer z tokenami dostępu, ponieważ oba pojęcia często pojawiają się razem. Są powiązane, ale nieidentyczne.
Token dostępu: „Zgoda na dostęp”
Token dostępu to dane poświadczające, że użytkownik jest uprawniony do uzyskania dostępu do zasobu. Zawiera informacje takie jak:
- Kim jest użytkownik (jego ID)
- Do czego ma dostęp (zakresy/uprawnienia)
- Kiedy token wygasa
To jak zgoda podpisana przez dyrektora szkoły. Mówi nauczycielowi (API), że możesz jechać na wycieczkę (uzyskać dostęp do zasobu).
Na przykład po zalogowaniu do usługi przechowywania plików w chmurze system wydaje token dostępu z zakresem read:files
. Ten token mówi API: „Ten użytkownik może czytać pliki, ale nie może ich usuwać”.
Token bearer: „Format przekazania”
Token bearer to rodzaj tokenu dostępu. Słowo bearer opisuje sposób użycia tokenu: ten, kto go przedstawia, może uzyskać dostęp do zasobów bez dalszego udowadniania tożsamości.
Innymi słowy:
- Wszystkie tokeny bearer są tokenami dostępu.
- Ale nie każdy token dostępu musi być tokenem bearer.
Istnieją też inne typy tokenów, np. holder-of-key, które wymagają od klienta udowodnienia posiadania określonego klucza kryptograficznego oprócz samego tokenu. Tokeny bearer pomijają ten krok, co czyni je prostszymi, ale też bardziej ryzykownymi w razie kradzieży.
Przykład w praktyce
- Token dostępu (ogólny): Może być podpisanym fragmentem danych. Czasami klient musi udowodnić, że posiada również prywatny klucz.
- Token bearer (konkretny): Większość implementacji OAuth 2.0 wydaje tokeny dostępu właśnie jako tokeny bearer. Przykładowo Google OAuth zwraca token dostępu, który wykorzystujesz w nagłówku Authorization: Bearer
<token>
.
Oznacza to, że kiedy w tutorialach OAuth pojawia się „token dostępu”, prawie zawsze chodzi o token bearer, o ile nie wskazano inaczej.
Porównanie z innymi typami tokenów
Aby lepiej zobaczyć różnice, zerknijmy na porównanie tokenów bearer z innymi popularnymi typami:
- Refresh token: Służy do uzyskania nowego tokenu dostępu, kiedy stary wygaśnie. Tokeny odświeżania zwykle nie są tokenami bearer, bo wymienia się je bezpośrednio tylko z serwerem autoryzacji, a nie wysyła do API.
- ID token: Służy do uwierzytelniania, a nie autoryzacji. Zawiera informacje identyfikacyjne użytkownika (email, imię, ID itp.). W niektórych systemach ID token może też być bearer, ale jego zastosowanie jest inne niż tokenu dostępu.
- Klucz API (API key): Prostszy rodzaj poświadczenia, który identyfikuje aplikację wywołującą API. W wielu przypadkach klucze API zachowują się jak tokeny bearer — kto je posiada, może korzystać z API.
Tokeny bearer i tokeny dostępu nie są przeciwieństwami — łączy je zakres:
- Większość tokenów dostępu to tokeny bearer.
- Token bearer opisuje sposób użycia tokenu (przedstaw, by uzyskać dostęp).
- Na co dzień pojęcia „token dostępu” i „token bearer” często stosuje się zamiennie, choć technicznie kładą nacisk na inne aspekty.
Jak zweryfikować token JWT (token bearer)
Weryfikacja tokenu bearer chroni API przed nieautoryzowanym dostępem. Jeśli używasz JWT, walidacja odbywa się lokalnie i szybko — API może sprawdzić token bez każdorazowej konsultacji z wystawcą.
Główna koncepcja
- Parsuj token.
- Zweryfikuj podpis za pomocą klucza publicznego wystawcy.
- Sprawdź standardowe claims, takie jak issuer, audience, expiry, not-before.
- Narzuć zasady swojej aplikacji: zakresy, role, typ tokenu.
- Opcjonalnie sprawdzaj listę cofnięcia lub stan sesji przy operacjach podwyższonego ryzyka.
Lista kontrolna weryfikacji (JWT)
Potraktuj to jako instrukcję do użycia przy budowie gateway'a API lub middleware.
-
Podpis
Zweryfikuj podpis wykorzystując algorytm w nagłówku (np. RS256). Pobierz endpoint JWKS wystawcy, wybierz klucz po kid i cachuj go.
-
Issuer (iss)
Porównaj iss zaufanego wystawcy z URL tokenu, dokładnie i z odpowiednim schematem.
-
Audience (aud)
Sprawdź, czy token był przeznaczony dla twojego API. Porównaj z identyfikatorem API, jak https://api.example.com lub logicznym ciągiem audience.
-
Expiration (exp) i Not-Before (nbf)
Odrzucaj tokeny po wygaśnięciu. Uwzględnij nbf, by token nie działał przed czasem startu. Dopuszczalny jest mały margines (typowo 30–60 sekund).
-
Issued-At (iat)
Przydaje się przy debugowaniu i odrzucaniu bardzo starych tokenów w rygorystycznych ustawieniach.
-
Typ tokenu
Upewnij się, że to token dostępu. Niektórzy dostawcy umieszczają typ: "at+jwt" lub podobne. Nie akceptuj tokenów ID jako dostępu do API.
-
Zakresy / uprawnienia
Odczytaj scope lub claims specyficzne dla dostawcy (np. permissions, roles). Zastosuj zasadę najmniejszych uprawnień na każdym endpointzie.
-
Subjekt (sub)
Stabilne ID użytkownika lub klienta. Używaj do łączenia zasobów i do audytu.
-
Replay i cofnięcie (opcjonalnie, ale warto)
Dla wrażliwych endpointów sprawdź krótkotrwałą denylistę wartości jti, lub aktywny rekord sesji. Pomaga to po wylogowaniu lub podejrzeniu naruszenia.
Zagrożenia bezpieczeństwa związane z tokenami bearer
Ponieważ tokeny bearer oznaczają „kto je ma, ten korzysta”, należy traktować je jak klucze do domu. Jeśli ktoś je ukradnie, ma dostęp dopóki nie zmienisz zamka.
Typowe zagrożenia to:
- Kradzież tokenu – Jeśli haker zdobędzie dostęp do localStorage przeglądarki, gdzie zapisano token, może podszyć się pod użytkownika. Przykładowo w 2018 roku niektóre wtyczki przeglądarek kradły tokeny z localStorage i sprzedawały je.
- Ataki powtórzeniowe (replay) – Atakujący, który przechwyci token, może użyć go ponownie aż do wygaśnięcia. Jeśli nie używasz HTTPS, jest to zaskakująco łatwe.
- Długoterminowe tokeny – Jeśli token jest ważny przez tygodnie lub miesiące, wydłuża to czas, w którym atakujący mogą go wykorzystać.
W praktyce do wycieków dochodziło, gdy deweloperzy przez przypadek zamieszczali tokeny bearer w publicznych repozytoriach GitHub. Atakujący mogą je łatwo odnaleźć i natychmiast wykorzystać.
Najlepsze praktyki korzystania z tokenów bearer
Aby używać tokenów bearer bezpiecznie, warto trzymać się najlepszych praktyk. Oto ich przegląd z przykładami:
-
Zawsze używaj HTTPS
Wyobraź sobie wysyłanie tokenu po zwykłym HTTP w kawiarni. Każdy, kto podsłuchuje sieć, mógłby przechwycić token i zalogować się jako ty.
-
Krótkoterminowe tokeny dostępu
Większość platform wydaje tokeny ważne przez najwyżej godzinę. Przykładowo tokeny OAuth Google wygasają zwykle po godzinie i wymagają odświeżenia.
-
Uważnie przechowuj tokeny odświeżania
Token odświeżania może żądać nowych tokenów dostępu bez ponownego logowania. Należy jednak przechowywać go bezpiecznie (np. w zaszyfrowanej bazie na serwerze), nie po stronie klienta.
-
Przyznawaj tokenom tylko niezbędne uprawnienia
Jeśli twoja aplikacja musi tylko odczytywać kalendarz użytkownika, nie proś o write:calendar. Ogranicza to szkody w razie przechwycenia tokenu.
-
Unieważniaj token, gdy trzeba
Wiele aplikacji SaaS pozwala użytkownikom przeglądać aktywne sesje i unieważniać je. Na przykład GitHub pozwala w każdej chwili cofnąć własne tokeny osobiste.
-
Monitoruj użycie
Logowanie użycia tokenów może ujawnić podejrzane działania. Jeśli ten sam token nagle używany jest w Londynie i Nowym Jorku w przeciągu kilku minut, to niepokojący sygnał.
Tokeny bearer vs inne metody uwierzytelniania
Warto porównać tokeny bearer z innymi popularnymi rozwiązaniami:
-
Cookies & Sesje
Tradycyjne strony internetowe korzystają z sesji po stronie serwera, identyfikowanych ciasteczkiem. To dobrze działa w aplikacjach przeglądarkowych, ale jest mniej efektywne dla API czy aplikacji mobilnych. Przykładowo, logowanie do Facebooka na komputerze to głównie cookies, a w API mobilnym — tokeny.
-
Klucze API
Klucz API to statyczny ciąg znaków uwierzytelniający aplikację, nie użytkownika. Na przykład aplikacja pogodowa używa klucza API do pobierania danych, ale ten klucz nie pozwala serwerowi ustalić, który użytkownik prosi o prognozę. Tokeny bearer mogą przenosić dane o użytkowniku, co czyni je bardziej uniwersalnymi.
-
Mutual TLS (mTLS)
W systemach wymagających wysokiego poziomu zabezpieczeń stosuje się certyfikaty zarówno po stronie klienta, jak i serwera. Takie rozwiązanie jest bezpieczne, ale trudne do wdrożenia na dużą skalę. Dla większości platform SaaS tokeny bearer są kompromisem między użytecznością a bezpieczeństwem.
Najważniejsze wnioski
- Tokeny bearer są proste, ale potężne: kto je posiada, ten ma dostęp do zasobu.
- Są powszechnie używane w OAuth 2.0 i OIDC, zwłaszcza w API i aplikacjach mobilnych.
- Bezpieczeństwo zależy od zarządzania: istotny jest krótki czas życia tokenu, zakres, HTTPS i możliwość ich unieważnienia.
- Nie zawsze są najlepszym wyborem, ale w kontekście SaaS i API zwykle zapewniają właściwy kompromis między wygodą a bezpieczeństwem.