当前位置:首页 > 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 过期或签名无效,会抛出异常。

php jwt 实现

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 文件管理密钥。

php jwt 实现

# .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 并返回给客户端。

$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 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…