Який максимальний розмір маркера JWT?


111

Мені потрібно знати максимальну довжину

Веб-маркер JSON (JWT)

У специфікаціях немає інформації про це. Чи може це бути, обмежень у довжині немає?

Відповіді:


70

Як ви вже говорили, у RFC7519 не визначена максимальна довжина ( https://tools.ietf.org/html/rfc7519 ) або інших RFC, пов'язаних з JWS або JWE, .

Якщо ви використовуєте серіалізований формат JSON або формат JSON Flatrated Serialized, обмежень немає і немає причини визначати обмеження.

Але якщо ви використовуєте серійний формат JSON Compact (найпоширеніший формат), ви повинні пам’ятати, що він повинен бути максимально коротким, оскільки він в основному використовується в веб-контексті. JWT потужністю 4 кб - це те, чого вам слід уникати.

Слідкуйте за тим, щоб зберігати лише корисні претензії та інформацію в заголовку.


86

Я також намагався це знайти.

Я б сказав - спробуйте переконатися, що вона нижче 7 кб .

У той час як JWT не визначає верхньої межі у специфікації ( http://www.rfc-editor.org/rfc/rfc7519.txt ), у нас є деякі експлуатаційні обмеження. Оскільки JWT включений до заголовка HTTP, у нас є верхня межа ( SO: Максимальне значення значень заголовка http на більшості поточних серверів ) - 8K.

Оскільки це включає всі заголовки Request <8kb, при цьому 7kb дає достатньо місця для інших заголовків. Найбільший ризик для цього обмеження становлять файли cookie (надсилаються в заголовки і можуть бути великими).

Оскільки це зашифровано та base64ed, щонайменше 33% витрачається на початковий рядок json, тому перевіряйте довжину остаточного зашифрованого маркера.

Останнє значення - проксі-сервери та інші мережеві пристрої можуть застосовувати обмежувальну межу по дорозі ...


2
Чи є якісь практичні причини уникати "великих" жетонів в діапазоні 2-3 кбіт?
Самуель Елрод

1
@SamuelElrod це, швидше за все, залежить від вимог вашої програми. 2-3 кб на кожен запит, що включає JWT, додає пристойну кількість багажу, який кожен раз доставлятимуть по дроту. Якщо це впливає на сприйняття користувачем продуктивності, ви обмежите це.
Джек

1
Намагайтеся уникати роздуття вашого маркера. Я б сказав, що 2-3k вже стає занадто великим, що ти там маєш? Мій поточний маркер - 320 байт.
користувач2800708

4
Я розміщую карту привілеїв в шахті. він буде містити загальну інформацію про JWT поточного користувача, а також карту, що містить user_id та тип привілеїв для всіх користувачів, для яких вони мають привілеї. Це теоретично може зростати без обмежень.
Нейт

1
Цікаво, що я зараз також розглядаю можливість лопати карти привілеїв. Наразі мій план полягає в тому, щоб використовувати наївний підхід і розміщувати їх як масив JSON, і якщо це буде проблема, я спробую упакувати вміст у бінарний формат у майбутньому.
Сімантичний

5

При використанні heroku заголовок буде обмежений 8k. Залежно від того, скільки даних ви використовуєте на jwt2, вони будуть охоплені. Запит, коли нерозмірний розмір, не торкнеться вашого примірника вузла, маршрутизатор heroku видасть його перед вашим шаром API.

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

Див.: Обмеження Хероку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.