jwt php实现
JWT PHP 实现
安装依赖库
使用 Composer 安装 firebase/php-jwt 库,这是 PHP 中常用的 JWT 实现工具。
composer require firebase/php-jwt
生成 JWT Token
使用 Firebase\JWT\JWT 类生成 JWT Token。需要指定密钥(secret key)、payload(数据)和算法(如 HS256)。
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$key = 'your-secret-key';
$payload = [
'iss' => 'your-issuer',
'aud' => 'your-audience',
'iat' => time(),
'exp' => time() + 3600, // Token 有效期 1 小时
'data' => [
'user_id' => 123,
'username' => 'example_user'
]
];
$jwt = JWT::encode($payload, $key, 'HS256');
echo $jwt;
验证 JWT Token
使用 JWT::decode 方法验证 Token 并解码 payload。需捕获可能的异常(如 Token 过期或无效)。
try {
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
print_r($decoded);
} catch (Exception $e) {
echo 'Token 验证失败: ' . $e->getMessage();
}
刷新 Token
在 Token 快过期时,可以生成新的 Token 并返回给客户端。
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
if ($decoded->exp - time() < 300) { // 剩余 5 分钟时刷新
$newPayload = (array)$decoded;
$newPayload['iat'] = time();
$newPayload['exp'] = time() + 3600;
$newJwt = JWT::encode($newPayload, $key, 'HS256');
echo $newJwt;
}
使用 RS256 算法
如果需要非对称加密(如 RS256),需生成 RSA 密钥对并指定公钥和私钥。

$privateKey = file_get_contents('path/to/private.key');
$publicKey = file_get_contents('path/to/public.key');
$jwt = JWT::encode($payload, $privateKey, 'RS256');
$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));
注意事项
- 密钥(secret key 或 RSA 密钥)需妥善保管,避免泄露。
- Token 的有效期(
exp)应根据业务需求合理设置。 - 捕获异常时区分不同错误类型(如
ExpiredException和SignatureInvalidException)。






