PHP使用JWT创建Token的实例详解
导读:收集整理的这篇文章主要介绍了PHP使用JWT创建Token的实例详解,觉得挺不错的,现在分享给大家,也给大家做个参考。PHP使用JWT创建Token简单示例依赖环境:php 5.5 以上 + openssl扩展lcobucci/JWT可使用...
收集整理的这篇文章主要介绍了PHP使用JWT创建Token的实例详解,觉得挺不错的,现在分享给大家,也给大家做个参考。PHP使用JWT创建Token简单示例
依赖
环境:php 5.5 以上 + openssl扩展
lcobucci/JWT
可使用composer 安装
composer require lcobucci/jwt
也可以直接到 GITHub下载
GitHub地址: https://github.COM/lcobucci/jwt
参数解释
| 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 的方式有两种,在这里我只试验了第二种。
第一种:使用秘钥签名生成 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();
验证 Token
use 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;
// 注意这里使用的sha256use 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创建Token的实例详解的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: PHP使用JWT创建Token的实例详解
本文地址: https://pptw.com/jishu/596352.html
