Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung von Beispielen für die Verwendung von JWT zum Erstellen von Token in PHP

Detaillierte Erläuterung von Beispielen für die Verwendung von JWT zum Erstellen von Token in PHP

coldplay.xixi
Freigeben: 2023-04-08 20:02:02
nach vorne
5488 Leute haben es durchsucht


Detaillierte Erläuterung von Beispielen für die Verwendung von JWT zum Erstellen von Token in PHP

PHP verwendet JWT, um ein einfaches Token-Beispiel zu erstellen

Abhängigkeiten

Umgebung: PHP 5.5 oder höher + OpenSSL-Erweiterung

lcobucci/JWT

Sie können Composer zur Installation verwenden

Composer erfordert lcobucci/jwt

Sie können auch direkt von GitHub herunterladen

GitHub-Adresse: https://github.com/lcobucci/jwt

Parametererklärung

Ablaufzeitraum 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 Die anfragende Entität kann die Information des Benutzers sein Wer hat die Anfrage initiiert, oder es kann sich um den jwt-Aussteller handeln
sub (Betreff ) Legen Sie den Betreff fest, ähnlich dem Betreff beim Senden einer E-Mail
aud (Publikum) Die Partei, die jwt empfängt
exp (expire)token
nbf (nicht vorher) Die aktuelle Zeit ist Der Token kann nicht verwendet werden, bevor nbf die Zeit festlegt
iat (ausgestellt bei )token Erstellungszeit
jti (JWT-ID) Legen Sie eine eindeutige Kennung für das aktuelle Token fest
Vorbereitung vor der Instanz

Die wichtigsten Abhängigkeitsreferenzen sind unten aufgeführt:

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';
Nach dem Login kopieren

Natürlich sind darin weitere Referenzen enthalten, die Sie beim Debuggen einfach einzeln gemäß den Fehleraufforderungen ausfüllen müssen schreibe hier mehr.

Beispiel

Es gibt zwei Möglichkeiten, Token mit [lcobucci/JWT] zu generieren. Ich habe hier nur die zweite getestet.

Der erste: Verwenden Sie die Signatur des geheimen Schlüssels, um das Token zu generieren

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();
Nach dem Login kopieren

Token überprüfen

use Lcobucci\JWT\Signer\Hmac\Sha256;
$parse = (new Parser())->parse($token);
$signer = new Sha256();
$parse->verify($signer,'签名key');// 验证成功返回true 失败false
Nach dem Login kopieren
Der zweite: Verwenden Sie die RSA- und ECDSA-Signatur

RSA- und ECDSA-Signaturen basieren auf öffentlichen und privaten Schlüsseln, daher muss der private Schlüssel zum Generieren und Verifizieren mit

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();
Nach dem Login kopieren

Endlich ist es kann auch zur Konvertierung gezwungen werden, um den gewünschten reinen String-Token in der Form zu erhalten

$toekn = (string) $builder->getToken();

Die Interaktion mit dem Frontend kann im zurückgegebenen JSON-Format platziert werden. Das Format wird über Parameter übergeben und kann auch in der Header-Autorisierung gespeichert werden.

Verifizierungstoken

$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')));
))
Nach dem Login kopieren

Daten abrufen

Weil der Datenteil direkt ohne Entschlüsselung abgerufen werden kann. Daher können Sie es direkt lesen, nachdem Sie überprüft haben, ob das Token legal ist. Dies ist auch der Grund, warum vertrauliche Informationen nicht im Träger gespeichert werden sollten.

$parse = (new Parser())->parse($token);
// 获取全部信息,返回一个数组,
var_dump($parse->getClaims());
// 获取单条信息
var_dump($parse->getClaim('aud'));
Nach dem Login kopieren
Empfohlenes Tutorial: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für die Verwendung von JWT zum Erstellen von Token in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:liqingbo.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage