Maison >développement back-end >tutoriel php >Explication détaillée d'exemples d'utilisation de JWT pour créer un jeton en PHP
PHP utilise JWT pour créer un exemple de jeton simple
Dépendances
Environnement : php 5.5 ou supérieur + extension OpenSSL
lcobucci/JWT
Vous pouvez utiliser composer pour installer
composer nécessite lcobucci/jwt
Vous pouvez également télécharger directement depuis GitHub
Adresse GitHub : https://github.com/lcobucci/jwt
Explication des paramètres
|
|||||||||||||||||
iss (issuer)issuer | L'entité demandeuse peut être les informations de l'utilisateur qui a initié la demande, ou il peut s'agir de jwt Issuer | ||||||||||||||||
sub (Sujet ) | Définissez le sujet, similaire au sujet lors de l'envoi d'un e-mail | ||||||||||||||||
aud (audience) | La partie recevant jwt | ||||||||||||||||
jeton exp (expire) | Période d'expiration|||||||||||||||||
nbf (pas avant) | L'heure actuelle est Le jeton ne peut pas être utilisé avant que nbf ne règle l'heure | ||||||||||||||||
iat (émis à )token | Heure de création | tr>||||||||||||||||
jti (ID JWT) | Définir un identifiant unique pour le jeton actuel |
define('DS', DIRECTORY_SEPARATOR); define('JWTPath', dirname(__FILE__) . DS); include_once JWTPath . 'Builder.php'; include_once JWTPath . 'Signer.php'; include_once JWTPath . 'Signer' . DS . 'Keychain.php'; include_once JWTPath . 'Signer' . DS . 'Rsa.php'; include_once JWTPath . 'Signer' . DS . 'Rsa' . DS . 'Sha256.php';Bien sûr, il y a d'autres références que vous devez ajouter vous-même, remplissez-les simplement une par une selon les invites d'erreur lors du débogage, je ne le ferai pas. écrivez plus ici.
Exemple
Il existe deux façons de générer un jeton en utilisant [lcobucci/JWT]. Le premier : utilisez la signature de clé secrète pour générer le jetonuse Lcobucci\JWT\Builder; use Lcobucci\JWT\Signer\Hmac\Sha256; $builder = new Builder(); $signer = new Sha256(); // 设置发行人 $builder->setIssuer('http://example.com'); // 设置接收人 $builder->setAudience('http://example.org'); // 设置id $builder->setId('4f1g23a12aa', true); // 设置生成token的时间 $builder->setIssuedAt(time()); // 设置在60秒内该token无法使用 $builder->setNotBefore(time() + 60); // 设置过期时间 $builder->setExpiration(time() + 3600); // 给token设置一个id $builder->set('uid', 1); // 对上面的信息使用sha256算法签名 $builder->sign($signer, '签名key'); // 获取生成的token $token = $builder->getToken();Vérifiez le jeton
use Lcobucci\JWT\Signer\Hmac\Sha256; $parse = (new Parser())->parse($token); $signer = new Sha256(); $parse->verify($signer,'签名key');// 验证成功返回true 失败falseLe second : utilisez la signature RSA et ECDSA
Les signatures RSA et ECDSA sont basées sur des clés publiques et privées, donc la clé privée doit être utilisée pour générer et vérifier à l'aide de
use Lcobucci\JWT\Signer\Keychain; // 注意这里使用的sha256 use Lcobucci\JWT\Signer\Rsa\Sha256; $signer = new Sha256(); $keychain = new Keychain(); $builder = new Builder(); $builder->setIssuer('http://example.com'); $builder->setAudience('http://example.org'); $builder->setId('4f1g23a12aa', true); $builder->setIssuedAt(time()); $builder->setNotBefore(time() + 60); $builder->setExpiration(time() + 3600); $builder->set('uid', 1); // 与上面不同的是这里使用的是你的私钥,并提供私钥的地址 $builder->sign($signer, $keychain->getPrivateKey('file://{私钥地址}')); $toekn = $builder->getToken();Enfin, il peut également être forcé de convertir Pour obtenir le jeton de chaîne pure que vous souhaitez sous la forme$toekn = (string) $builder->getToken();L'interaction avec le front-end peut être placé dans le JSON renvoyé. Le format est transmis via des paramètres et peut également être stocké dans l'en-tête Autorisation. Jeton de vérification
$signer = new \Lcobucci\JWT\Signer\Rsa\Sha256(); $keychain = new \Lcobucci\JWT\Signer\Keychain(); $parse = new \Lcobucci\JWT\Parser(); $parse->parse((string)$token); var_dump($token->verify($signer, $keychain->getPublicKey(self::$dir . '/public.key'))); ))Obtenir des donnéesParce que la partie données peut être obtenue directement sans décryptage. Par conséquent, vous pouvez le lire directement après avoir vérifié que le token est légal. C'est également la raison pour laquelle les informations sensibles ne doivent pas être stockées dans le support.
$parse = (new Parser())->parse($token); // 获取全部信息,返回一个数组, var_dump($parse->getClaims()); // 获取单条信息 var_dump($parse->getClaim('aud'));Tutoriel recommandé : "Tutoriel vidéo PHP"
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!