Jetons JWT en PHP : guide complet pour la bibliothèque firebase/php-jwt
JSON Web Token (JWT) est un moyen compact et sécurisé de transférer des données entre un client et un serveur au format JSON. Dans le développement web moderne, JWT est largement utilisé pour l'authentification et l'autorisation des utilisateurs, ainsi que pour l'échange d'informations entre différents services. En PHP, la bibliothèque la plus populaire et fiable pour travailler avec JWT est firebase/php-jwt.
Qu'est-ce que JWT et pourquoi en a-t-on besoin ?
JWT se compose de trois parties séparées par des points :
- Header — l'en-tête contenant des informations sur le type de jeton et l'algorithme de signature.
- Payload — la charge utile avec les données (par exemple, l'ID utilisateur, le rôle, la date d'expiration).
- Signature — la signature créée à l'aide d'une clé secrète ou d'une paire de clés RSA/ECDSA.
Principaux avantages de JWT :
- Ne nécessitent pas de stockage de sessions sur le serveur (stateless).
- Peuvent contenir n'importe quelles données au format JSON.
- Prennent en charge différents algorithmes de signature : HS256, RS256, ES256 et autres.
- Résistants à la falsification grâce à la signature cryptographique.
Installation de la bibliothèque firebase/php-jwt
Pour installer la bibliothèque, utilisez Composer. Ouvrez un terminal dans le dossier racine de votre projet et exécutez la commande :
composer require firebase/php-jwtAprès l'installation, incluez l'autoloader de Composer dans votre script PHP :
<?phprequire_once __DIR__ . '/vendor/autoload.php';
use Firebase\\JWT\\JWT;use Firebase\\JWT\\Key;?>Création d'un jeton JWT
Pour créer un jeton, vous devez définir la charge utile (payload) et la signer avec une clé secrète. Exemple de création d'un jeton avec l'algorithme HS256 :
<?php$key = 'votre-clé-secrète-ici'; // Clé secrète (au moins 32 caractères)$payload = [ 'iss' => 'pythonlib.ru', // Émetteur du jeton 'sub' => '1234567890', // Sujet (par exemple, ID utilisateur) 'name' => 'Ivan Ivanov', 'role' => 'user', 'iat' => time(), // Date de création 'exp' => time() + 3600 // Durée de validité (1 heure)];
$jwt = JWT::encode($payload, $key, 'HS256');echo "Jeton JWT créé :" . $jwt;?>Dans cet exemple, nous définissons les champs standards : iss (émetteur), sub (sujet), iat (date de création) et exp (date d'expiration). Vous pouvez ajouter des champs personnalisés, comme role ou email.
Décodage et vérification d'un jeton JWT
Lors de la réception d'un jeton du client, vous devez vérifier sa signature et sa date d'expiration. La bibliothèque vérifie automatiquement l'algorithme et la validité de la signature :
<?phptry { $decoded = JWT::decode($jwt, new Key($key, 'HS256')); print_r($decoded);} catch (\\Firebase\\JWT\\ExpiredException $e) { echo "Erreur : le jeton a expiré — " . $e->getMessage();} catch (\\Firebase\\JWT\\SignatureInvalidException $e) { echo "Erreur : signature invalide — " . $e->getMessage();} catch (\\Exception $e) { echo "Erreur : " . $e->getMessage();}?>La méthode decode() retourne un objet stdClass avec les données du payload. Si le jeton est invalide, une exception correspondante est levée. Il est recommandé de toujours gérer les exceptions ExpiredException et SignatureInvalidException.
Utilisation du chiffrement asymétrique (RS256)
Pour renforcer la sécurité, utilisez l'algorithme RS256 avec une paire de clés (privée/publique). Cela est particulièrement pertinent dans une architecture de microservices :
<?php// Génération des clés (exécutée une fois)// openssl genrsa -out private.pem 2048// openssl rsa -in private.pem -pubout -out public.pem
$privateKey = file_get_contents(' Aussi dans la bibliothèque
Poco C++ : guide complet avec exemples pratiques
Awilix pour TypeScript : guide complet avec exemples
Internationalisation (i18n) en Java : guide complet avec exemples
Génération de PDF en C# (.NET) : Guide complet des bibliothèques
Envoi d'email en Rust : bibliothèques lettre et mailparse pour travailler avec le courrier