API and Token Security Flow#
Use this flow when securing API-to-API or client-to-API authorization tokens.
Brief#
The Token domain helps you choose the right token shape for the trust boundary you have. Start with the token type, then move to validation and key management details.
Choose the Token Type#
Use
Token\Jwt\SymmetricJwtfor shared-secret issuer/verifier setups.Use
Token\Jwt\AsymmetricJwtfor split trust boundaries (private signing key, public verification key).Use
Token\Opaque\OpaqueTokenwhen tokens should be random handles (server-side state lookup).Use
Token\Payload\SignedPayloadfor lightweight signed payload transport.
Learn by Example#
Scenario: an auth service signs JWTs with a private key and an API verifies them with a public key.
Minimal JWT Example (Asymmetric)#
<?php
declare(strict_types=1);
use Infocyph\Epicrypt\Token\Jwt\AsymmetricJwt;
use Infocyph\Epicrypt\Token\Jwt\Enum\AsymmetricJwtAlgorithm;
use Infocyph\Epicrypt\Token\Jwt\Validation\RegisteredClaims;
// Define the claims your verifier expects.
$claims = new RegisteredClaims(
issuer: 'https://auth.example.com',
audience: 'api://orders',
subject: 'user-42',
);
$jwt = new AsymmetricJwt(
passphrase: null,
algorithm: AsymmetricJwtAlgorithm::RS512,
expectedClaims: $claims,
);
// The private key stays on the issuer side only.
$token = $jwt->encode([
'iss' => 'https://auth.example.com',
'aud' => 'api://orders',
'sub' => 'user-42',
'nbf' => time(),
'exp' => time() + 600,
], $privateKeyPem);
Minimal Opaque Token Example#
Scenario: you want a revocable bearer token whose meaning stays in server-side storage.
<?php
use Infocyph\Epicrypt\Token\Opaque\OpaqueToken;
$opaque = new OpaqueToken();
$token = $opaque->issue(48);
$digest = $opaque->hash($token);
Why This Flow#
JWT classes already enforce algorithm enums and claim validation.
JWT and signed payload flows support key-ring-based verification during rotation windows.
Opaque tokens avoid overloading bearer tokens with sensitive claim data.
Avoid#
mixing symmetric and asymmetric key expectations in the same verifier path
accepting algorithm headers without enforcing expected enum algorithm