安裝
composer require lcobucci/jwt 3.3
封裝
<?php
namespace tools\jwt;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;
use Lcobucci\JWT\Parser;
class Token
{
static private $_config=[
'audience' => 'http://127.0.0.1/token',//接收人
'id' => '1806',//token的唯一標識,這里只是一個簡單示例
'sign' => 'Mr.cao',//簽名密鑰
'issuer' => 'http://127.0.0.1/user_id',//簽發人
'expire' => 3600*2 //有效期
];
//生成token
static public function getToken($k,$v)
{
$signer = new Sha256();
$time = time();
$token = (new Builder())->issuedBy(self::$_config['issuer']) // 簽發人
->permittedFor(self::$_config['audience']) // 接收人
->identifiedBy(self::$_config['id'], true) // 唯一標識 可以自己寫,也可以隨機生成
->issuedAt($time) // 簽發時間
->canOnlyBeUsedAfter($time - 1) // 生效時間
->expiresAt($time + 3600) // 過期時間
->withClaim($k, $v) // 用戶id
->getToken($signer, new Key(self::$_config['sign'])); // 生成token
return (string)$token;
}
//驗證token
static public function verifyToken($token)
{
$signer = new Sha256();
$token = (new Parser())->parse((string) $token);
$data = new ValidationData();
//驗證簽發人
$data->setIssuer(self::$_config['issuer']);
//驗證接收人
$data->setAudience(self::$_config['audience']);
//驗證唯一表示
$data->setId(self::$_config['id']);
//簽發人 和上述驗證
if($token->verify($signer, self::$_config['sign']) && $token->validate($data)){
return true;
}else{
return false;
}
}
//從token中獲取信息
static public function getTokenMessege($token)
{
$res = self::verifyToken($token);
if (!$res){
return '無效的token';
}
$token = (new Parser())->parse((string)$token);
return $token->getClaims();
}
}
使用
use tools\jwt\Token; //封裝命名空間\類
//生成token
public function getToken(){
$token = Token::getToken(5);
return $token;
}
//測試token
public function testToken(Request $request){
//接收token
$token = $request->param('token');
$data = Token::getTokenMessege($token);
return $data;
}