Maison > développement back-end > tutoriel php > Explication détaillée d'exemples d'utilisation de JWT pour créer un jeton en PHP

Explication détaillée d'exemples d'utilisation de JWT pour créer un jeton en PHP

coldplay.xixi
Libérer: 2023-04-08 20:02:02
avant
5489 Les gens l'ont consulté


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

Période d'expiration tr>


iss (issuer)issuer 请求实体,可以是发起请求的用户的信息,也可是jwt的签发者
sub (Subject) 设置主题,类似于发邮件时的主题
aud (audience) 接收jwt的一方
exp (expire)token 过时间期
nbf (not before) 当前时间在nbf设定时间之前,该token无法使用
iat (issued at)token 创建时间
jti (JWT ID) 对当前token设置唯一标示

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)
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
jti (ID JWT) Définir un identifiant unique pour le jeton actuel
Préparation avant l'instance

Les principales références de dépendance sont enregistrées ci-dessous :

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';
Copier après la connexion

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 jeton

use 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();
Copier après la connexion

Vérifiez le jeton

use Lcobucci\JWT\Signer\Hmac\Sha256;
$parse = (new Parser())->parse($token);
$signer = new Sha256();
$parse->verify($signer,'签名key');// 验证成功返回true 失败false
Copier après la connexion
Le 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();
Copier après la connexion

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')));
))
Copier après la connexion

Obtenir des données

Parce 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'));
Copier après la connexion
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!

Étiquettes associées:
source:liqingbo.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal