thinkphp5jwt请求颁发token详解接口安全

JWT应用场景

点击登入颁发token,下次请求带着token请求,对接口安全有保障,不会任何人都可以请求接口

JWT的优点

JWT的优点:用户会话信息保存在客户端,服务端再也不用操心用户的会话信息,即服务端无状态

JWT的缺点:只能被动等到token过期,不能主动失效token

导入文件到vendor目录下面,可以看我上传的jwt文件

下面是代码

//生成验签
function signToken($ip){

    $key="dt".$ip;      //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
    $token=array(
        "iss"=>$key,    //签发者 可以为空
        "aud"=>$ip,     //面象的用户,可以为空
        "iat"=>time()-3600,  //签发时间
        "nbf"=>time()-3600,    //在什么时候jwt开始生效  (这里表示生成1秒后才生效)
        "exp"=> time()+7200,  //token 过期时间,这里表示一个星期(60*60*24*7)=604800
        // "data"=>[           //记录的data的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
        //     "series_id"=>$series_id,
        //     "user_id"=>$user_id,
        //     "power"=>$user_power
        // ]
    );
    //    $jwt = JWT::encode($token, $key);  //原先写的,本地可以调用,现在线上不行,所以改为手动调用
    //  print_r($token);
    vendor('Firebase.php-jwt.src.JWT');
   // $JWT=new \Firebase\JWT\JWT();

    $jwt = \Firebase\JWT\JWT::encode($token, $key,"HS256");

    return $jwt;
}
    //验证token
    public function _initialize()
    {
        vendor('Firebase.php-jwt.src.JWT');

        $code = input();
        $status=array("code"=>500);
        if ($code['token']) {
            $ip=$this->request->ip();

            $key="dt".$ip;

            try {
                //JWT::$leeway = 60;//当前时间减去60,把时间留点余地
                $decoded = \Firebase\JWT\JWT::decode($code['token'], $key, array('HS256')); //HS256方式,这里要和签发的时候对应
                // $arr["data"]['token'] = (array)$decoded;
                // $arr['code']=200;
                // $arr['msg']="token验证通过";
                // echo json_encode($arr);
            } catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
                $status["msg"]="签名不正确";
                echo json_encode($status);
                exit();
            }catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
                $status["msg"]="token失效";
                echo json_encode($status);
                exit();
            }catch(\Firebase\JWT\ExpiredException $e) { // token过期
                $status["msg"]="token失效";
                echo json_encode($status);
                exit();
            }catch(Exception $e) { //其他错误
                $status["msg"]="未知错误";
                echo json_encode($status);
                exit();
            }
        }else{
            $status["msg"]="没有token";
            echo json_encode($status);
            exit();
        }

    }

你可能感兴趣的:(JWT)