Skip to Content
MuoCeon Docs
v1oauth context

Public keys

GET /v1/oauth/jwks — the JWKS key set, cacheable for 5 minutes.

GET {issuer}/jwks returns the signing key set. Resource servers pick the key matching the token's kid header and verify locally.

Request

No parameters, no authentication.

curl 'https://id.example.com/v1/oauth/jwks'

Response

{
  "keys": [
    {
      "kty": "EC",
      "crv": "P-256",
      "kid": "2026-11-01",
      "x": "...",
      "y": "...",
      "use": "sig",
      "alg": "ES256"
    }
  ]
}
FieldNotes
kidKey identifier; referenced by the token header
useAlways sig
algSigning algorithm

Caching

The response carries Cache-Control: public, max-age=300.

Why caching is allowed here

The opposite of token responses: this payload is public keys, not credentials. Every resource server needs a key by kid, and not caching would make this endpoint carry the verification load of the whole platform. The window is kept at 5 minutes so that a key rotation (new kid) propagates quickly; clients that meet an unknown kid refetch immediately, and the 5 minutes are only a backstop.

During key rotation

SituationHandling
Token kid present in the setVerify normally
Token kid missing from the setRefetch once; if still missing, treat the token as invalid
Both old and new key presentNormal; both are valid during the rotation window

On this page