sop / jwx
支持签名(JWS)和加密(JWE)的 PHP JSON 网络令牌(JWT)库。
0.12.0
2022-09-07 10:04 UTC
Requires
- php: >=7.2
- ext-hash: *
- ext-openssl: *
- sop/aes-kw: ^3.0.0
- sop/crypto-encoding: ^0.3.0
- sop/crypto-types: ^0.3.0
- sop/gcm: ^3.0.0
Requires (Dev)
- ietf-jose/cookbook: *
- phpunit/phpunit: ^8.1
README
支持签名(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
要求
- PHP >=7.2
- openssl
- hash
- sop/crypto-types
- sop/crypto-encoding
- sop/aes-kw
- sop/gcm
安装
此库可在 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 许可证。