composer 下载:
composer require 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设置唯一标示
<?php
require 'vendor/autoload.php';
use Lcobucci\JWT\Builder;
use \Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Parser;
$builder = new Builder();
$signer = new Sha256();
$secret = "51talk@)!*";
//设置header和payload,以下的字段都可以自定义
$builder->setIssuer("51talk.com") //发布者
->setAudience("51talk.com") //接收者
->setId("abc", true) //对当前token设置的标识
->setIssuedAt(time()) //token创建时间
->setExpiration(time() + 60) //过期时间
->setNotBefore(time() + 5) //当前时间在这个时间前,token不能使用
->set('uid', 30061); //自定义数据
//设置签名
$builder->sign($signer, $secret);
//获取加密后的token,转为字符串
$token = (string)$builder->getToken();
var_dump($token)
?>
<?php
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
require 'vendor/autoload.php';
$signer = new Sha256();
$secret = "51talk@)!*";
//获取token
$token = isset($_SERVER['HTTP_AUTHORIZATION']) ? $_SERVER['HTTP_AUTHORIZATION'] : '';
$token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6ImFiYyJ9.eyJpc3MiOiI1MXRhbGsuY29tIiwiYXVkIjoiNTF0YWxrLmNvbSIsImp0aSI6ImFiYyIsImlhdCI6MTU5NDk5Njg2NCwiZXhwIjoxNTk0OTk2OTI0LCJuYmYiOjE1OTQ5OTY4NjksInVpZCI6MzAwNjF9.5uWluExF8_6oB9AyG08-P2FXF1jQrixad54vh97QsqQ";
if (!$token) {
invalidToken('Invalid token');
}
try {
//解析token
$parse = (new Parser())->parse($token);
//验证token合法性
if (!$parse->verify($signer, $secret)) {
invalidToken('Invalid token');
}
//验证是否已经过期
if ($parse->isExpired()) {
invalidToken('Already expired');
}
//获取数据
echo '<pre>';
$a = $parse->getClaims();
echo $a['uid'];
var_dump($parse->getClaims());
} catch (Exception $e) {
//var_dump($e->getMessage());
invalidToken('Invalid token');
}
function invalidToken($msg) {
header('HTTP/1.1 403 forbidden');
exit($msg);
}