• php Jwt 验证


    首先composer下载lcobucci/jwf扩展包:

    composer require lcobucci/jwt
    

     现在完成后在vendor目录下会生成以下文件:

     下载完成后直接复制这个类就行了,记得修改命名空间!!!

    <?php
    
    namespace  apputils;
    
    use LcobucciJWTBuilder;
    use LcobucciJWTParser;
    use LcobucciJWTSignerHmacSha256;
    use LcobucciJWTSignerKey;
    use LcobucciJWTValidationData;
    
    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 秘钥信息|LcobucciJWTToken
         * 编码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;
        }
  • 相关阅读:
    其他综合收益的会计处理
    公允价值变动损益与投资收益的区别是什么?
    公允价值变动损益属于什么科目
    交易性金融资产和其他权益工具投资的区别
    属于在某一时段内履行的履约义务的情形
    合同履约成本和合同取得成本
    linux find查找并拷贝 exec xargs区别[转载]
    centos 安装discuz
    批处理变量,扩展,及变量截取
    常用DDL
  • 原文地址:https://www.cnblogs.com/dalaowang/p/13492068.html
Copyright © 2020-2023  润新知