安装
composer require lcobucci/jwt 3.3
封装
<?php namespace tools\jwt; use Lcobucci\JWT\Builder; use Lcobucci\JWT\Signer\Key; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\ValidationData; use Lcobucci\JWT\Parser; class Token { static private $_config=[ 'audience' => 'http://127.0.0.1/token',//接收人 'id' => '1806',//token的唯一标识,这里只是一个简单示例 'sign' => 'Mr.cao',//签名密钥 'issuer' => 'http://127.0.0.1/user_id',//签发人 'expire' => 3600*2 //有效期 ]; //生成token static public function getToken($k,$v) { $signer = new Sha256(); $time = time(); $token = (new Builder())->issuedBy(self::$_config['issuer']) // 签发人 ->permittedFor(self::$_config['audience']) // 接收人 ->identifiedBy(self::$_config['id'], true) // 唯一标识 可以自己写,也可以随机生成 ->issuedAt($time) // 签发时间 ->canOnlyBeUsedAfter($time - 1) // 生效时间 ->expiresAt($time + 3600) // 过期时间 ->withClaim($k, $v) // 用户id ->getToken($signer, new Key(self::$_config['sign'])); // 生成token return (string)$token; } //验证token static public function verifyToken($token) { $signer = new Sha256(); $token = (new Parser())->parse((string) $token); $data = new ValidationData(); //验证签发人 $data->setIssuer(self::$_config['issuer']); //验证接收人 $data->setAudience(self::$_config['audience']); //验证唯一表示 $data->setId(self::$_config['id']); //签发人 和上述验证 if($token->verify($signer, self::$_config['sign']) && $token->validate($data)){ return true; }else{ return false; } } //从token中获取信息 static public function getTokenMessege($token) { $res = self::verifyToken($token); if (!$res){ return '无效的token'; } $token = (new Parser())->parse((string)$token); return $token->getClaims(); } }
使用
use tools\jwt\Token; //封装命名空间\类 //生成token public function getToken(){ $token = Token::getToken(5); return $token; } //测试token public function testToken(Request $request){ //接收token $token = $request->param('token'); $data = Token::getTokenMessege($token); return $data; }