当前位置:首页 > PHP

php jwt 实现

2026-04-03 17:19:13PHP

PHP JWT 实现

安装依赖

使用 Composer 安装 firebase/php-jwt 库,该库提供了 JWT 的编码和解码功能。

composer require firebase/php-jwt

生成 JWT Token

生成 JWT Token 需要指定密钥、有效载荷(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, // 过期时间(1小时后)
    'data' => [ // 自定义数据
        'user_id' => 123,
        'username' => 'example_user'
    ]
];

$jwt = JWT::encode($payload, $key, 'HS256');
echo $jwt;

验证 JWT Token

验证 Token 时需检查签名是否有效,并解析有效载荷。如果 Token 过期或签名无效,会抛出异常。

try {
    $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    print_r($decoded);
} catch (Exception $e) {
    echo 'Token 验证失败: ' . $e->getMessage();
}

自定义异常处理

在实际应用中,可以捕获特定异常(如过期或签名无效)并返回适当的 HTTP 响应。

try {
    $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    // 业务逻辑
} catch (Firebase\JWT\ExpiredException $e) {
    http_response_code(401);
    echo json_encode(['error' => 'Token 已过期']);
} catch (Firebase\JWT\SignatureInvalidException $e) {
    http_response_code(401);
    echo json_encode(['error' => 'Token 签名无效']);
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode(['error' => 'Token 无效']);
}

密钥管理

密钥应存储在安全的地方(如环境变量或配置文件中),避免硬编码在代码中。可以使用 .env 文件管理密钥。

# .env 文件示例
JWT_SECRET=your-secret-key

通过 vlucas/phpdotenv 加载环境变量:

composer require vlucas/phpdotenv
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

$key = $_ENV['JWT_SECRET'];

刷新 Token

如果应用需要刷新 Token,可以在 Token 即将过期时生成新的 Token 并返回给客户端。

php jwt 实现

$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 json_encode(['token' => $newJwt]);
}

通过以上步骤,可以在 PHP 中实现 JWT 的生成、验证和管理。

标签: phpjwt
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…