0. 引入
composer require firebase/php-jwt
require __DIR__ . '/vendor/autoload.php';
use Firebase\JWT\JWT;
1. 生成token
public function getToken()
{
$key = 'key';
$time = time();
$token = [
'iss' => 'http://www.buddha.com',
'aud' => 'http://www.buddha.com',
'iat' => $time,
'nbf' => $time ,
'exp' => $time + 7200,
'data' => [
'id' => 1,
'username' => 'buddha'
]
];
return JWT::encode($token, $key);
}
2. 验证token
public function verification()
{
$key = 'key';
$jwt = "";
try {
JWT::$leeway = 60;
$decoded = JWT::decode($jwt, $key, ['HS256']);
$arr = (array)$decoded;
return $arr;
} catch(\Firebase\JWT\SignatureInvalidException $e) {
echo $e->getMessage();
}catch(\Firebase\JWT\BeforeValidException $e) {
echo $e->getMessage();
}catch(\Firebase\JWT\ExpiredException $e) {
echo $e->getMessage();
}catch(Exception $e) {
echo $e->getMessage();
}
}
3. 同时生成token和refresh_token
public function authorizations()
{
$key = 'ffdsfsd@4_45';
$time = time();
$token = [
'iss' => 'http://www.buddha.com',
'iat' => $time,
'data' => [
'id' => 1,
'username' => 'buddha'
]
];
$access_token = $token;
$access_token['scopes'] = 'role_access';
$access_token['exp'] = $time + 7200;
$refresh_token = $token;
$refresh_token['scopes'] = 'role_refresh';
$refresh_token['exp'] = $time + (86400 * 30);
$jsonList = [
'access_token' => JWT::encode($access_token, $key),
'refresh_token' => JWT::encode($refresh_token, $key),
'token_type' => 'bearer'
];
return json_encode($jsonList);
}