百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP运用JWT新建Token的实例详解
分享文章到:

PHP运用JWT新建Token的实例详解

发布时间:09/01 来源:未知 浏览: 关键词:

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;
// 留意这里使用的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创立Token的实例详解的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板