当前位置:首页 > PHP

jwt php 实现

2026-03-12 21:10:18PHP

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,可以检查剩余有效期并重新生成:

jwt php 实现

$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 有效期以增强安全性。

标签: jwtphp
分享给朋友:

相关文章

vue实现jwt

vue实现jwt

Vue 中实现 JWT 认证的步骤 安装依赖 需要安装 axios 用于 HTTP 请求和 jsonwebtoken 用于 JWT 解码(前端通常只需存储和发送 Token,解码更多由后端完成)。…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…