Tokeny JWT ostatnimi czasy stały się bardzo popularną metodą uwierzytelniania w aplikacjach webowych. Choć jest to jeden z najbezpieczniejszych sposobów chronienia zasobów, a alternatyw na rynku brak – należy pamiętać, że każda róża ma kolce i także tutaj czyha wiele potencjalnych zagrożeń. Wynikają one głównie z błędów popełnianych przy implementacji. Aby się przed nimi ustrzec, warto trzymać się poniższych zasad:
- Upewnij się, że używasz odpowiednio złożonych kluczy szyfrujących o długości co najmniej 2048 bitów.
- Stwórz procedurę na wypadek wycieku klucza szyfrującego.
- Klucze powinny być przechowywane w odpowiednio bezpieczny sposób (np. nie powinny znajdować się w kodzie źródłowym).
- Przez serwer powinien być wymagany konkretny sposób podpisu – tak by nie była możliwa jego zmiana po stronie klienckiej.
- Zweryfikuj czy Twoja implementacja nie dopuszcza algorytmu podpisu „none”.
- Zweryfikuj czy Twoja implementacja na pewno sprawdza podpis (nie akceptuje pustego podpisu i rozróżniasz funkcje „verify()” i „decode()” ).
- Zweryfikuj czy tryb „debug” jest wyłączony i nie da się go wymusić po stronie klienckiej.
- Nie przesyłaj tokenów JWT w URL-u.
- Zweryfikuj czy w tokenie JWT nie ujawniasz poufnych informacji.
- Sprawdź, czy chronisz się przed atakiem typu „replay”.
- Zweryfikuj czy żywotność tokena jest odpowiednio krótka i czy rzeczywiście jest to poprawnie sprawdzane.
- Przemyśl czy nie potrzebujesz funkcji unieważniania pojedynczych tokenów.