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);
    ?>
  • 相关阅读:
    HIDS逐渐的成为主流 java程序员
    怎样做反向域名解析(反向DNS解析)? java程序员
    入侵检测系统的性能的辨别(2) java程序员
    Codeforces Round #146 (Div. 2)
    usaco1.34Prime Cryptarithm
    poj3667 hotel(线段树区间合并)
    poj1330Nearest Common Ancestors(水LCA)
    hdu4135Coprime(容斥原理)
    hdu1541Stars(树状数组)
    usaco 1.43Arithmetic Progressions
  • 原文地址:https://www.cnblogs.com/zh718594493/p/12391108.html
Copyright © 2011-2022 走看看