美文网首页
用户身份标识——用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

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

  • jwt、session、oauth 异同

    1,jwt 和session机制 首先jwt 和session机制 都是用户认证的,oauth 不是 sessio...

  • Django中的JWT

    JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证...

  • JWT使用

    JWT公司的主流Json Web Token 令牌 如何使用,取代session,还可以运用分布式认证 JWT简介...

  • REST framework JWT Auth

    JWT 在用户注册或登陆后,我们想要记录用户的登陆状态,或者为用户创建身份认证的凭证。我们不再使用Session认...

  • JWT认证机制

    JWT认证机制session不可跨域,用户信息保存在服务器端;JWT可以跨域,用户信息保存在浏览器; JWT工作原...

  • .NET Core5.0 JWT鉴权SSO单点登录

    JWT JWT全称“JSON Web Token”,是基于JSON的用户身份认证的令牌。可跨域身份认证,所以JWT...

  • 网络

    cookie、session、jwt cookie是将用户信息存在cookie中,但是不安全session验证是登...

  • dvwa-Weak Session IDs

    用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识。用户拿到 sessio...

  • 认证,令牌

    session方法; Token方法: base64url转码格式 使用jwt实现身份验证

网友评论

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

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