zoukankan      html  css  js  c++  java
  • php实现jwt

    一: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);
    ?>
  • 相关阅读:
    Android设备驱动安装
    昨晚摆乌龙了
    生活
    SQLSTATE=57019
    IBM项目六
    不吸烟了
    清明短假
    『ExtJS』使用中需要注意的一些事(持续更新)
    『Spring.Net』IoC 容器
    『Spring.Net』为什么使用?
  • 原文地址:https://www.cnblogs.com/gaosf/p/14360411.html
Copyright © 2011-2022 走看看