JWT не «расшифровывается» — он не зашифрован.
Это просто Base64URL-кодированный JSON:
header.payload.signature
payload можно прочитать всегда: base64url_decode($payloadPart) — там будут iat, exp, iss, aud, sub и т.д.
а вот чтобы доверять данным, нужно проверить подпись. В случае Apple токен подписан ES256, и проверять его надо по публичному ключу Apple из JWKS: https://appleid.apple.com/auth/keys
В PHP удобно использовать, например:
firebase/php-jwt или lcobucci/jwt — они умеют и декодировать, и валидировать подпись.
JWT не шифруется — он всего лишь кодируется в Base64URL.
Токен состоит из трёх частей: header.payload.signature.
jwt.decode() просто раскодирует header и payload → поэтому содержимое видно без секрета.
А вот проверка подлинности токена — это уже verify, там используется секрет/ключ и проверяется подпись.
Итог: прочитать можно всегда, доверять — только после проверки подписи.
Если нужно быстро посмотреть payload/exp/claims прямо в браузере и без копипасты, удобно использовать локальный DevTools-инструмент для JWT (декодирование происходит прямо на клиенте, без отправки токена куда-то).
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Это просто Base64URL-кодированный JSON:
header.payload.signature
payload можно прочитать всегда: base64url_decode($payloadPart) — там будут iat, exp, iss, aud, sub и т.д.
а вот чтобы доверять данным, нужно проверить подпись. В случае Apple токен подписан ES256, и проверять его надо по публичному ключу Apple из JWKS:
https://appleid.apple.com/auth/keys
В PHP удобно использовать, например:
firebase/php-jwt или lcobucci/jwt — они умеют и декодировать, и валидировать подпись.