PHP利用JWT实现token和refresh_token
引入
composer require firebase/php-jwt
require __DIR__ . '/vendor/autoload.php';
use Firebase\JWT\JWT;
1
2
3
4
1. 生成token
public function getToken()
{
$key = 'key'; // key
$time = time(); // 当前时间
$token = [
'iss' => 'http://www.buddha.com', // 签发者 可选
'aud' => 'http://www.buddha.com', // 接收该JWT的一方,可选
'iat' => $time, // 签发时间
'nbf' => $time , // (Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
'exp' => $time + 7200, // 过期时间,这里设置2个小时
'data' => [ // 自定义信息,不要定义敏感信息
'id' => 1,
'username' => 'buddha'
]
];
return JWT::encode($token, $key); // 输出Token
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2. 验证token
public function verification()
{
$key = 'key'; // key要和签发的时候一样
$jwt = ""; // 签发的Token
try {
JWT::$leeway = 60; // 当前时间减去60,把时间留点余地
$decoded = JWT::decode($jwt, $key, ['HS256']); // HS256方式,这里要和签发的时候对应
$arr = (array)$decoded;
return $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
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
3. 同时生成token和refresh_token
public function authorizations()
{
$key = 'ffdsfsd@4_45'; // key
$time = time(); // 当前时间
// 自定义信息
$token = [
'iss' => 'http://www.buddha.com', // 签发者 可选
'iat' => $time, // 签发时间
'data' => [ // 自定义信息,不要定义敏感信息
'id' => 1,
'username' => 'buddha'
]
];
$access_token = $token;
$access_token['scopes'] = 'role_access'; // token标识,请求接口的token
$access_token['exp'] = $time + 7200; // access_token过期时间,这里设置2个小时
$refresh_token = $token;
$refresh_token['scopes'] = 'role_refresh'; // token标识,刷新access_token
$refresh_token['exp'] = $time + (86400 * 30); // access_token过期时间,这里设置30天
$jsonList = [
'access_token' => JWT::encode($access_token, $key),
'refresh_token' => JWT::encode($refresh_token, $key),
'token_type' => 'bearer' // token_type:表示令牌类型,该值大小写不敏感,这里用bearer
];
// header("HTTP/1.1 201 Created");
return json_encode($jsonList); // 返回给客户端token信息
}
————————————————
版权声明:本文为CSDN博主「buddha程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rulaixiong/article/details/109531572
PHP利用JWT实现token和refresh_token相关推荐
- jwt 的 token 被获取怎么办
jwt 签发后,每次请求会续期,如果 token 被抓包后,别人得到后,有没有好的方案解决身份窃取问抗投诉服务器题? 签发 token 的时候加入一些验证信息,比如 IP 如果当前 request I ...
- Django+JWT实现Token认证
对外提供API不用django rest framework(DRF)就是旁门左道吗? 基于Token的鉴权机制越来越多的用在了项目中,尤其是对于纯后端只对外提供API没有web页面的项目,例如我们通 ...
- 前后端分离中使用基于jwt的token进行身份认证
基于jwt的Token认证机制可以看之前的文章: 基于JWT的Token认证机制实现 在前后端分离中,我们与前端约定一种身份认证机制.当用户登录的时候,我们会返回给前端一个token,前端会将toke ...
- jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题
一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...
- 在SPA应用中利用JWT进行身份验证
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. https://blog.csdn.net/chszs/article/details/79639919 在SPA应用中利用JWT进行 ...
- 接口使用jwt返回token_Java中使用JWT生成Token进行接口鉴权实现方法
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
- 利用JWT安全验证(前后端分离,单点登录,分布式微服务)
JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk/jjwt JWT请求流程 用户使用账号和面发出post请求: 服务 ...
- API接口之JWT设置token过期时间(二)
目录 1.什么是Jwt 2.token是什么 3.为什么要使用token 4.如何实现token 5.JWT的简单案例 6.API接口token案例 6.1 token的创建 6.2 用户验证流程 7 ...
- java 接口鉴权_安全|Java中使用JWT生成Token进行接口鉴权实现
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
- java 接口 token_Java中使用JWT生成Token进行接口鉴权实现方法
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
最新文章
- 20家股东联名施压,要求贝佐斯停止向警方出售面部识别软件
- NeurIPS 2021六篇杰出论文公布,谷歌工程师11年前论文获时间检验奖
- HeartBeat 集群组件概述
- Kotlin之函数作为参数传递
- 单一登录云:SAML和OpenId
- c++中的map容器
- 虽然有失落的即时通讯
- WordPress苏醒Grace v8.2博客主题模板去sq版
- 计算机word艺术字形状设置,4.11 Word 2016 自定义艺术字的形状效果,制作漂亮的艺术字...
- JDK8的下载和安装,以及配置环境变量
- 基于matlab的天线方向图
- 如何理解阿里月饼事件中各方的表现
- 分布式调度架构:单体调度
- D - Power Tower欧拉降幂公式
- matlab求解不等式方程组解集,matlab求不等式方程组的可行解
- 数据上链——区块链相关概念
- arm模拟器手机版_ARM模拟器——SkyEye的使用
- 如何提高代码质量,或者说高质量代码的特征是什么
- 推薦 CSDN 最讓人佩服的專家,袁萌。
- matlab赌徒输完问题,Gambler's Ruin(赌徒破产问题 概率论)