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

 

相关文章