deatil / php-jwt-ext
A ext library to work with JSON Web Token and JSON Web Signature.
0.0.6
2026-08-18 14:37 UTC
Requires
- php: >=8.2
- deatil/php-jwt: >=0.1.1
- phpseclib/phpseclib: ^3.0
Requires (Dev)
- phpunit/phpunit: 11.5.56
README
A php-jwt extend for php.
Installation
you can install it using Composer.
composer require deatil/php-jwt-ext
Get Starting
use DateTimeImmutable; use Deatil\JWT\Facade; use Deatil\JWT\Signer\Rsa\PS256; use Deatil\JWT\Key\RsaKey; $signer = new PS256(); $prikey = "-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDh/nCDmXaEqxN4 16b9XjV8acmbqA52uPzKbesWQRT/BPxEO2dKAURk5CkcSBDskvfzFR9TRjeDppjD 1BPSEnuYKnP0SvmotoxcnBnHMfMBqGV8DSJyppu8k4y9C3MPq5C/rA8TJm0NNaJC L0BfAGkeyw+elgYifbRlm42VfYGsKVyIeEI9Qghk5Cf8yapMPfWNLKOhChXsyGEx MBMonHZeseFH7UNwonNAFJMAaelhVqqmwBFqn6fBGKmvedRO7HIaiEFNKaMna6xJ 5Bccjds4MhF7UC5PIdx4Bt7CfxvjrbIRYoBF2l30CNBblIhU992zPkHoaVhDkt1g q3OdO7LvAgMBAAECggEBALCJrWTv7ahnZ3efpqAIBuogTVBd8KaHjVmokds5jehF AbdfXClwYfgaT477MNVNXYmzN1w63sTl0DIxqiYRMCFHEHuGUg6cQ3tYqb50Y2sp G9XTANTlF4UxEeDfX8ue7xz7kG8aNlf6TL084iEUVgmrAJGWikZJQjGZWPmtKC3O TeJY5Bev5qHVuMRe+XEM5aQc3ph+lXlOF0Qp0Eg8YRWprrev2faH6prMqu2JGomo ac6sfM4QJhtEViF7Gw0XPthPTbF19IefuAwi9psMM/9CnQ+MTWN2i6IxoUdicsFu C+Wdlb3K5V/+uldNSr+ePEhcya+YTLK9IOcVwWKQHykCgYEA8XvuEribf+t0ZPtf xr+DC9nZHXbVoFx0/ARpSG+P/fp3Hn3rO9iYQ6OtZ9mEXTzf+dhYTaRWq6PbCOz6 i0It+J8QSBdxU9OcQ4871mDe41IvSc1CCGMW4PeIYtNQEK0zrqhN7SMtKyUd7yAs YRCrIzMc7NjE2qJvFw5kh7xC3Q0CgYEA75Qjn5daNYSAOa/ILdOs5J/8oIaO27RN K/fSKm/btsMsyum8+YP/mWmm1MXBzG9WEKzZv5yEKOWCEVJYVsFQsGt9yLYW2WIK U5UxiuU0F1RImF/dphIbYOh7oGC3WfYKk2f+K7ftjc196ZkEkDuE2Xh1h75/67Mz ztx1DbXj6OsCgYBcDRfFfyWXb5Og4smxo1M680H2H1RzmorlfnD7sbs733wE3Y8L 8xanwf7Z9WqleA0Q2k1e22RGbWGTV3JyHzoS6d90+6qxf5qzjigLIkYUdUGdambf d5ZDD1ioA1Ej6kInM/TwjlYreiyc+LCyF36FHnjKOB9iEEU0jsH3k+YRCQKBgHMV LPuHX6zfhhyvxK/Gw4FbHKYbnNoKxRs+wvThoKAtJwIdv0n4TzppVttUV2CVhrkh 3sM9MvrWLGGXtZmO6Oyl5dkZJuarQpydyRuYOCqQsQKI4lbY0c/+PQxwCQMsvi3K wXxMsM7yC+6/M0L5ZDp2s7ZOGvKktVlD6vJ4Eg+bAoGARnGGprSBW8dAb/s53r0p aPh4k/bySrXdGEprLwk6g3S8+aylcmjUdjcIq4dEb4A/nv12dx1Sc4y99c62R0zi +TT6FYBIFDMz3HNVzO0Jr6SgC6CNVotL0D725CioR5U1NyTHHRLZth69HLuEZCZQ lPJCbePXMRRHmOl1svzcVuo= -----END PRIVATE KEY-----"; $pubkey = "-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4f5wg5l2hKsTeNem/V41 fGnJm6gOdrj8ym3rFkEU/wT8RDtnSgFEZOQpHEgQ7JL38xUfU0Y3g6aYw9QT0hJ7 mCpz9Er5qLaMXJwZxzHzAahlfA0icqabvJOMvQtzD6uQv6wPEyZtDTWiQi9AXwBp HssPnpYGIn20ZZuNlX2BrClciHhCPUIIZOQn/MmqTD31jSyjoQoV7MhhMTATKJx2 XrHhR+1DcKJzQBSTAGnpYVaqpsARap+nwRipr3nUTuxyGohBTSmjJ2usSeQXHI3b ODIRe1AuTyHceAbewn8b462yEWKARdpd9AjQW5SIVPfdsz5B6GlYQ5LdYKtznTuy 7wIDAQAB -----END PUBLIC KEY-----"; $t = new DateTimeImmutable(); $claims = [ "iss" => "joe", "exp" => $t->setTimestamp(1300819380), "http://example.com/is_root" => true, ]; $token = Facade::sign($signer, $claims, RsaKey::parsePrivateKeyPEM($prikey)); $tokenStr = $token->toString(); // ouput: // make token: eyJ0eXAiOiJKV1QiLCJhbGciOiJQUzI1NiJ9.eyJpc3MiOiJqb2UiLCJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.GIXxlCsbPsCVLyJdGVL0mz5Yg_40HEZSZIQwgdc02sPAnMfy29ZbbWCt5PAyv8KkbLZPx4kTgYwANhVm4_ggUJ25HARteMJBMbS-bxXlYlxjMxNy6yFj5unqQLicjCrQaN1UOw5GTmBjVssqQtTuZnlMduECq7uorsn5QoqIK3z01kiWjWpdo_SKJJ2Afeg0SqY7rx5jH_QVTLIzyuoMahQ8hDsqjcFjku2ncbZ3I0oJ0IZsiWxF21TmjxZRkPTe1LtYLSF_gaWucYJU_YOm5OWnlXjywMFq0ItQEUXMxO9OxUGjkISiAdUNwHkNRyZBFhmFmHjjMX8EPKsY99AAaw echo "make token: {$tokenStr} \n"; $token = Facade::parse($signer, $tokenStr, RsaKey::parsePublicKeyPEM($pubkey)); $iss = $token->claims()->get('iss'); // ouput: // token iss: joe echo "token iss: {$iss} \n";
Signers
The JWT library have signers:
PS256: Deatil\JWT\Signer\Rsa\PS256PS384: Deatil\JWT\Signer\Rsa\PS384PS512: Deatil\JWT\Signer\Rsa\PS512
Sign PublicKey
ECDSA PublicKey:
use Deatil\JWT\Key\EcdsaKey; // from key pem string with pkcs1 or pkcs8 key $prikey = EcdsaKey::parsePrivateKeyPEM($key, $password); $pubkey = EcdsaKey::parsePublicKeyPEM($key);
EdDSA PublicKey:
use Deatil\JWT\Key\EddsaKey; // from key pem string $prikey = EddsaKey::parsePrivateKeyPEM($key); $pubkey = EddsaKey::parsePublicKeyPEM($key);
RSA PublicKey:
use Deatil\JWT\Key\RsaKey; // from key pem string with pkcs1 or pkcs8 key $prikey = RsaKey::parsePrivateKeyPEM($key, $password); $pubkey = RsaKey::parsePublicKeyPEM($key);
LICENSE
- The library LICENSE is
Apache2, using the library need keep the LICENSE.
Copyright
- Copyright deatil(https://github.com/deatil).