strobotti / php-jwk
一个用于处理JWKs(Json Web Keys)的小型PHP库
v1.4.4
2024-04-30 12:23 UTC
Requires
- php: >=7.3.0
- ext-json: *
- ext-openssl: *
- phpseclib/phpseclib: ^3.0
Requires (Dev)
- ext-xml: *
- friendsofphp/php-cs-fixer: 3.54.0
- phpunit/phpunit: ^10.0
README
一个用于处理JWKs(Json Web Keys)的小型PHP库
此库帮助从PEM创建json web key sets,也能从json web key sets中提取PEM。
请注意,目前**仅支持RSA密钥**!
参见JSON Web Key RFC获取参考。
安装
此库需要PHP版本7.3或更高,可以使用composer进行安装。
$ composer require strobotti/php-jwk
示例用法
请参阅此处的完整示例。
从PEM创建密钥对象
<?php $pem = <<<'EOT' -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4dGQ7bQK8LgILOdLsYzf ZjkEAoQeVC/aqyc8GC6RX7dq/KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdD Nq1n52TpxQwI2EqxSk7I9fKPKhRt4F8+2yETlYvye+2s6NeWJim0KBtOVrk0gWvE Dgd6WOqJl/yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X+Tip84wqwyRpU lq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll+p/Dg8vAXxJLIJ4SNLcqgFeZe 4OfHLgdzMvxXZJnPp/VgmkcpUdRotazKZumj6dBPcXI/XID4Z4Z3OM1KrZPJNdUh xwIDAQAB -----END PUBLIC KEY----- EOT; $options = [ 'use' => 'sig', 'alg' => 'RS256', 'kid' => 'eXaunmL', ]; $keyFactory = new Strobotti\JWK\KeyFactory(); $key = $keyFactory->createFromPem($pem, $options); echo "$key";
输出
{ "kty": "RSA", "use": "sig", "alg": "RS256", "kid": "eXaunmL", "n": "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw", "e": "AQAB" }
从密钥创建JWK集(jwks)
<?php // ...pick up from the previous example $keySet = new \Strobotti\JWK\KeySet(); $keySet->addKey($key); echo "$keySet" ;
输出
{ "keys": [ { "kty": "RSA", "use": "sig", "alg": "RS256", "kid": "eXaunmL", "n": "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw", "e": "AQAB" } ] }
通过kid
从密钥集中获取密钥并将其转换为PEM
<?php // ...pick up from the previous example $key = $keySet->getKeyById('eXaunmL'); $pem = (new \Strobotti\JWK\KeyConverter())->keyToPem($key); echo "$pem";
输出
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4dGQ7bQK8LgILOdLsYzf
ZjkEAoQeVC/aqyc8GC6RX7dq/KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdD
Nq1n52TpxQwI2EqxSk7I9fKPKhRt4F8+2yETlYvye+2s6NeWJim0KBtOVrk0gWvE
Dgd6WOqJl/yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X+Tip84wqwyRpU
lq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll+p/Dg8vAXxJLIJ4SNLcqgFeZe
4OfHLgdzMvxXZJnPp/VgmkcpUdRotazKZumj6dBPcXI/XID4Z4Z3OM1KrZPJNdUh
xwIDAQAB
-----END PUBLIC KEY-----
贡献
请参阅CONTRIBUTING.md获取更多详细信息。