php实现jwt

摘要:
它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。
一:JWT是什么

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。

JWT由三个部分组成:header.payload.signature

二:代码实现
classJWT {
          private static $header=array(
            'alg'=>'SHA256', //生成signature的算法
            'typ'=>'JWT'  //类型
);
          private static $payload=array(
          );
        //使用HMAC生成信息摘要时所使用的密钥
          private static $key='123456';
          publicfunction getToken(){
              //这是第一部分
              $base64 =json_encode(self::$header);
              $baseencode =base64_encode($base64);

              self::$payload['time']=time()+3600;//过期时间
              self::$payload['uid']=110;
              $basepayLoad64=json_encode(self::$payload);
              $base64payload =base64_encode($basepayLoad64);
              //生成签名
              $input = $baseencode.".".$base64payload;
              $token = $this->signature($input,self::$key,self::$header['alg']);
              $token =base64_encode($token);
              $token = $input.".".$token;
              return$token;
          }

          publicfunction signature($input,$key,$alg){
              $base64 = hash_hmac($alg,$input,$key,true);
              
              return$base64;
          }
          //如何做校验
          publicfunction check($token){
              list($base64,$payload,$signature)=explode(".",$token);

              $input = $base64.".".$payload;
              $newSignature = $this->signature($input,self::$key,self::$header['alg']);
              $newSignature =base64_encode($newSignature);

              if($newSignature ==$signature){
                  $str =base64_decode($payload);
                  $arr = json_decode($str,true);
                  print_r($arr);
              }

          }
    }
    $objjwt = newJWT();
    $accessToken = $objjwt->getToken();

    $objjwt->check($accessToken);
?>

免责声明:文章转载自《php实现jwt》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Selenium3+python3自动化(四十一)--Chrome浏览器静默模式启动(headless)SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS全局添加token

全局添加token var token = sessionStorage.getItem("UserTocken"); if(token){ $.ajaxSetup({ //发送请求前触发 beforeSend: function(xhr) { //可以设置自定义标头 xhr....

Consul Windows集群搭建ACL Token验证

前言: 由于网关将使用负载均衡进行解压,搭建多个服务器站点,所有学习了Consul服务发现,分享下自己在搭建中所遇到的问题 以及过程分享 前期准备: 由于本人公司电脑硬件硬盘比较差 ,只准备了两台机器 机器Ip 及端口 端口号 客户端类型 节点/服务名称 192.168.1.78 8500 Sever c1(Leader) 192.168.1....

html5对密码加密

今天找了几个关于对html5的密码加密的方法,仅供参考 1、base64加密:在页面中引入base64.js文件,调用方法为: <html> <head> <meta charset="utf-8"> <title>base64加密</title> <script type=...

跨域post 及 使用token防止csrf 攻击

环境: 后台使用的python - flask 前台使用angular框架 1.一个跨域post的样例: 跨域post有多种实现方式: 1.CORS:http://blog.csdn.net/hfahe/article/details/7730944 2.利用iframe 3.server proxy:https://en.wikipedia.o...

API接口之安全篇

APP、前后端分离项目都采用API接口形式与服务器进行数据通信,传输的数据被偷窥、被抓包、被伪造时有发生,那么如何设计一套比较安全的API接口方案呢? 一般的解决方案如下: 1、Token授权认证,防止未授权用户获取数据; 2、时间戳超时机制; 3、URL签名,防止请求参数被篡改; 4、防重放,防止接口被第二次请求,防采集; 5、采用HTTPS通信协议,防...

uniapp支付宝小程序上传图片转base64

最近使用uniapp涉及到一个上传图片的功能,原本看官方文档api觉得没问题,正常开发, 1. 首先微信端没问题 uni.getFileSystemManager().readFile({ filePath: url, //选择图片返回的相对路径 encoding: "base64", //编码格式 succes...