JWT задаёт переносимый формат claims, который можно подписать или зашифровать и передавать между сторонами. Подписанный токен позволяет проверять целостность данных без отдельного запроса к его издателю каждый раз.
Подписанный JWT можно декодировать, потому что Base64URL не является шифрованием. Изменить его байты можно, но корректная проверка подписи обнаружит подмену без знания ключа.
В распространённом подписанном JWT заголовок, payload и подпись кодируются Base64URL без завершающего padding и разделяются точками. Заголовок и claims представлены JSON в UTF-8.
Access-токен проверяется на каждом защищённом запросе; refresh — только на endpoint обновления и по серверному состоянию сессии. Для немедленного отзыва JWT нужен stateful-механизм, не одна подпись.
Само знание алгоритма не позволяет подделать корректно подписанный JWT: алгоритмы публичны, безопасность опирается на секретный или закрытый ключ. Слабый ключ и ошибки проверки меняют ситуацию.
Для подписанного JWT библиотека проверяет JWS над header и payload выбранным доверенным ключом. Хеширование даёт необратимый отпечаток, шифрование скрывает данные с возможностью расшифрования.
Токен позволяет не передавать основной пароль каждому сервису и каждому запросу, ограничить срок и область доступа. JWT можно проверять локально по подписи, но он не обязателен: непрозрачные токены тоже подходят.
Подписанный JWT позволяет проверять ограниченный набор утверждений без обращения к общему хранилищу сессий. Цена — более сложный отзыв и риск устаревших прав.