iss (issuer)issuer请求实体,可以是发起请求的用户的信息,也可是jwt的签发者

sub (Subject)设置主题,类似于发邮件时的主题

aud (audience)接收jwt的一方

exp (expire)token过时间期

nbf (not before)当前时间在nbf设定时间之前,该token无法使用

iat (issued at)token创建时间

jti (JWT ID)对当前token设置唯一标示

实例前准备

下面记录主要的依赖引用:define('DS', DIRECTORY_SEPARATOR);

define('JWTPath', dirname(__FILE__) . DS);

include_once JWTPath . 'Builder.php';

include_once JWTPath . 'Signer.php';

include_once JWTPath . 'Signer' . DS . 'Keychain.php';

include_once JWTPath . 'Signer' . DS . 'Rsa.php';

include_once JWTPath . 'Signer' . DS . 'Rsa' . DS . 'Sha256.php';

当然它们里面还有更多的引用需要你自己加,这个在你调试时根据错误提示一个个补就好了,这里就不多写了。

实例

使用【lcobucci/JWT】产生 Token 的方式有两种,在这里我只试验了第二种。

第一种:使用秘钥签名生成 tokenuse Lcobucci\JWT\Builder;

use Lcobucci\JWT\Signer\Hmac\Sha256;

$builder = new Builder();

$signer = new Sha256();

// 设置发行人

$builder->setIssuer('http://example.com');

// 设置接收人

$builder->setAudience('http://example.org');

// 设置id

$builder->setId('4f1g23a12aa', true);

// 设置生成token的时间

$builder->setIssuedAt(time());

// 设置在60秒内该token无法使用

$builder->setNotBefore(time() + 60);

// 设置过期时间

$builder->setExpiration(time() + 3600);

// 给token设置一个id

$builder->set('uid', 1);

// 对上面的信息使用sha256算法签名

$builder->sign($signer, '签名key');

// 获取生成的token

$token = $builder->getToken();

验证 Tokenuse Lcobucci\JWT\Signer\Hmac\Sha256;

$parse = (new Parser())->parse($token);

$signer = new Sha256();

$parse->verify($signer,'签名key');// 验证成功返回true 失败false

第二种:使用RSA和ECDSA签名

RSA和ECDSA签名是基于公钥和私钥,所以必须使用私钥生成和验证使用use Lcobucci\JWT\Signer\Keychain;

// 注意这里使用的sha256

use Lcobucci\JWT\Signer\Rsa\Sha256;

$signer = new Sha256();

$keychain = new Keychain();

$builder = new Builder();

$builder->setIssuer('http://example.com');

$builder->setAudience('http://example.org');

$builder->setId('4f1g23a12aa', true);

$builder->setIssuedAt(time());

$builder->setNotBefore(time() + 60);

$builder->setExpiration(time() + 3600);

$builder->set('uid', 1);

// 与上面不同的是这里使用的是你的私钥,并提供私钥的地址

$builder->sign($signer, $keychain->getPrivateKey('file://{私钥地址}'));

$toekn = $builder->getToken();

最后还可以通过强制转换的形式来拿到你想要的纯字符串的 Token

$toekn = (string) $builder->getToken();

和前端的交互可以放在返回的 JSON 格式中通过参数带过去,也可以存放在 header Authorization 中。

验证 Token$signer = new \Lcobucci\JWT\Signer\Rsa\Sha256();

$keychain = new \Lcobucci\JWT\Signer\Keychain();

$parse = new \Lcobucci\JWT\Parser();

$parse->parse((string)$token);

var_dump($token->verify($signer, $keychain->getPublicKey(self::$dir . '/public.key')));

))

获取数据

因为数据部分可以直接获取到,不用解密。所以在验证token合法后直接读取即可,这也是不要在载体中存放敏感信息的原因。$parse = (new Parser())->parse($token);

// 获取全部信息,返回一个数组,

var_dump($parse->getClaims());

// 获取单条信息

var_dump($parse->getClaim('aud'));

推荐教程:《PHP视频教程》

php jwt使用案例,PHP使用JWT创建Token的实例详解相关推荐

  1. php渐变背景颜色,css背景颜色渐变案例:线性渐变和径向渐变效果实例详解

    渐变是两种或多种颜色之间的平滑过渡.以前,必须使用图像来实现这些效果.但是,通过使用 CSS3 渐变(gradients),可以减少下载的事件和宽带的使用.此外,渐变效果的元素在放大时看起来效果更好, ...

  2. pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解

    python开发之for循环操作实例详解,pythonfor实例详解 本文实例讲述了python开发之for循环操作.分享给大家供大家参考,具体如下: 下面是我做的一些学习记录供大家参考: #基本的f ...

  3. android自定义view案例,Android自定义View的实现方法实例详解

    一.自绘控件 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次.新建一个CounterView继承自View,代码如下所示: 可以看到,首先我们在 ...

  4. JWT(Json web token)认证详解

    JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...

  5. python编程入门与案例详解pdf-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬 ...

  6. 创建emp表 oracle,Oracle中创建和管理表详解

    Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16   作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...

  7. mysql 创建删除表_mysql创建删除表的实例详解

    表的创建命令需要: 表的名称 字段名称 定义每个字段(类型.长度等) 语法 下面是通用的SQL语法用来创建MySQL表: CREATE TABLE table_name (column_name ...

  8. python动态生成数据库表_Python-Flask:动态创建表的示例详解

    今天小编从项目的实际出发,由于项目某一个表的数据达到好几十万条,此时数据的增删查改会很慢:为了增加提高访问的速度,我们引入动态创建表. 代码如下: from app_factory import ap ...

  9. Linux 创建网页服务,Linux使用Node.js建立访问静态网页的服务实例详解

    Linux使用Node.js建立访问静态网页的服务实例详解 一.安装node.js运行所需要的环境,: 二.创建node目录(/node/www),并在目录下创建node.js服务文件server.j ...

最新文章

  1. Android简化xml sax解析
  2. Java通过IText导出word和pdf
  3. jmeter找不到java.dll_Windows下Jmeter安装出现Not able to find Java executable or version问题解决方案...
  4. ADT 压缩包 R23.0.0
  5. Drupal 紧急修复已遭利用的严重 0day
  6. 开心的小明 (NYOJ49) [动态规划.01背包]
  7. 博文视点大讲堂第33期——如何让你既能干得漂亮又说得清楚?
  8. socket创建失败_python3从零学习-5.8.1、socket—底层网络接口
  9. java计算机毕业设计基层党支部建设平台源码+mysql数据库+系统+lw文档+部署
  10. 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
  11. 微信开发_网页授权获取用户的基本信息
  12. Social Radio:像收听广播一样收听Twitter状态更新
  13. PostgreSQL 如何实现数据透视表
  14. 一些png图片单独打开是透明的,怎么在ps里打开来就变不透明了
  15. cms php 带商城系统下载,开源免费PHP商城CMS系统集合
  16. Window应急响应(六):NesMiner挖矿病毒
  17. 导航坐标系:地心惯性坐标系、地心地固坐标系、当地水平坐标系、载体/机体坐标系
  18. AI圈就是个马戏团,里面都是一群骗子!AI寒冬论作者再发猛料
  19. 怎么用计算机作word文档,电脑上怎么用Word文档
  20. Hive内部表及外部表

热门文章

  1. 推理芯片的性能建立在优化的存储子系统设计上
  2. 多核处理器集成了神经处理单元
  3. 驾驶员行为监控系统:需要它来管理车队
  4. 视觉导航的神经拓扑SLAM
  5. 为什么要使用Retrofit封装OkHttp,而不单独使用OkHttp?
  6. 客快物流大数据项目(四十六):Spark操作Kudu dataFrame操作kudu
  7. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件
  8. Django 模板4.1
  9. TypeError(“cannot concatenate ‘str‘ and ‘instancemethod‘ objects“,)
  10. 微信小程序顶部tab切换以及滑动