github: https://github.com/lcobucci/jwt/tree/3.2
1.安装
PHP 5.5+ (v3.2) and PHP 7.1 (v4.x)
OpenSSL Extension
"lcobucci/jwt": "^3.3"
composer require lcobucci/jwt
2. 一些参数说明
iss 【issuer】发布者的url地址
sub 【subject】该JWT所面向的用户,用于处理特定应用,不是常用的字段
aud 【audience】接受者的url地址
exp 【expiration】 该jwt销毁的时间;unix时间戳
nbf 【not before】 该jwt的使用时间不能早于该时间;unix时间戳
iat 【issued at】 该jwt的发布时间;unix 时间戳
jti 【JWT ID】 该jwt的唯一ID编号
3.使用
生成,验证token
namespace App\Common;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use InvalidArgumentException;
class Jwt{
//私钥,没有私钥不会认证通过
private $secret = "[email protected]^1#096&24%2020";
//令牌的过期时间
private $tokenTtl = 60 * 60 * 2;
//验证token
public function checkTokenJWT($token)
{
try{
$signer = new Sha256();
if (!$token) {
return false;
}
$parser = new Parser();
$parse = $parser->parse($token);
先验证私钥
if ($parse->verify($signer, $this->secret) === false) {
return false;
} else {
return [
'user_id' => $parse->getClaim("user_id"),
'user_name' => $parse->getClaim('user_name')
];
}
}catch (InvalidArgumentException $e){
return false;
}
}
//生成token
public function newTokenJWT($userId)
{
$builder = new Builder();
$signer = new Sha256();
//发布端url颁发者
$builder->setIssuer("server.owenzhang.cn");
//请求端URL访问群体
$builder->setAudience("owenzhang-user-token");
//唯一的jwt id作为头项复制
$builder->setId("fu51server", true);
//配置颁发令牌的时间
$builder->setIssuedAt(time());
//令牌可以使用的时间
$builder->setNotBefore(time() + 5);
//令牌的过期时间
$builder->setExpiration(time() + $this->tokenTtl);
//配置一个名为“user_id”的新声明
$builder->set("user_id", $userId);
//使用“$this->secret”作为密钥创建签名
$builder->sign($signer, $this->secret);
//生成的令牌
$token = $builder->getToken();
$tokenStr = (string)$token;
return $tokenStr;
}
}