php jwt使用案例,PHP使用JWT创建Token简单示例

依赖

环境:php 5.5 以上 + OpenSSL扩展

lcobucci/JWT

可使用composer 安装composer require lcobucci/jwt

也可以直接到 GitHub下载

参数解释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'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值