JWT (JSON Web Token) — стандарт токенов, которым приложения подтверждают, что пользователь авторизован. Если вы разрабатываете API или отлаживаете авторизацию, рано или поздно нужно заглянуть внутрь токена. Разберём, как он устроен.
Как выглядит JWT
Это длинная строка из трёх частей, разделённых точками:
xxxxx.yyyyy.zzzzz
- Header (заголовок) — какой алгоритм подписи используется.
- Payload (полезная нагрузка) — сами данные: кто пользователь, когда токен истекает, какие у него права.
- Signature (подпись) — защита от подделки.
Первые две части — это просто данные, закодированные в Base64. Поэтому их можно прочитать.
Что значит «расшифровать»
Строго говоря, JWT не зашифрован, а закодирован. Header и Payload — это Base64 от обычного JSON (см. что такое Base64). Любой может раскодировать их и увидеть содержимое. Поэтому не кладите в JWT секреты — пароли, номера карт. Внутри только то, что не страшно показать.
Как посмотреть содержимое токена
Откройте инструмент JWT decoder, вставьте токен — и увидите разобранные Header и Payload в читаемом виде: имя пользователя, срок действия (exp), выданные права (scope/roles) и прочие поля. Декодирование идёт локально в браузере, токен никуда не отправляется.
Почему токен нельзя подделать
Раз содержимое можно прочитать, почему нельзя просто поменять «обычный пользователь» на «администратор»? Из-за третьей части — подписи. Она вычисляется из header, payload и секретного ключа, который знает только сервер. Изменив payload, вы сломаете подпись, и сервер отвергнет токен. Проверить подпись без ключа невозможно — это и есть защита.
Полезные поля payload
exp— время истечения (Unix-время; перевести в дату поможет конвертер времени).iat— когда выдан.sub— идентификатор пользователя.
Если поле exp в прошлом — токен просрочен, и сервер его не примет, даже если подпись верна.