PHP使用JWT创建Token的实例详解-php教程

资源魔 40 0

PHP应用JWT创立Token简略示例

依赖

环境:php 5.5 以上 + OpenSSL扩大

lcobucci/JWT

可以使用composer 装置

composer require lcobucci/jwt

也能够间接到 GitHub下载

GitHub地点: https://github.com/lcobucci/jwt

参数诠释



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设置惟一标示

实例前预备

上面记载次要的依赖援用:

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';

当然它们外面另有更多的援用需求你本人加,这个正在你调试时依据谬误提醒一个个补就行了,这里就没有多写了。

实例

应用【lcobucci/JWT】孕育发生 Token 的形式有两种,正在这里我只实验了第二种。

第一种:应用秘钥署名天生 token

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();

验证 Token

use Lcobucci\JWT\Signer\Hmac\Sha256;
$parse = (new Parser())->parse($token);
$signer = new Sha256();
$parse->verify($signer,'署名key');// 验证胜利前往true 失败false

第二种:应用RSA以及ECDSA署名

RSA以及ECDSA署名是基于公钥以及私钥,以是必需应用私钥天生以及验证应用

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();

最初还能够经过强迫转换的方式来拿到你想要的纯字符串的 Token

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

以及前真个交互能够放正在前往的 JSON 格局中经过参数带过来,也能够寄存正在 header Authorization 中。

验证 Token

$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')));
))

猎取数据

由于数据局部能够间接猎取到,不必解密。以是正在验证token非法后间接读取便可,这也是没有要正在载体中寄存敏感信息的缘由。

$parse = (new Parser())->parse($token);
// 猎取全副信息,前往一个数组,
var_dump($parse->getClaims());
// 猎取单条信息
var_dump($parse->getClaim('aud'));

保举教程:《PHP视频教程》

以上就是PHP应用JWT创立Token的实例详解的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 Token,JWT

抱歉,评论功能暂时关闭!