Хотя я не говорю о людях, которые разработали JWT, я могу вспомнить одну главную причину, по которой ваше предложение не сработает:
Заголовки не позволяют переводить строки
Помните, что основной сценарий использования JWT - использовать его в качестве значения cookie. Файлы cookie попадают в заголовки. Значения заголовка не поддерживают символы новой строки: каждая пара ключ / значение заголовка должна помещаться на одной строке.
Поэтому произвольный JSON не будет работать для чего-то, что должно быть передано в качестве значения заголовка в HTTP-запросе. .
Следовательно, требуется некоторая кодировка - именно поэтому base64 используется в первую очередь. Причина, по которой base64 часто появляется, заключается в том, что она преобразует любой большой двоичный объект или строку во что-то, что может быть надежно перенесено как простой ascii практически при любых обстоятельствах. Т.е. три «полезных нагрузки» в кодировке base64, разделенные точками (что не является допустимым символом в кодировке base64), в значительной степени гарантированно безопасно транспортируют и не мешают между любыми системами.
JSON не может дать одинаковые гарантии,Конечно, вы могли бы удалить символы новой строки (JSON игнорирует пробелы в любом случае), но кавычки все еще являются проблемой: они должны быть закодированы в URL, и, возможно, не в других обстоятельствах, хотя они, вероятно, будут в порядке вЗаголовки HTTP. В результате это просто становится еще одной «ошибкой», когда разработчик пытается реализовать ее впервые.
Я уверен, что есть и другие причины: это не полный список.