引入

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相关推荐

  1. jwt 的 token 被获取怎么办

    jwt 签发后,每次请求会续期,如果 token 被抓包后,别人得到后,有没有好的方案解决身份窃取问抗投诉服务器题? 签发 token 的时候加入一些验证信息,比如 IP 如果当前 request I ...

  2. Django+JWT实现Token认证

    对外提供API不用django rest framework(DRF)就是旁门左道吗? 基于Token的鉴权机制越来越多的用在了项目中,尤其是对于纯后端只对外提供API没有web页面的项目,例如我们通 ...

  3. 前后端分离中使用基于jwt的token进行身份认证

    基于jwt的Token认证机制可以看之前的文章: 基于JWT的Token认证机制实现 在前后端分离中,我们与前端约定一种身份认证机制.当用户登录的时候,我们会返回给前端一个token,前端会将toke ...

  4. jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题

    一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...

  5. 在SPA应用中利用JWT进行身份验证

    版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. https://blog.csdn.net/chszs/article/details/79639919 在SPA应用中利用JWT进行 ...

  6. 接口使用jwt返回token_Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...

  7. 利用JWT安全验证(前后端分离,单点登录,分布式微服务)

    JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk/jjwt JWT请求流程 用户使用账号和面发出post请求: 服务 ...

  8. API接口之JWT设置token过期时间(二)

    目录 1.什么是Jwt 2.token是什么 3.为什么要使用token 4.如何实现token 5.JWT的简单案例 6.API接口token案例 6.1 token的创建 6.2 用户验证流程 7 ...

  9. java 接口鉴权_安全|Java中使用JWT生成Token进行接口鉴权实现

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...

  10. java 接口 token_Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...

最新文章

  1. 20家股东联名施压,要求贝佐斯停止向警方出售面部识别软件
  2. NeurIPS 2021六篇杰出论文公布,谷歌工程师11年前论文获时间检验奖
  3. HeartBeat 集群组件概述
  4. Kotlin之函数作为参数传递
  5. 单一登录云:SAML和OpenId
  6. c++中的map容器
  7. 虽然有失落的即时通讯
  8. WordPress苏醒Grace v8.2博客主题模板去sq版
  9. 计算机word艺术字形状设置,4.11 Word 2016 自定义艺术字的形状效果,制作漂亮的艺术字...
  10. JDK8的下载和安装,以及配置环境变量
  11. 基于matlab的天线方向图
  12. 如何理解阿里月饼事件中各方的表现
  13. 分布式调度架构:单体调度
  14. D - Power Tower欧拉降幂公式
  15. matlab求解不等式方程组解集,matlab求不等式方程组的可行解
  16. 数据上链——区块链相关概念
  17. arm模拟器手机版_ARM模拟器——SkyEye的使用
  18. 如何提高代码质量,或者说高质量代码的特征是什么
  19. 推薦 CSDN 最讓人佩服的專家,袁萌。
  20. matlab赌徒输完问题,Gambler's Ruin(赌徒破产问题 概率论)

热门文章

  1. php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
  2. 微信实时定位html5,微信公众号使用H5获取地理位置信息并定位
  3. 网页前端学习第五次(HTML)
  4. 开源美颜滤镜SDK代码解析
  5. 2.1 图像验证码(英文验证码、超级鹰)
  6. VScode中快速生成vue模板
  7. . mindoc linux amd64,搭建minDoc文件接口服务器
  8. 三菱FX3G和台达,施耐德两台变频器的通讯示例
  9. 为什么低通滤波器的作用相当于积分器
  10. dcp1608 linux驱动下载,兄弟激光 DCP-1608驱动