Jaki jest maksymalny rozmiar tokena JWT?

111

Muszę znać maksymalną długość

Token sieciowy JSON (JWT)

W specyfikacjach nie ma o tym informacji. Czy to możliwe, że nie ma ograniczeń co do długości?

Bogdana
źródło

Odpowiedzi:

70

Jak powiedziałeś, w RFC7519 ( https://tools.ietf.org/html/rfc7519 ) ani w innych specyfikacjach RFC związanych z JWS lub JWE nie określono maksymalnej długości .

Jeśli używasz formatu JSON Serialized lub JSON Flattened Serialized, nie ma żadnych ograniczeń i nie ma powodu, aby je definiować.

Ale jeśli używasz formatu JSON Compact Serialized (najpopularniejszy format), musisz pamiętać, że powinien być jak najkrótszy, ponieważ jest używany głównie w kontekście internetowym. JWT 4kb to coś, czego należy unikać.

Uważaj, aby przechowywać tylko przydatne oświadczenia i informacje nagłówka.

Florent Morselli
źródło
86

Ja też próbowałem to znaleźć.

Powiedziałbym - spróbuj i upewnij się, że jest poniżej 7kb .

Chociaż JWT nie definiuje górnego limitu w specyfikacji ( http://www.rfc-editor.org/rfc/rfc7519.txt ), mamy pewne ograniczenia operacyjne. Ponieważ token JWT jest zawarty w nagłówku HTTP, na większości obecnych serwerów obowiązuje górny limit ( SO: maksymalna wartość nagłówka http ) wynoszący 8 KB.

Ponieważ obejmuje to wszystkie nagłówki żądań <8kb, przy czym 7kb daje rozsądną ilość miejsca na inne nagłówki. Największym zagrożeniem dla tego limitu byłyby pliki cookie (wysyłane w nagłówkach i mogą być duże).

Ponieważ jest zaszyfrowany i oparty na base64, co najmniej 33% marnotrawstwa oryginalnego ciągu JSON, więc sprawdź długość końcowego zaszyfrowanego tokenu.

I ostatnia uwaga - serwery proxy i inne urządzenia sieciowe mogą po drodze nakładać abitrary limit ...

penderi
źródło
2
Czy jest jakiś praktyczny powód, aby unikać „dużych” żetonów w zakresie 2-3 kb?
Samuel Elrod
1
@SamuelElrod to prawdopodobnie zależy od wymagań aplikacji. 2-3 kb za każde żądanie dotyczące JWT dodaje przyzwoitą ilość bagażu do wniesienia za każdym razem. Jeśli ma to wpływ na wydajność postrzeganą przez użytkownika, należy to ograniczyć.
Jack
1
Staraj się unikać nadęcia tokena. Powiedziałbym, że 2-3k już robi się zbyt duże, co tam masz? Mój obecny token ma 320 bajtów.
user2800708
4
Rozważam umieszczenie w mojej mapie przywilejów. będzie zawierał wspólne informacje JWT bieżącego użytkownika, a także mapę zawierającą identyfikator_użytkownika i typ uprawnień dla wszystkich użytkowników, do których mają uprawnienia. Teoretycznie mogłoby to rosnąć bez ograniczeń.
Nate May
1
Ciekawe, teraz rozważam też przerzucenie mapy przywilejów. W tej chwili planuję zastosować naiwne podejście i odrzucić je jako tablice JSON, a jeśli będzie to problem, spróbuję w przyszłości spakować zawartość w formacie binarnym.
Ciantic
5

Podczas korzystania z heroku nagłówek będzie ograniczony do 8k. W zależności od tego, ile danych używasz w jwt2, będzie to osiągalne. Żądanie, gdy jest zbyt duże, nie dotknie instancji węzła, router heroku upuści ją przed warstwą API.

Podczas przetwarzania przychodzącego żądania router ustawia bufor odbioru o wielkości 8 KB i rozpoczyna odczytywanie wiersza żądania HTTP i nagłówków żądań. Każdy z nich może mieć maksymalnie 8 KB, ale łącznie może mieć więcej niż 8 KB. Żądania zawierające wiersz żądania lub wiersz nagłówka dłuższy niż 8 KB będą odrzucane przez router bez wysyłania.

Zobacz: Limity Heroku

Tiago Gouvêa
źródło