#encoding #base64 #jwt
#кодирование #base64 #jwt
Вопрос:
Насколько мне известно о безопасности JWT, если токен JWT не содержит конфиденциальной информации, мы используем только его функцию подписи, чтобы нельзя было манипулировать его содержимым. В противном случае, если он содержит конфиденциальные данные, его можно зашифровать, чтобы защитить данные от перехвата. Кроме того, при необходимости можно использовать оба из них.
Однако я не могу понять, почему токен не является простым json? Почему он кодируется, в то время как его можно легко декодировать? Есть ли у этого соображения безопасности или за этим стоит другая причина?
Я поискал в сети, а также бегло просмотрел RFC 7519, но не смог найти никаких четких и убедительных ответов.
Ответ №1:
В основном для облегчения обработки JWT.
JWT представлен в виде последовательности частей, безопасных для URL, разделенных символами точки (‘
.
‘). Каждая часть содержит значение, закодированное в base64url.
Это гарантирует, что а) весь токен безопасен для URL, что упрощает работу с технологией, которая в основном используется в веб контексте; и б) упрощает обработку «частей», поскольку разделитель частей (‘ .
‘) гарантированно не встречается внутри самих частей. Если бы это был обычный JSON, точка могла находиться где угодно внутри самого закодированного значения, и вам нужно было бы применить более сложный синтаксический анализ с поддержкой JSON, чтобы найти отдельные части. Но, учитывая гарантию того, что часть не может содержать точки из-за того, что она закодирована в base64url, алгоритм синтаксического анализа прост:
Убедитесь, что JWT содержит хотя бы один символ точки (‘
.
‘).Пусть закодированный заголовок JOSE будет частью JWT перед символом первой точки (‘
.
‘).Base64url декодирует закодированный заголовок JOSE, соблюдая ограничение, согласно которому не использовались разрывы строк, пробелы или другие дополнительные символы.
…
(Все выдержки из RFC.)