码迷,mamicode.com
首页 > Web开发 > 详细

php实现jwt

时间:2020-03-01 18:24:25      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:密钥   exp   ash   payload   code   xpl   hash   lis   通过   

一:JWT是什么

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

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

二:代码实现

class JWT {
          private static $header=array(
            alg=>SHA256, //生成signature的算法
            typ=>JWT  //类型
          );
          private static $payload= array(
          );
        //使用HMAC生成信息摘要时所使用的密钥
          private static $key=123456;
          public function 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;
          }

          public function signature($input,$key,$alg){
              $base64 = hash_hmac($alg,$input,$key,true);
              
              return $base64;
          }
          //如何做校验
          public function 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 = new JWT();
    $accessToken = $objjwt->getToken();

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

 

php实现jwt

标签:密钥   exp   ash   payload   code   xpl   hash   lis   通过   

原文地址:https://www.cnblogs.com/zh718594493/p/12391108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!