文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在 ThinkPHP 中使用 JWT 签发 Token

2023-10-26 21:33

关注

本文目录

一、什么是 JWT

JWT,全称:Json Web Token,可以看成是一种 Token 签发方案。

Token 通常叫做认证令牌,用于客户端和服务端在交互时的身份认证。

JWT 的优势:

  1. 数据量小,传输速度快。
  2. 使用 json 数据格式,可跨语言。
  3. 即签即发,不需要在服务端保存。
  4. 适合移动端。

更多关于 JWT 的信息可访问官网查看 >>>

二、在 ThinkPHP 中安装 JWT

先去官网挑选适合自己项目的库。

进入官网,选择 Libraries ,选择 PHP 语言过滤。

在这里插入图片描述

每个库都有对应的 composer 命令。

这里选择第一个,在 ThinkPHP 项目根目录下执行命令安装:

composer require firebase/php-jwt

三、签发 Token 示例

public function createToken(){    $jwtContent = [    // 签发人,这里采用当前站点域名        'iss' => request()->domain(),        // 签发时间,当前时间戳        'iat' => time(),        // 到期时间,1天后        'exp' => time() + 86400,        // 自定义数据        'data' => [            'user_id' => 1,            'user_name' => 'jack'        ]    ];    // 自定义 key,用于加密 token,只保存在服务端,不可泄漏。    $key = 'iwsojfiowejgiroegnioamr';    // 使用 HS256 算法,生成 token 。    $token = JWT::encode($jwtContent, $key, 'HS256');    // 打印输出    halt($token);}

结果示例:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vd3d3LnRwNS5jb20iLCJpYXQiOjE2Njc3ODk2MDEsImV4cCI6MTY2Nzc4OTYyMSwiZGF0YSI6eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6MTIzfX0.JWBTMvl_6vv3SBCm5moM6BzYqvb8Kr7PQ6VnTL66HLc

生成 tokenJWT 提供了以下字段可以选择:

iss:发行者exp:到期时间sub:主题aud:用户nbf:生效时间iat:发布时间jti:JWTID,用于标识该JWT

四、使用 Token 示例

public function checkToken(){    try {    // 此 key 必须和生成 token 时的一致。        $key = 'iwsojfiowejgiroegnioamr';        // 接收客户端提交的 token 。        $token = input('token/s');        $test = JWT::decode($token, new Key($key, 'HS256'));        halt((array)$test);    } catch (SignatureInvalidException $signatureInvalidException) {    // 获取验证失败时抛出的错误信息    halt($signatureInvalidException->getMessage());    } catch (ExpiredException $expiredException) {    // 获取 token 过期时抛出的错误信息    halt($expiredException->getMessage());    } catch (Exception $exception) {    // 获取抛出的其它错误信息    halt($exception->getMessage());    }}

解析 token 成功示例:

array(4) {  ["iss"] => string(18) "http://www.tp5.com"  ["iat"] => int(1667802222)  ["exp"] => int(1667888622)  ["data"] => object(stdClass)#13 (2) {    ["user_id"] => int(1)    ["username"] => string(4) "jack"  }}

解析 token 失败示例:

Signature verification failed

解析 token 过期示例:

Expired token

来源地址:https://blog.csdn.net/ZhangJiWei_2019/article/details/127728267

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯