Обработка веб-токенов JSON (JWT) — распространенное требование в современной веб-разработке. JWT обеспечивают безопасный способ передачи данных между сторонами, но отслеживание срока действия токена имеет решающее значение для обеспечения целостности и безопасности вашего приложения. В этой статье мы рассмотрим пять простых способов проверить, истек ли срок действия токена JWT в PHP. Мы также предоставим примеры кода, которые помогут вам реализовать эти методы в ваших собственных проектах.
Метод 1: декодирование и проверка токена
Один из самых простых способов проверить, истек ли срок действия токена JWT, — это его декодирование и проверка заявления об истечении срока действия (exp) в полезных данных. Вот пример использования библиотеки firebase/php-jwt
:
use \Firebase\JWT\JWT;
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjAwMDAwMDAsInVzZXIiOiJhZG1pbiJ9.zNMS7sgqo9lQH6QzTsvl2sKkO6jLpaX5eBpNwlgcZNo';
$decodedToken = JWT::decode($token, $key, array('HS256'));
$expirationTime = $decodedToken->exp;
if ($expirationTime < time()) {
echo 'Token has expired.';
} else {
echo 'Token is still valid.';
}
Метод 2: используйте библиотеку JWT
Существует несколько библиотек PHP, которые могут упростить обработку JWT и предоставить встроенные методы для проверки срока действия токена. Одна из популярных библиотек — lcobucci/jwt
, которая предлагает удобный способ проверки срока действия токена:
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjAwMDAwMDAsInVzZXIiOiJhZG1pbiJ9.zNMS7sgqo9lQH6QzTsvl2sKkO6jLpaX5eBpNwlgcZNo';
$parser = new Parser();
$jwt = $parser->parse($token);
$validationData = new ValidationData();
$validationData->setCurrentTime(time());
if ($jwt->validate($validationData)) {
echo 'Token is still valid.';
} else {
echo 'Token has expired.';
}
Метод 3: извлечение заявления об истечении срока действия вручную
Если вы предпочитаете более ручной подход, вы можете извлечь заявление об истечении срока действия из токена и сравнить его с текущим временем. Вот пример:
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjAwMDAwMDAsInVzZXIiOiJhZG1pbiJ9.zNMS7sgqo9lQH6QzTsvl2sKkO6jLpaX5eBpNwlgcZNo';
$tokenParts = explode('.', $token);
$payload = base64_decode($tokenParts[1]);
$payloadData = json_decode($payload);
$expirationTime = $payloadData->exp;
if ($expirationTime < time()) {
echo 'Token has expired.';
} else {
echo 'Token is still valid.';
}
Метод 4: используйте библиотеку токенов JWT вашей платформы.
Если вы используете платформу PHP, которая предоставляет встроенную библиотеку токенов JWT, воспользуйтесь ею. Многие платформы, такие как Laravel, имеют библиотеки JWT с методами проверки срока действия токена. Вот пример использования пакета tymon/jwt-auth
в Laravel:
use Tymon\JWTAuth\Facades\JWTAuth;
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjAwMDAwMDAsInVzZXIiOiJhZG1pbiJ9.zNMS7sgqo9lQH6QzTsvl2sKkO6jLpaX5eBpNwlgcZNo';
if (JWTAuth::setToken($token)->check()) {
echo 'Token is still valid.';
} else {
echo 'Token has expired.';
}
Метод 5: использование отладчика «jwt.io».
Другой подход — использование отладчика «jwt.io», удобного онлайн-инструмента для проверки и отладки JWT. Просто вставьте свой токен в отладчик, и он автоматически отобразит дату истечения срока действия токена. Этот метод не требует какой-либо реализации кода, что делает его быстрым и простым способом проверить срок действия токена.