JWT (JSON Web Token) - это стандарт открытых токенов, используемый для организации безопасного обмена информацией между двумя сторонами в виде JSON объекта. JWT обычно используется для аутентификации и авторизации пользователей в веб-приложениях.
Для создания JWT авторизации с использованием PHP вам понадобится библиотека, такая как "firebase/php-jwt". Вы можете установить ее с помощью Composer с помощью следующей команды:
composer require firebase/php-jwt
После установки библиотеки вы можете начать создавать JWT токены. Вот пример кода:
use FirebaseJWTJWT; // Установка ключа подписи $key = "secret_key"; // Данные пользователя для создания токена $userData = array( "id" => 1, "username" => "username", "email" => "[email protected]" ); // Установка времени истечения токена $expirationTime = time() + (60 * 60); // 1 час // Создание токена $token = array( "iss" => "http://example.com", "aud" => "http://example.com", "iat" => time(), "exp" => $expirationTime, "data" => $userData ); // Подпись токена $jwt = JWT::encode($token, $key); // Вывод токена echo $jwt;
В этом примере мы сначала устанавливаем ключ подписи (secret_key), который будет использоваться для подписи токена. Затем мы создаем массив userData, содержащий данные пользователя, которые мы хотим включить в токен.
Затем мы устанавливаем время истечения токена (expirationTime) и создаем основной массив токена. В этом массиве мы указываем издателя (iss), аудиторию (aud) и указываем текущее время (iat) и время истечения (exp) токена. Мы также включаем данные пользователя внутри ключа "data".
Затем мы подписываем токен, используя ключ подписи, с помощью метода JWT::encode()
, и выводим полученный токен.
При получении этого токена на сервере, вы можете использовать тот же ключ подписи для проверки подлинности токена и извлечения данных пользователя. Вот пример кода для проверки токена:
use FirebaseJWTJWT; // Получение токена из запроса $jwt = $_SERVER['HTTP_AUTHORIZATION']; // Установка ключа подписи $key = "secret_key"; try { // Проверка токена $token = JWT::decode($jwt, $key, array('HS256')); // Извлечение данных пользователя $userData = $token->data; // Доступ к данным пользователя $userId = $userData->id; $username = $userData->username; $email = $userData->email; // Дополнительная логика с данными пользователя // Ответ сервера $response = array( "status" => "success", "message" => "Authenticated" ); echo json_encode($response); } catch (Exception $e) { // Если токен недействителен или произошла ошибка при проверке http_response_code(401); $response = array( "status" => "error", "message" => "Unauthorized" ); echo json_encode($response); }
В этом примере мы сначала получаем токен из заголовка HTTP_AUTHORIZATION запроса. Затем мы устанавливаем ключ подписи (secret_key) и используем метод JWT::decode()
для проверки подлинности и получения данных из токена.
Если токен действителен и успешно проверен, вы можете получить доступ к данным пользователя, извлеченным из токена.
В противном случае, если токен недействителен или произошла ошибка при проверке, мы отправляем ответ с кодом 401 (Unauthorized) и сообщением об ошибке.
Это основная концепция создания JWT авторизации с использованием PHP. Однако, убедитесь, что вы проработали все дополнительные проверки подлинности и безопасности перед использованием JWT в реальном веб-приложении.