JWT (JSON Web Tokens) est un standard ouvert basé sur JSON pour transmettre en toute sécurité des informations entre deux applications. Il se compose de 3 parties : en-tête, charge utile et signature. L'en-tête contient des métadonnées sur le jeton, la charge utile est la partie qui stocke réellement les informations et la signature est utilisée pour vérifier l'intégrité du message.
Dans cet article, nous explorerons comment implémenter JWT en utilisant PHP.
JWT doit être installé via Composer. Si vous n'avez pas installé Composer, vous pouvez l'installer avec la commande suivante :
curl -sS https://getcomposer.org/installer | php
Déplacez ensuite le fichier exécutable Composer dans le répertoire /usr/local/bin :
sudo mv composer.phar /usr/local/bin/composer
Dépendances d'installation :
composer require firebase/php-jwt
Tout d'abord, nous devons créer un jeton en utilisant la fonction jwt_encode()
de PHP. Voici un exemple : jwt_encode()
函数创建一个Token。下面是一个示例:
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $payload = array( "iss" => "localhost", "aud" => "localhost", "iat" => time(), "exp" => time()+60*60 //有效期1小时 ); $jwt = JWT::encode($payload, $key);
在上述例子中,我们使用jwt_encode()
函数来创建一个JWT。$key
变量包含着JWT的密钥,$payload
变量包含了需要传输的信息和过期时间。过期时间可以使用PHP的time()
函数获取。最后,jwt_encode()
函数会返回一个JWT字符串。
我们需要使用PHP的jwt_decode()
函数来验证JWT。下面是一个示例:
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw"; try { $decoded = JWT::decode($jwt, $key, array('HS256')); print_r($decoded); } catch (Exception $e) { echo 'Invalid token: ' . $e->getMessage(); }
在上述例子中,我们使用了jwt_decode()
函数来验证JWT。如果验证通过,函数将返回一个包含了JWT的信息的对象。
签名用于验证JWT的完整性。我们需要使用一个密钥来对消息进行签名,这个密钥只有签名验证机制才知道。当接收者接收到消息时,他将使用相同的密钥对这个消息进行解密和验证。
JWT使用了一种叫做“哈希消息认证码”(HMAC)的技术来对JWT进行签名。这个技术需要将JWT的Header和Payload进行哈希计算,然后再与密钥进行组合。接下来是签名验证的例子:
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw"; try { $decoded = JWT::decode($jwt, $key, array('HS256')); $decoded_array = (array) $decoded; $signature_valid = JWT::verify("$jwt->header.$jwt->payload", $jwt->signature, $key); if ($signature_valid) { echo "Valid signature"; } else { echo "Invalid signature"; } } catch (Exception $e) { echo 'Invalid token: ' . $e->getMessage(); }
在上述例子中,我们使用了verify()
函数来验证签名。这个函数将会返回一个布尔值,如果结果为true,表示签名是有效的。
总结
在这篇文章中,我们简要地介绍了如何使用PHP实现JWT。首先,我们需要安装JWT的依赖库,然后使用jwt_encode()
函数创建Token,使用jwt_decode()
函数验证Token,最后使用verify()
rrreee
jwt_encode()
pour créer un JWT. La variable $key
contient la clé JWT, et la variable $payload
contient les informations à transmettre et l'heure d'expiration. Le délai d'expiration peut être obtenu à l'aide de la fonction time()
de PHP. Enfin, la fonction jwt_encode()
renvoie une chaîne JWT. 🎜jwt_decode()
de PHP pour vérifier le JWT. Voici un exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé la fonction jwt_decode()
pour vérifier le JWT. Si la vérification réussit, la fonction renverra un objet contenant les informations JWT. 🎜verify()
pour vérifier la signature. Cette fonction renverra une valeur booléenne Si le résultat est vrai, cela signifie que la signature est valide. 🎜🎜Résumé🎜🎜Dans cet article, nous avons brièvement présenté comment implémenter JWT à l'aide de PHP. Tout d'abord, nous devons installer la bibliothèque dépendante de JWT, puis utiliser la fonction jwt_encode()
pour créer le jeton, utiliser la fonction jwt_decode()
pour vérifier le jeton, et enfin utilisez verify()La fonction vérifie la signature. Ces fonctions peuvent être implémentées via la bibliothèque JWT de Firebase. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!