当前位置:首页 > 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 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php实现多态

php实现多态

多态的概念 多态是面向对象编程的三大特性之一,指同一个方法在不同类中有不同实现方式。PHP通过继承和接口实现多态。 通过继承实现多态 父类定义方法,子类重写该方法实现不同行为: class Ani…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

php 实现https

php 实现https

在 PHP 中实现 HTTPS 确保 PHP 应用通过 HTTPS 协议安全传输数据,可以通过以下几种方式实现: 配置服务器强制 HTTPS 在 Web 服务器(如 Apache 或 Nginx)中…

php 实现长轮询

php 实现长轮询

PHP 实现长轮询的方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是实现步骤: 基础实现代码 创建一个简单的长轮询 PHP…