美文网首页
用户身份标识——用JWT取代SESSION

用户身份标识——用JWT取代SESSION

作者: 生当作人杰_25a2 | 来源:发表于2018-02-01 14:34 被阅读0次

    1.0、使用JWT的目的

    传统的web浏览器和服务器之间采用的是COOKIE+SESSION的方式来识别用户身份。

    当在非web浏览器时[比如android或者ios],我们需要使用JWT来识别用户身份。

    2.0、JWT的工作原理

    大致原理:

    用户登录时发送请求数据[用户名、密码等数据]给服务端验证密码正确后,服务端将此用户数据[一般是用户的id]经过   加密  形成密文后,最终将JWT[密文和明文的id等数据]一并返回给客户端保存;

    后续客户端需要携带JWT等请求数据给服务器进行身份确认[将明文   加密    后与密文对比],对比通过的就是登录用户,反之为未登录。

    专业原理:

    自行百度了解

    2.1、jwt格式

    xxxxxx.yyyyyyyyyyy.zzzzzzz

    由点号分隔的三串。

    3.0、使用php语言实现JWT

    不知道怎么发代码,截图如下

    代码粘贴

    ?phpclass JWT{public static $token=null;/*第一段,加密方式规定等参数,个人觉得没啥用*/public function getFirst(){return base64_encode(json_encode(['typ'='JWT','alg'=>'HS256']));}/*第二段,用户标识--一般存用户唯一字段id*/public function getSecond($cin){return base64_encode(json_encode(['sub'=>$cin,'iss'=>'http://www.phpweilai.cc','iat'=>time(),//token创建时间'exp'=>time()+60,//token过期时间'nbf'=>time()+360,//刷新token时间'jti'=>time(),//token唯一标识,貌似没用]));}/*第三段,将前两段明文加密[校验用]*/public function getThird($first,$second){$pwd='fjieo99===-----8383jkd';return md5(md5($first.$second.$pwd));}/*获取jwt方式生成的token字符串,整合前三段*/public function getToken($cin){$cin=strval($cin);if(empty($cin)){return false;}$first=$this->getFirst();$second=$this->getSecond($cin);$third=$this->getThird($first,$second);$data=[$first,$second,$third,];return self::$token=implode('.', $data);}/*解析token,得到用户标识*/public function getData($token){$data=explode('.', $token);if(count($data)<3){return 'token不合法!';}$third=$this->getThird($data[0],$data[1]);if($third!==$data[2]){return '非法token!';}$cout=json_decode(base64_decode($data[1]),true);if($cout['exp']getThird($data[0],$data[1]);if($third != $data[2]){return '非法token!';}$cout=json_decode(base64_decode($data[1]),true);// 必须是过期的jwt才可以刷新if($cout['exp']>=time()){return '您的token未过期,无法重新生成!';}// 如果超过刷新时间,用户需要手动重新登录if($cout['nbf']getToken($cout['sub']);}}$obj=new JWT;//---1.生成token---------------------$token=$obj->getToken('hello world');echo $token;die;//---1.生成token---------------------//---2.用token获取用户信息---------------------$token='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJoZWxsbyB3b3JsZCIsImlzcyI6Imh0dHA6XC9cL3d3dy5waHB3ZWlsYWkuY2MiLCJpYXQiOjE1MTc0NjYyMzEsImV4cCI6MTUxNzQ2NjI5MSwibmJmIjoxNTE3NDY2NTkxLCJqdGkiOjE1MTc0NjYyMzF9.9088e071056ede0c826a6245ccd5eb60';$info=$obj->getData($token);//---2.用token获取用户信息---------------------//---3.token过期后刷新token---------------------echo '

    ',$info;$new_token=$obj->refreshToken($token);echo '

    ',$new_token;//---3.token过期后刷新token---------------------$new_info=$obj->getData($new_token);echo '

    ',$new_info;

    4.0说明

    该代码不可用于生产,需要自行更改参数后使用。如果由于本代码造成的损失,本作者概不负责!

    相关文章

      网友评论

          本文标题:用户身份标识——用JWT取代SESSION

          本文链接:https://www.haomeiwen.com/subject/oijdzxtx.html