Signed Tokens (JWS)
Sign a Token with HMAC (HS256)
<?php
use Jose\Component\Core\AlgorithmManager;
use Jose\Component\Core\JWK;
use Jose\Component\Signature\Algorithm\HS256;
use Jose\Component\Signature\JWSBuilder;
use Jose\Component\Signature\Serializer\CompactSerializer;
require_once 'vendor/autoload.php';
// Create a symmetric key (shared secret)
$jwk = new JWK([
'kty' => 'oct',
'k' => base64_encode(random_bytes(32)), // 256-bit key
]);
$algorithmManager = new AlgorithmManager([new HS256()]);
$jwsBuilder = new JWSBuilder($algorithmManager);
$payload = json_encode([
'iss' => 'https://my-app.example.com',
'aud' => 'https://api.example.com',
'sub' => 'user-42',
'iat' => time(),
'exp' => time() + 3600,
]);
$jws = $jwsBuilder
->create()
->withPayload($payload)
->addSignature($jwk, ['alg' => 'HS256'])
->build();
$token = (new CompactSerializer())->serialize($jws);
// eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL215LWFwcC...Verify the Token
Sign a Token with RSA (RS256)
Verify with the Public Key
Sign a Token with Elliptic Curve (ES256)
Verify with the Public Key
Sign a Token with EdDSA (Ed25519)
Using the JWSLoader (Recommended)
Last updated
Was this helpful?