deatil/php-jwt-ext

A ext library to work with JSON Web Token and JSON Web Signature.

Maintainers

Package info

github.com/deatil/php-jwt-ext

pkg:composer/deatil/php-jwt-ext

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

0.0.6 2026-08-18 14:37 UTC

This package is auto-updated.

Last update: 2026-08-19 12:10:26 UTC


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\PS256
  • PS384: Deatil\JWT\Signer\Rsa\PS384
  • PS512: 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