当前位置:首页 > PHP

php jwt 实现

2026-02-14 09:03:52PHP

php jwt 实现

PHP JWT 实现方法

安装依赖库

使用 Composer 安装 firebase/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());
        }
    }
}

php jwt 实现

标签: phpjwt
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form actio…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $n…