Jetons JWT en PHP : bibliothèque firebase/php-jwt et guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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-jwt

Aprè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('

Recommendations