php Jwt 验证
首先composer下载lcobucci/jwf扩展包:
composer require lcobucci/jwt
现在完成后在vendor目录下会生成以下文件:
下载完成后直接复制这个类就行了,记得修改命名空间!!!
<?php namespace app\utils; use Lcobucci\JWT\Builder; use Lcobucci\JWT\Parser; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Signer\Key; use Lcobucci\JWT\ValidationData; class JwtAuth { /** * @var 单例限制 */ static private $instance=null; /** * @var 秘钥信息 * 编码秘钥 * 解码秘钥 */ private $token; private $decodetoken; /** * @var头信息 * 发布者 * 接受者 * 识别码 * 有效周期 */ private $iss = "Phor"; private $aud = "App"; private $ident = "Esint"; private $effective_time = 60; /** * @var * 加密信息 */ public $uid; //多个加密信息 /** * @var 秘钥 */ private $secret = "ljbpyshagcssjcsa"; /** * @return JwtAuth|单例限制 */ static public function getInstance() { if (is_null(self::$instance)) { self::$instance = new self(); } return self::$instance; } /** * JwtAuth constructor. 私有化构造函数 单例 */ private function __construct() { } /** * 私有化克隆函数 */ private function __clone() { // TODO: Implement __clone() method. } /** * @param $uid * 初始化uid */ public function setUid($uid) { $this->uid = $uid; } /** * @return string * 调用token */ public function get_token() { $this->encode(); return (string)$this->token; } /** * @return 秘钥信息|\Lcobucci\JWT\Token * 编码token */ public function encode() { $signer = new Sha256(); $time = time(); $this->token = (new Builder()) ->issuedBy($this->iss) //颁发者 ->permittedFor($this->aud) // 接受者 ->identifiedBy($this->ident, true) // 识别码 ->issuedAt($time) // 颁发时间 (iat claim) ->canOnlyBeUsedAfter($time) //可用时间(nbf claim) ->expiresAt($time + $this->effective_time) //失效时间(exp claim) ->withClaim('uid', $this->uid) // 填充加密 "uid" // 填充加密 "uid" 多参数继续操作此方法 ->getToken($signer, new Key($this->secret)); // 返回token 加密方式Sha256 秘钥:secrect return $this->token; } /** * @param $token * 解码token */ public function setToken($token) { $this->token = (new Parser())->parse((string) $token); $this->decode(); } /** * 解码加密信息 */ public function decode(){ $this->uid = $this->token->getClaim('uid');//多参数这里也要添加多参数解码token } /** * @return mixed * 检验token信息 是否过期等 */ public function validate() { $data = new ValidationData(); $data->setIssuer($this->iss); $data->setAudience($this->aud); $data->setId($this->ident); $data->setCurrentTime(time()); return $this->token->validate($data); } /** * @return mixed * 验证token加密方式 以及秘钥 */ public function verify() { $signer = new Sha256(); return $this->token->verify($signer, new Key($this->secret)); } }
控制器调用方式(也可以放在公共方法里面):
public function testJwt(){ $jwt = JwtAuth::getInstance();//调用单例方法 $jwt->setUid('21345321');//需要加密的id $token = $jwt->get_token();//获取token $jwt->setToken($token); //存入token // var_dump($jwt->validate());//检验token是否过期等 返回true/false // var_dump($jwt->verify());//检验加密以及秘钥 返回true/false $jwt->setToken($token);//获取token $uid=$jwt->uid; print_r($uid);die; }
本文来自博客园,作者:小ྀ青ྀ年້,转载请注明原文链接:https://www.cnblogs.com/dalaowang/p/13492068.html