sop/jwx

支持签名(JWS)和加密(JWE)的 PHP JSON 网络令牌(JWT)库。

0.12.0 2022-09-07 10:04 UTC

This package is auto-updated.

Last update: 2024-09-17 09:23:07 UTC


README

Build Status Scrutinizer Code Quality Coverage Status License

支持签名(JWS)和加密(JWE)的 PHP JSON 网络令牌(JWT)库。

还实现了未编码负载选项(RFC 7797)。

功能

  • 签名和签名验证(JWS)
    • HMAC、RSA 和 EC
  • 支持压缩和完整性保护的加密和解密(JWE)
    • AES
  • 声明验证
    • 具有合理默认值的可配置性
  • JSON 网络密钥(JWK)
    • 将 PEM 编码的密钥转换为 JWK 并反之亦然

支持算法

  • 签名
    • SHA-256、SHA-384 和 SHA-512 的 HMAC
    • SHA-256、SHA-384 和 SHA-512 的 RSASSA-PKCS1-v1_5
    • P-256、P-384 和 P-521 曲线的 ECDSA
  • 内容加密
    • 使用 128、192 和 256 位密钥大小的 AES-CBC
    • 使用 128、192 和 256 位密钥大小的 AES-GCM
  • 密钥管理
    • 共享对称密钥(直接)
    • RSAES-PKCS1-v1_5
    • RSAES OAEP
    • 使用 128、192 和 256 位密钥大小的 AES Key Wrap
    • 使用 128、192 和 256 位密钥大小的 AES-GCM 密钥加密
    • 基于密码的密钥加密(PBES2 与 AES Key Wrap)
  • 压缩
    • DEFLATE

要求

安装

此库可在 Packagist 上找到。

composer require sop/jwx

用法

Claims 类包含代表声明的 Claim 对象。声明应编码到一个 JWT 中,该 JWT 可以进一步签名或加密,分别生成 JWS 或 JWE。

JWS 和 JWE 还可以用于携带任意负载,而不仅仅是 JSON 声明。

代码示例

简单的 JWT

https://jwt.node.org.cn/ HS512 示例解析 JWT。

$jwt = new JWT($token);
// create context for the claims validation
// 'your-512-bit-secret' key is used to verify the signature
$ctx = ValidationContext::fromJWK(
    SymmetricKeyJWK::fromKey('your-512-bit-secret'));
// validate claims
$claims = $jwt->claims($ctx);
// print value of the subject claim
echo $claims->subject()->value();

附加验证

解析与上述相同的令牌,但还验证主题和管理声明。

$jwt = new JWT($token);
// validate that the subject is "1234567890"
// validate that the admin claim is true using explicitly provided validator
$ctx = ValidationContext::fromJWK(
    SymmetricKeyJWK::fromKey('your-512-bit-secret'),
        ['sub' => '1234567890']
    )->withConstraint('admin', true, new EqualsValidator());
// validate and print all claims
$claims = $jwt->claims($ctx);
foreach ($claims as $claim) {
    printf("%s: %s\n", $claim->name(), $claim->value());
}

更多示例

有关更多示例,请参阅 /examples 目录。

许可证

本项目采用 MIT 许可证。