JWT使用流程
1、初次登录:用户初次登录,输入用户名密码
2、密码验证:服务器从数据库取出用户名和密码进行验证
3、生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT
4、返还JWT:服务器的HTTP RESPONSE中将JWT返还
5、带JWT的请求:以后客户端发起请求,HTTP REQUEST
6、HEADER中的Authorizatio字段都要有值,为JWT
7、服务器验证JWT
1、composer安装php-jwt命令
$composer require firebase/php-jwt
2、服务端生成Token
<?php
use \Firebase\JWT\JWT; //导入JWT
class MainController extends Controller{
//生成Token
public function lssue()
{
$key = '344'; //key
$time = time(); //当前时间
$token = [
'iss' => 'http://www.helloweba.net', //签发者 可选
'aud' => 'http://www.helloweba.net', //接收该JWT的一方,可选
'iat' => $time, //签发时间
'nbf' => $time , //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
'exp' => $time+7200, //过期时间,这里设置2个小时
'data' => [ //自定义信息,不要定义敏感信息
'userid' => 1,
'username' => '李小龙'
]
];
echo JWT::encode($token, $key); //输出Token
}
}
3、服务端解析校验Token
<?php
use \Firebase\JWT\JWT; //导入JWT
class MainController extends Controller{
public function verification()
{
$key = '344'; //key要和签发的时候一样
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC93d3cuaGVsbG93ZWJhLm5ldCIsImF1ZCI6Imh0dHA6XC9cL3d3dy5oZWxsb3dlYmEubmV0IiwiaWF0IjoxNTI1MzQwMzE3LCJuYmYiOjE1MjUzNDAzMTcsImV4cCI6MTUyNTM0NzUxNywiZGF0YSI6eyJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiXHU2NzRlXHU1YzBmXHU5Zjk5In19.Ukd7trwYMoQmahOAtvNynSA511mseA2ihejoZs7dxt0"; //签发的Token
try {
JWT::$leeway = 60;//当前时间减去60,把时间留点余地
$decoded = JWT::decode($jwt, $key, ['HS256']); //HS256方式,这里要和签发的时候对应
$arr = (array)$decoded;
print_r($arr);
}catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
echo $e->getMessage();
}catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
echo $e->getMessage();
}catch(\Firebase\JWT\ExpiredException $e) { // token过期
echo $e->getMessage();
}catch(Exception $e) { //其他错误
echo $e->getMessage();
}
//Firebase定义了多个 throw new,我们可以捕获多个catch来定义问题,catch加入自己的业务,比如token过期可以用当前Token刷新一个新Token
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注【森林君博客】!
如果文章对你有帮助,你可以点击右边的 $ 打赏小编哟!
打赏小编
- 支付宝扫一扫
- 微信扫一扫