How JWKS rotation works in practice
Day 1: you publish keys A and B in your JWKS, but only sign new tokens with A. Verifiers cache the JWKS for ≤60 minutes and accept tokens signed by either key.
Day N: switch the signing key to B. New tokens carry `kid: "B"`. Within one cache duration, every verifier has the new JWKS and accepts B. Tokens signed by A continue to verify until they expire naturally.
Day N + access-token-lifetime: every live token has rotated to B. You can remove A from the JWKS. Done — zero downtime, no coordinated cutover.