一: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); ?>