chenbool / jwt
一个简单的 PHP JSON Web Tokens (JWT) 加密/解密插件
1.0.0
2019-07-31 07:56 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2026-05-01 03:05:58 UTC
README
基于 PHP 的 JSON Web Token (JWT) 加密/解密库,符合 RFC 7519 标准。
特性
- 轻量级,易于使用
- 支持 HS256、HS384、HS512 等签名算法
- 完整的异常处理
- 兼容 PHP 5.3+
项目结构
jwt/
├── src/ # 源代码
│ ├── JWT.php # 核心类
│ ├── BeforeValidException.php # 未生效异常
│ ├── ExpiredException.php # 过期异常
│ └── SignatureInvalidException.php # 签名无效异常
├── composer.json # 依赖配置
├── LICENSE # 许可证
└── README.md
安装
composer require chenbool/jwt
JWT 简介
JSON Web Token (JWT) 是一种开放标准 (RFC 7519),用于在各方之间安全地传输信息。JWT 可以作为 JSON 对象在各方之间安全地传输信息。
JWT 优点
- 服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销
- JWT 构成简单,占用很少的字节,便于传输
- JSON 格式通用,不同语言之间都可以使用
JWT 组成
JWT 由三部分组成:
| 部分 | 说明 |
|---|---|
| Header(头部) | 声明类型和签名算法 |
| Payload(载荷) | 包含定义信息和自定义信息 |
| Signature(签名) | 签名验证信息 |
标准声明字段
| 字段 | 说明 |
|---|---|
iss |
JWT 签发者 |
sub |
JWT 所面向的用户 |
aud |
接收 JWT 的一方 |
exp |
JWT 的过期时间 |
nbf |
定义在什么时间之前不能访问 |
iat |
JWT 的签发时间 |
jti |
JWT 的唯一身份标识 |
使用方法
1. 基本使用
<?php use \chenbool\JWT\JWT; $key = "example_key"; $token = array( "iss" => "http://example.org", // 签发者 "aud" => "http://example.com", // 接收方 "iat" => 1356999524, // 签发时间 "nbf" => time()+30, // 30秒后生效 "exp" => time()+7200, // 2小时后过期 ); // 加密生成 Token $jwt = JWT::encode($token, $key); // 解密/验证 Token $decoded = JWT::decode($jwt, $key, array('HS256')); $decoded_array = (array) $decoded; print_r($decoded);
2. 异常处理
<?php try { JWT::$leeway = 60; // 时间偏移量 $decoded = JWT::decode($jwt, $key, array('HS256')); } catch(\chenbool\JWT\SignatureInvalidException $e) { echo $e->getMessage(); // 签名不正确 } catch(\chenbool\JWT\BeforeValidException $e) { echo $e->getMessage(); // Token 未生效 } catch(\chenbool\JWT\ExpiredException $e) { echo $e->getMessage(); // Token 已过期 } catch(Exception $e) { echo $e->getMessage(); // 其他错误 }
异常类说明
| 异常类 | 说明 |
|---|---|
SignatureInvalidException |
签名无效异常 |
BeforeValidException |
Token 未生效异常 |
ExpiredException |
Token 过期异常 |
环境要求
- PHP >= 5.3.0