Шаг 1: Установка библиотеки для работы с JWT:
Используем библиотеку firebase/php-jwt для удобной работы с токенами JWT. Вы можете установить её с помощью Composer:
Bash:
composer require firebase/php-jwt
Шаг 2: Создание функций для генерации и проверки токенов:
Создадим файл jwt_functions.php, который будет содержать функции для генерации и проверки токенов.
PHP:
<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
// Секретный ключ для подписи токена
$secretKey = 'your_secret_key';
// Функция для генерации токена
function generateToken($userId) {
global $secretKey;
$tokenId = base64_encode(random_bytes(32));
$issuedAt = time();
$notBefore = $issuedAt;
$expire = $issuedAt + 3600; // токен действителен 1 час
$serverName = 'your_server_name'; // измените на имя вашего сервера
$token = [
'iat' => $issuedAt, // время создания токена
'jti' => $tokenId, // уникальный идентификатор токена
'iss' => $serverName, // издатель токена
'nbf' => $notBefore, // не раньше этого времени
'exp' => $expire, // время истечения токена
'data' => [
'userId' => $userId, // дополнительные данные о пользователе
]
];
return JWT::encode($token, $secretKey, 'HS256');
}
// Функция для проверки токена
function validateToken($token) {
global $secretKey;
try {
$decoded = JWT::decode($token, $secretKey, ['HS256']);
return $decoded->data->userId; // возвращаем идентификатор пользователя
} catch (\Exception $e) {
return null; // токен недействителен
}
}
?>
Шаг 3: Использование функций в веб-приложении:
Используем созданные функции в своем веб-приложении для аутентификации пользователя и защиты ресурсов.
PHP:
<?php
// Подключаем файл с функциями для работы с JWT
require 'jwt_functions.php';
// Пример аутентификации пользователя и генерации токена
$userId = 1; // Идентификатор пользователя из базы данных
$token = generateToken($userId);
// Передаем токен клиенту (например, в виде cookie или заголовка)
// Пример защиты ресурса с использованием токена
$receivedToken = $_COOKIE['auth_token']; // Получаем токен от клиента (пример)
$authenticatedUserId = validateToken($receivedToken);
if ($authenticatedUserId !== null) {
// Пользователь успешно аутентифицирован, продолжаем выполнение запроса
echo "Доступ к защищенному ресурсу для пользователя с ID: $authenticatedUserId";
} else {
// Пользователь не аутентифицирован, возвращаем ошибку или перенаправляем на страницу входа
echo "Ошибка: Пользователь не аутентифицирован!";
}
?>
Это основы реализации аутентификации и авторизации с использованием токенов JWT на стороне сервера с помощью PHP. Обратите внимание на безопасность и обработку ошибок при добавлении этого метода в ваше веб-приложение.