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