php实现jwt
2021-04-13 07:26
标签:密钥 exp ash payload code xpl hash lis 通过 JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。 JWT由三个部分组成:header.payload.signature php实现jwt 标签:密钥 exp ash payload code xpl hash lis 通过 原文地址:https://www.cnblogs.com/zh718594493/p/12391108.html一:JWT是什么
二:代码实现
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);
?>
下一篇:MVC-路由扩展-限制浏览器