前言

关于jwt的介绍这里就不阐述了,相信你已经在网上看到了N篇介绍文章(你丫的讲那么多介绍到是告诉我怎么样呀!),关于php使用jwt的相关的使用却少的可怜,有的也看的模模糊糊,于是就自己整理,也方便自己以后进行查看。

jwt版本

php中jwt有3个版本:2.0、2.2、3.0。so!我们选择的是3.0的版本。别问为什么,你买电子产品都是买新不买旧呢。(说到这,想到了即将到手的iphonex,隐隐肾疼) ,看图可以发现3.0的版本支持更多参数。具体参数下面会解释

安装

1、使用composer安装

composer require lcobucci/jwt

2、从github上下载

点我跳转到github地址

依赖

  • PHP 5.5+
  • OpenSSL扩展

使用

参数解释

在使用之前先解释下上面参数的意思:

名称 解释
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设置唯一标示

生成token

使用秘钥签名

use 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();

使用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

秘钥解密

use Lcobucci\JWT\Signer\Hmac\Sha256;$parse = (new Parser())->parse($token);
$signer = new Sha256();
$parse->verify($signer,'签名key');// 验证成功返回true 失败false

RSA和ECDSA

use Lcobucci\JWT\Signer\Rsa\Sha256;
use Lcobucci\JWT\Signer\Keychain;
$parse = (new Parser())->parse($token);
$signer = new Sha256();
var_dump($token->verify($signer, $keychain->getPublicKey('file://{公钥地址}'))

获取数据

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

$parse = (new Parser())->parse($token);
// 获取全部信息,返回一个数组,
var_dump($parse->getClaims());
// 获取单条信息
var_dump($parse->getClaim('aud'));
....

注意事项

关于jwt的使用大概就是这些。上面的代码在你使用的时候可能会出现两个问题:

1、命名空间错误
解决:不使用命名空间的话,使用require引入文件。如果使用命名空间出现错误,请检查命名空间的路径。

2、生成的token是一个对象
解决:(string)$token 将token强转成string

最后,如果上面写的有错误或者不足的地方,欢迎在下面留言给我。

php使用jwt的例子相关推荐

  1. rest_framework11:jwt简单例子/自定制基于jwt认证类

    jwt简单例子 一.登陆设置 1.不需要写login的视图类,使用jwt内置的. 2.需要前置条件,已有继承AbstractUser models,并且有数据,用于校验,返回token. urls.p ...

  2. 【译】使用Jwt身份认证保护 Asp.Net Core Web Api

    原文出自Rui Figueiredo的博客,原文链接<Secure a Web Api in ASP.NET Core> 摘要:这篇文章阐述了如何使用 Json Web Token (Jw ...

  3. web渗透之jwt 安全问题

    前言 JWT 全称 JSON Web Token,是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据.原始的 Token 只是一个 uuid,没有任何意义. JWT 包含了部分业务信息,减 ...

  4. JWT与Signature

    1. 参考概念 数字证书应用综合揭秘(包括证书生成.加密.解密.签名.验签) https://www.cnblogs.com/leslies2/p/7442956.html 2. JWT JWT内容是 ...

  5. Koa 2 基础(仿知乎)

    Koa 2 基础 接口文档 Postman仿知乎在线测试 REST 简介 REST是什么 REST是Resource Representational State Transfer的缩写,是一种Web ...

  6. Azure: Azure AD(For Development)的使用

    一.简介 (一)Azure AD 简介 Azure Active Directory (Azure AD) 是 Microsoft 推出的基于云的全面的标识和访问管理服务,它将核心目录服务.高级标识监 ...

  7. laravel第三方插件列表

    必装插件 1. 记录Sql日志语句 Laravel Query Logger github地址注意,需要配置config/logging.php2. 简化查询 Laravel Query Builde ...

  8. jwt 例子 java_spring boot 入门之security oauth2 jwt完美整合例子-java编程

    一.本文简介 本文主要讲解Java编程中spring boot框架+spring security框架+spring security oauth2框架整合的例子,并且oauth2整合使用jwt方式存 ...

  9. JWT(JSON Web Token)简介及实现

    JWT(JSON Web Token):是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为Json对象安全地传输信息.由于此信息是经过数字签名的,因此可以被验证和信 ...

最新文章

  1. 为节省内存,Firefox 将用新方式阻止加载没用到的标签页
  2. 大数据集群启停shell脚本:hadoop(hdfs、yarn)、hbase集群启停
  3. php mysql curd_Php mysql 常用代码、CURD操作以及简单查询
  4. 1687: 数组操作(非常规思维)
  5. SAP Spartacus RouteReducer
  6. 八段LED数码管段代码编码表
  7. jupyter 无法提示代码,报错TypeError: __init__() got an unexpected keyword argument ‘column‘
  8. php 波形图,PHP分析.wav文件并绘制png格式的波形图_PHP
  9. linux命令:软件更新 sudo apt-get update 和 sudo apt-get upgrade
  10. libmesh 实现 流程
  11. python 教程 第二十一章、 扩展Python
  12. Acer 4750 安装黑苹果_黑苹果 MacOS 10.15 Catalina安装教程
  13. 财务需要哪些计算机能力,建设财务共享中心,财务人员应具备哪些能力?
  14. QueryDSL 自定义返回结果集类型
  15. 小红书推广方式和技巧有哪些?
  16. 江苏省电子税务局中文点选验证码识别研究
  17. import traceback
  18. 三维空间控制器 Leap Motion/leap motion 3D 外置3D体感手控
  19. 非配合式活体检测方法简介
  20. python蟒蛇编程_蟒蛇(Python)——欧美最容易学习的编程语言

热门文章

  1. Selenium:设置无头浏览器
  2. 从SVN下载项目到本地如何转为web项目并运行
  3. 前端如何实现 Word 在线预览
  4. 威盛电子- via ASIC 笔试题
  5. Javassist入门
  6. windows外接显示器,息屏后老是发出USB插拔的声音
  7. arm内核和单片机什么关系?
  8. C#中MVC之ViewData与ViewBag的使用与区别
  9. 微信支付无法连接服务器,微信支付无法调起
  10. java gd库_GD库 - JAVA_Blog - OSCHINA - 中文开源技术交流社区