JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。
JWT由三个部分组成:header.payload.signature
classJWT { private static $header=array( 'alg'=>'SHA256', //生成signature的算法 'typ'=>'JWT' //类型 ); private static $payload=array( ); //使用HMAC生成信息摘要时所使用的密钥 private static $key='123456'; publicfunction 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; } publicfunction signature($input,$key,$alg){ $base64 = hash_hmac($alg,$input,$key,true); return$base64; } //如何做校验 publicfunction 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 = newJWT(); $accessToken = $objjwt->getToken(); $objjwt->check($accessToken); ?>