Я думаю, что вы перепутали некоторые понятия. JWT, или более известные как JSON Web Tokens, построены на концепции криптологии кода аутентификации сообщения (MAC).
MAC дает возможность подтвердить, что сообщение пришло от указанного отправителя. Он не «шифрует» данные, поэтому вы можете видеть прямое содержание сообщения.
Base64 - это взаимный переводчик для любого типа данных, JWT будет использовать эту кодировку, чтобы вы могли помещать объекты, массивы или любые другие данные, которые вам нравятся, внутри этих токенов. Только он гарантирует, что в него не было внесено никаких изменений.
Например, пользователь A крадет JWT пользователя B. Он хочет получить доступ к большему количеству данных в течение большего периода времени, поэтому он пытается изменить свойство exp, он не может передать JWT с MAC, поскольку он не знает секрет (в вашем случае, $privateKey
).
Когда он отправит новый JWT на ваш сервер, он выдаст InvalidSignatureError
, который вы можете поймать с помощью блоков try catch finally
.
Это может привести к нескольким ошибкам, таким как токен с истекшим сроком, поэтому я бы предложил использовать catch(Exception $e)
, а затем поработать с типом ошибки.
Если вы хотите зашифровать содержимое (хотя оно и лишает смысла использование JWT), вы можете использовать LibSodium или контейнер , который я сделал , чтобы упростить его.
Если вы не хотите шифровать $token
, не помещайте в токен чувствительные элементы.