适用于分布式单点登录(SSO)
流程
客户端输入账号密码登录;
服务端判断登录信息,用户登录成功返回客户端token;
客户端存储token,每个请求都需要传递token到服务端;
服务端验证token的有效期,返回对应的信息;
构成
分为三部分
头部(header);2、载荷(payload, 数据信息);3、签证(signature).;
使用
生成token
$header = ['typ' => 'JWT', 'alg' => 'HS256'];//头部
$jwt_header = base64_encode(json_encode($header));
$time = time()+3600;//过期时间
$payload = ['username' => '张三', 'id' => '123', 'sub' => $time];//载荷
$jwt_payload = base64_encode(json_encode($payload));
$secret = 'abcdef';//设置的密钥
$jwt_sign = md5($jwt_header.$jwt_payload.$secret);
$token = $jwt_header.".".$jwt_payload.".".$jwt_sign;
验证token
$token_arr = explode('.',$token);
if(count($token_arr) != 3){
die('长度不对快跑');
}
$jwt_header = json_decode(base64_decode($token_arr[0]), true);
if($jwt_header['typ'] != 'JWT'){
die('数据不对快跑');
}
$jwt_payload = json_decode(base64_decode($token_arr[1]), true);
if($jwt_payload['sub'] < time()){
die('过期快跑');
}
$secret = 'abcdef';//设置的密钥
$jwt_sign = md5($token_arr[0].$token_arr[1].$secret);
if($token_arr[2] != $jwt_sign){
die('加密不对快跑');
}
来源地址:https://blog.csdn.net/shaoyangzhuanyong/article/details/127490658