Каков максимальный размер токена JWT?

111

Мне нужно знать максимальную длину

Веб-токен JSON (JWT)

В спецификациях информации об этом нет. Может быть, ограничений по длине нет?

Богдан
источник

Ответы:

70

Как вы сказали, максимальная длина не определена в RFC7519 ( https://tools.ietf.org/html/rfc7519 ) или других RFC, связанных с JWS или JWE.

Если вы используете формат JSON Serialized или JSON Flattened Serialized, ограничений нет и нет причин для определения ограничения.

Но если вы используете формат JSON Compact Serialized (наиболее распространенный формат), вы должны иметь в виду, что он должен быть как можно короче, поскольку он в основном используется в веб-контексте. Вам следует избегать JWT размером 4 Кбайт.

Позаботьтесь о хранении только полезных утверждений и информации заголовка.

Флоран Морселли
источник
86

Я тоже пытался это найти.

Я бы сказал - попробуйте и убедитесь, что он меньше 7кб .

Хотя JWT не определяет верхнего предела в спецификации ( http://www.rfc-editor.org/rfc/rfc7519.txt ), у нас есть некоторые рабочие ограничения. Поскольку JWT включен в заголовок HTTP, у нас есть верхний предел ( SO: Максимум значений заголовка http ) в 8 КБ на большинстве текущих серверов.

Поскольку это включает все заголовки запросов <8 КБ, 7 КБ дают разумное количество места для других заголовков. Самый большой риск для этого лимита - файлы cookie (отправляются в заголовках и могут стать большими).

Поскольку он зашифрован и использует base64ed, исходная строка json теряется не менее 33%, поэтому обязательно проверьте длину окончательного зашифрованного токена.

И последнее: прокси и другие сетевые устройства могут применять произвольное ограничение по пути ...

Penderi
источник
2
Есть ли практическая причина избегать «больших» токенов в диапазоне 2–3 КБ?
Сэмюэл Элрод
1
@SamuelElrod, вероятно, это зависит от требований вашего приложения. 2-3 КБ на каждый запрос, связанный с JWT, добавляют приличный объем багажа, который каждый раз переносится по сети. Если это повлияет на воспринимаемую пользователем производительность, вы должны это ограничить.
Джек
1
Старайтесь не раздувать токен. Я бы сказал, что 2-3k уже становится слишком большим, что у вас там? Мой текущий токен составляет 320 байт.
user2800708 07
4
Я подумываю добавить карту привилегий в свою. он будет содержать общую информацию JWT текущего пользователя, а также карту, содержащую user_id и тип привилегий для всех пользователей, для которых у них есть привилегии. Теоретически это могло расти неограниченно.
Нейт может
1
Интересно, я тоже сейчас подумываю перелопатить карту привилегий. Прямо сейчас мой план состоит в том, чтобы использовать наивный подход и перелопатить их как массив JSON, и если это проблема, я постараюсь упаковать контент в двоичном формате в будущем.
Ciantic 09
5

При использовании heroku заголовок будет ограничен до 8k. В зависимости от того, сколько данных вы используете на jwt2, он будет достигнут. Запрос, если он слишком велик, не коснется вашего экземпляра узла, маршрутизатор heroku сбросит его до уровня вашего API.

При обработке входящего запроса маршрутизатор устанавливает буфер приема 8 КБ и начинает чтение строки запроса HTTP и заголовков запроса. Каждый из них может иметь длину не более 8 КБ, но вместе они могут быть более 8 КБ. Запросы, содержащие строку запроса или строку заголовка длиннее 8 КБ, будут отброшены маршрутизатором без отправки.

См .: Пределы Heroku

Тьяго Гувеа
источник