В чем причина кодирования JWT? - PullRequest
1 голос
/ 06 марта 2019

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

1 Ответ

3 голосов
/ 06 марта 2019

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

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

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

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

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

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

...

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

...