The JWKS endpoint is in early access and the specification below is the shape it will ship with. Partners integrating now can validate their JWKS caching, rotation, and signature-verification logic against the launch contract — contact your account manager for a sandbox hand-off.
Endpoint
Response
The endpoint returns a standard RFC 7517 JWK Set containing the SIS’s active signing keys:| Field | Description |
|---|---|
kty | Key type — EC for ECDSA keys |
crv | Curve — P-256 for ES256 |
kid | Key ID — matches the kid header in issued JWTs |
use | Key usage — always sig (signing) |
alg | Algorithm — ES256 (ECDSA with P-256 and SHA-256) |
Signing Algorithm
The SIS signs JWTs using ES256 (ECDSA P-256). When verifying, ensure your JWT library is configured to accept ES256 and reject other algorithms to prevent algorithm confusion attacks.Fetching the JWKS
Most JWT libraries handle JWKS fetching and caching automatically. Here are examples using popular libraries:TypeScript (jose)
jose library’s createRemoteJWKSet handles caching and key rotation automatically. It fetches keys on first use and refreshes them when it encounters a JWT with an unknown kid.
Python (PyJWT)
Caching
The JWKS response includes standard HTTP cache headers. Follow these guidelines: Cache the JWKS response. Fetching the JWKS on every request adds unnecessary latency. Most JWT libraries cache automatically — let them handle it. RespectCache-Control headers. The SIS sets cache lifetimes that balance key rotation speed with client performance. Do not override these with longer TTLs.
Refetch on unknown kid. If you encounter a JWT whose kid doesn’t match any cached key, refetch the JWKS before rejecting the token. This handles key rotations gracefully.
Recommended TTL: If you implement your own cache, a 5-minute TTL provides a good balance. The SIS will never rotate keys faster than this window allows.
Key Rotation
The SIS rotates signing keys periodically. During a rotation:- The new key is added to the JWKS before any JWTs are signed with it
- Both old and new keys appear in the JWKS simultaneously
- The old key is removed from the JWKS only after all JWTs signed with it have expired
kid values, rotations are seamless.