jwt php 实现
JWT PHP 实现
安装依赖库
使用 Composer 安装 firebase/php-jwt 库,这是一个流行的 JWT 实现库。运行以下命令:
composer require firebase/php-jwt
生成 JWT Token
在 PHP 中生成 JWT Token 需要指定 payload 和密钥。以下是一个示例代码:
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 Token 需要解码并检查签名和有效期:
try {
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
print_r($decoded);
} catch (Exception $e) {
echo 'Token 验证失败: ', $e->getMessage();
}
自定义算法
firebase/php-jwt 支持多种算法,如 HS256、RS256 等。如果需要使用 RS256,需要提供 RSA 公私钥:
$privateKey = '-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----';
$publicKey = '-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----';
// 生成 Token
$jwt = JWT::encode($payload, $privateKey, 'RS256');
// 验证 Token
$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));
处理异常
JWT 验证可能抛出多种异常,如签名无效、Token 过期等。捕获并处理这些异常:
try {
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
} catch (Firebase\JWT\SignatureInvalidException $e) {
echo '签名无效';
} catch (Firebase\JWT\BeforeValidException $e) {
echo 'Token 尚未生效';
} catch (Firebase\JWT\ExpiredException $e) {
echo 'Token 已过期';
} catch (Exception $e) {
echo '其他错误: ', $e->getMessage();
}
刷新 Token
如果需要刷新 Token,可以检查剩余有效期并重新生成:

$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
if ($decoded->exp - time() < 300) { // 剩余 5 分钟时刷新
$payload['iat'] = time();
$payload['exp'] = time() + 3600;
$newJwt = JWT::encode($payload, $key, 'HS256');
}
通过以上步骤,可以在 PHP 中实现 JWT 的生成、验证和管理。确保密钥安全并合理设置 Token 有效期以增强安全性。






