github: github.com/lcobucci/jw…
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 = "OOOO_WWW_EE_N__@server.zhang.com^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; } }