JWT
JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。 随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。
组件要求
- php: >=7.1.0
- ext-openssl: >=1.0.0
- easyswoole/spl: ^1.2
- easyswoole/utility: ^1.1
安装方法
composer require easyswoole/jwt
仓库地址
核心类库方法
编码相关
设置加密方式,默认HMACSHA256
function algMethod(string $method):Jwt
设置秘钥,默认Easyswoole
function setSecretKey(string $key):Jwt
初始化一个没有附带信息的token的JwtObject
public function publish():JwtObject
设置加密方式, 默认HMACSHA256
public function setAlg($alg): self
设置用户
public function setAud($aud): self
设置过期时间
public function setExp($exp): self
设置发布时间
public function setIat($iat): self
设置发行人
public function setIss(string $iss): self
设置jwt-id,用于标识该jwt
public function setJti($jti): self
在此之前不可用
public function setNbf($nbf): self
设置主题
public function setSub($sub): self
设置其他数据
public function setData($data): self
获取token
function __toString()
解码相关
解码
public function decode(?string $raw):?JwtObject
获取解码状态, 1:通过, -1:无效, -2:token过期
public function getStatus(): int
获取加密方式
public function getAlg()
获取用户
public function getAud()
获取过期时间
public function getExp()
获取发布时间
public function getIat()
获取发行人
public function getIss(): string
获取jwt-id
public function getJti()
获取生效时间
public function setNbf($nbf): void
获取主题
public function getSub()
获取自定义数据
public function getData()
获取签名
public function getSignature()
通过key获取相关数据
final public function getProperty($name)
基本使用
生成token
use EasySwoole\Jwt\Jwt;
$jwtObject = Jwt::getInstance()
->setSecretKey('easyswoole') // 秘钥
->publish();
$jwtObject->setAlg('HMACSHA256'); // 加密方式
$jwtObject->setAud('user'); // 用户
$jwtObject->setExp(time()+3600); // 过期时间
$jwtObject->setIat(time()); // 发布时间
$jwtObject->setIss('easyswoole'); // 发行人
$jwtObject->setJti(md5(time())); // jwt id 用于标识该jwt
$jwtObject->setNbf(time()+60*5); // 在此之前不可用
$jwtObject->setSub('主题'); // 主题
// 自定义数据
$jwtObject->setData([
'other_info'
]);
// 最终生成的token
$token = $jwtObject->__toString();
解析token
use EasySwoole\Jwt\Jwt;
$token = "eyJhbGciOiJITUFDU0hBMjU2IiwiaXNzIjoiZWFzeXN3b29sZSIsImV4cCI6MTU3MzgzNTIxMSwic3ViIjoi5Li76aKYIiwibmJmIjoxNTczODMxOTExLCJhdWQiOiJ1c2VyIiwiaWF0IjoxNTczODMxNjExLCJqdGkiOiJjYWJhZmNiMWIxZTkxNTU3YzIxMDUxYTZiYTQ0MTliMiIsInNpZ25hdHVyZSI6IjZlNTI1ZjJkOTFjZGYzMjBmODE1NmEwMzE1MDhiNmU0ZDQ0YzhkNGFhYzZjNmU1YzMzMTNjMDIyMGJjYjJhZjQiLCJzdGF0dXMiOjEsImRhdGEiOlsib3RoZXJfaW5mbyJdfQ%3D%3D";
try {
$jwtObject = Jwt::getInstance()->decode($token);
$status = $jwtObject->getStatus();
// 如果encode设置了秘钥,decode 的时候要指定
// $status = $jwt->setSecretKey('easyswoole')->decode($token)
switch ($status)
{
case 1:
echo '验证通过';
$jwtObject->getAlg();
$jwtObject->getAud();
$jwtObject->getData();
$jwtObject->getExp();
$jwtObject->getIat();
$jwtObject->getIss();
$jwtObject->getNbf();
$jwtObject->getJti();
$jwtObject->getSub();
$jwtObject->getSignature();
$jwtObject->getProperty('alg');
break;
case -1:
echo '无效';
break;
case -2:
echo 'token过期';
break;
}
} catch (\EasySwoole\Jwt\Exception $e) {
}
当前内容版权归 EasySwoole 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 EasySwoole .