Демистификация токена JWT в PHP: подробное руководство

Веб-токены JSON (JWT) стали популярным выбором для аутентификации и авторизации в веб-приложениях. В этой статье блога мы рассмотрим различные методы декодирования токенов JWT в PHP, а также приведем примеры кода. Независимо от того, являетесь ли вы новичком или опытным разработчиком, это подробное руководство поможет вам понять процесс декодирования токенов JWT и способы извлечения из них ценной информации.

Метод 1. Использование библиотеки «firebase/php-jwt».
Библиотека «firebase/php-jwt» предоставляет удобный способ обработки токенов JWT в PHP. Для начала установим библиотеку через Composer:

composer require firebase/php-jwt

После установки вы можете использовать библиотеку для декодирования токена JWT:

use \Firebase\JWT\JWT;
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
$decodedToken = JWT::decode($token, 'your_secret_key', array('HS256'));
print_r($decodedToken);

Метод 2. Использование библиотеки «lcobucci/jwt».
Другая популярная библиотека для работы с токенами JWT в PHP — «lcobucci/jwt». Давайте установим его с помощью Composer:

composer require lcobucci/jwt

Вот пример декодирования токена JWT с использованием этой библиотеки:

use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;
$token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.T4vc7X3rXb4KZgHJNoc0Zx9wXTbY0I-8F4p6YxHnL8E';
$jwt = (new Parser())->parse($token);
$decodedToken = $jwt->getClaims();
print_r($decodedToken);

Метод 3: ручное декодирование.
Если вы предпочитаете ручной подход, вы можете декодировать токены JWT без использования каких-либо внешних библиотек. Вот пример:

$token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.T4vc7X3rXb4KZgHJNoc0Zx9wXTbY0I-8F4p6YxHnL8E';
$tokenParts = explode('.', $token);
$header = base64_decode($tokenParts[0]);
$payload = base64_decode($tokenParts[1]);
$decodedToken = [
    'header' => json_decode($header, true),
    'payload' => json_decode($payload, true)
];
print_r($decodedToken);

В этой статье мы рассмотрели три различных метода декодирования токенов JWT в PHP. Мы рассмотрели использование библиотеки firebase/php-jwt, библиотеки lcobucci/jwt и ручной подход. У каждого метода есть свои преимущества, поэтому выберите тот, который лучше всего соответствует требованиям вашего проекта. Понимая декодирование токена JWT, вы можете уверенно извлекать и использовать информацию, содержащуюся в токене, для целей аутентификации и авторизации.

Не забывайте безопасно обращаться с токенами JWT и надежно защищать свои секретные ключи. Приятного кодирования!