当前位置:首页 > PHP

php jwt 实现

2026-02-14 09:03:52PHP

php jwt 实现

PHP JWT 实现方法

安装依赖库

使用 Composer 安装 firebase/php-jwt 库,这是目前 PHP 中最流行的 JWT 实现方案。在项目根目录执行以下命令:

php jwt 实现

composer require firebase/php-jwt

生成 JWT Token

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' => [ // 自定义数据
        'userId' => 123,
        'username' => 'example'
    ]
];

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

验证 JWT Token

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

自定义算法支持

如果需要使用 RS256 等非对称加密算法:

// 生成 RSA 密钥对
$privateKey = openssl_pkey_new([
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA
]);

// 使用 RS256 算法签发
$jwt = JWT::encode($payload, $privateKey, 'RS256');

// 使用公钥验证
$publicKey = openssl_pkey_get_details($privateKey)['key'];
$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));

常见配置选项

  • 设置令牌过期时间:'exp' => time() + 7200(2小时)
  • 添加生效时间:'nbf' => time() + 300(5分钟后生效)
  • 添加唯一标识:'jti' => uniqid()

安全注意事项

  • 密钥长度至少 32 字符(HS256)
  • 定期轮换加密密钥
  • 不要在令牌中存储敏感信息
  • 始终验证令牌的签名和过期时间
  • 考虑添加 IP 绑定等额外验证措施

完整示例封装

class JwtHandler {
    private $key;
    private $algorithm;

    public function __construct($key, $algorithm = 'HS256') {
        $this->key = $key;
        $this->algorithm = $algorithm;
    }

    public function generateToken($payload) {
        return JWT::encode($payload, $this->key, $this->algorithm);
    }

    public function validateToken($token) {
        try {
            return (array)JWT::decode($token, new Key($this->key, $this->algorithm));
        } catch (Exception $e) {
            throw new RuntimeException('Invalid token: '.$e->getMessage());
        }
    }
}

标签: phpjwt
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php实现登录

php实现登录

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

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现即时通讯

php实现即时通讯

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

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现秒杀

php实现秒杀

PHP实现秒杀功能的关键技术 秒杀系统需要解决高并发、数据一致性、系统稳定性等问题。以下是PHP实现秒杀功能的核心技术方案: 数据库优化 使用InnoDB引擎的行级锁和事务特性,确保数据一致性。商品…