В чем причина кодирования JWT?

#encoding #base64 #jwt

#кодирование #base64 #jwt

Вопрос:

Насколько мне известно о безопасности JWT, если токен JWT не содержит конфиденциальной информации, мы используем только его функцию подписи, чтобы нельзя было манипулировать его содержимым. В противном случае, если он содержит конфиденциальные данные, его можно зашифровать, чтобы защитить данные от перехвата. Кроме того, при необходимости можно использовать оба из них.
Однако я не могу понять, почему токен не является простым json? Почему он кодируется, в то время как его можно легко декодировать? Есть ли у этого соображения безопасности или за этим стоит другая причина?
Я поискал в сети, а также бегло просмотрел RFC 7519, но не смог найти никаких четких и убедительных ответов.

Ответ №1:

В основном для облегчения обработки JWT.

JWT представлен в виде последовательности частей, безопасных для URL, разделенных символами точки (‘ . ‘). Каждая часть содержит значение, закодированное в base64url.

Это гарантирует, что а) весь токен безопасен для URL, что упрощает работу с технологией, которая в основном используется в веб контексте; и б) упрощает обработку «частей», поскольку разделитель частей (‘ . ‘) гарантированно не встречается внутри самих частей. Если бы это был обычный JSON, точка могла находиться где угодно внутри самого закодированного значения, и вам нужно было бы применить более сложный синтаксический анализ с поддержкой JSON, чтобы найти отдельные части. Но, учитывая гарантию того, что часть не может содержать точки из-за того, что она закодирована в base64url, алгоритм синтаксического анализа прост:

  1. Убедитесь, что JWT содержит хотя бы один символ точки (‘ . ‘).

  2. Пусть закодированный заголовок JOSE будет частью JWT перед символом первой точки (‘ . ‘).

  3. Base64url декодирует закодированный заголовок JOSE, соблюдая ограничение, согласно которому не использовались разрывы строк, пробелы или другие дополнительные символы.

(Все выдержки из RFC.)