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);
    ?>
  • 相关阅读:
    Laravel 5.1 简单学习
    Laravel5.1 报错:控制器不存在
    集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念
    UDS(ISO14229-2006) 汉译(No.7 应用层协议)
    Freescale 车身控制模块(BCM) 解决方案
    汽车控制器LIMPHOME电路设计
    区分整流二极管和稳压二极管
    耦合电容和滤波电容的区别
    二极管钳位电路
    开关二极管工作原理
  • 原文地址:https://www.cnblogs.com/gaosf/p/14360411.html
Copyright © 2011-2022 走看看