jwt php实现
JWT PHP 实现方法
安装依赖库
使用 Composer 安装 firebase/php-jwt 库,这是目前 PHP 中最流行的 JWT 实现库。在项目根目录运行以下命令:
composer require firebase/php-jwt
生成 JWT Token
创建一个 PHP 文件,引入自动加载文件并使用库生成 Token:
<?php
require 'vendor/autoload.php';
use \Firebase\JWT\JWT;
$key = "your_secret_key"; // 替换为实际密钥
$payload = [
"iss" => "http://example.org", // 签发者
"aud" => "http://example.com", // 接收方
"iat" => time(), // 签发时间
"exp" => time() + 3600 // 过期时间(1小时后)
];
$jwt = JWT::encode($payload, $key, 'HS256');
echo $jwt;
?>
验证 JWT Token
验证接收到的 Token 是否有效并解码内容:
<?php
require 'vendor/autoload.php';
use \Firebase\JWT\JWT;
$key = "your_secret_key"; // 必须与签发时使用的密钥一致
$jwt = "received_token_here"; // 替换为实际接收到的Token
try {
$decoded = JWT::decode($jwt, $key, ['HS256']);
print_r($decoded);
} catch (Exception $e) {
echo '验证失败: ', $e->getMessage();
}
?>
自定义算法支持
该库支持多种算法,包括 HS256、RS256 等。如需使用 RSA 算法:
$privateKey = file_get_contents('private.key');
$publicKey = file_get_contents('public.key');
// 生成Token
$jwt = JWT::encode($payload, $privateKey, 'RS256');
// 验证Token
$decoded = JWT::decode($jwt, $publicKey, ['RS256']);
异常处理
常见的异常类型包括:
SignatureInvalidException:签名验证失败BeforeValidException:Token 尚未生效ExpiredException:Token 已过期DomainException:算法不支持或其他域错误
最佳实践
密钥应当足够复杂并定期更换,避免使用简单字符串。生产环境中建议将密钥存储在环境变量中而非代码里。
Token 的过期时间应根据业务需求合理设置,通常访问令牌设置为较短时间(如1小时),刷新令牌可设置较长时间。
对于敏感操作,每次请求都应验证 Token 的有效性,并考虑实现 Token 的黑名单机制以增强安全性。







