清风徐来水波不兴 2020-03-01
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); ?>