Summary
Allow signingKeyRefs in the wristband response configuration to accept Secrets containing only public keys (for signature verification), not just private keys (for signing). Currently, Authorino rejects public-key-only Secrets with "invalid signing key algorithm".
Problem
In a multi-cluster federation setup, each cluster issues wristband JWTs signed by its own private key. Peer clusters need to verify these tokens but do not need to sign with them. The current signingKeyRefs API requires every referenced Secret to contain a private key — there is no way to add a key for verification only.
This forces operators to distribute private signing keys to every peer cluster, which creates a cascading compromise risk: an attacker who compromises any single cluster gains access to every peer's private signing key and can forge tokens that appear to originate from any cluster in the federation.
Current behavior
response:
success:
headers:
x-wristband-token:
wristband:
issuer: "https://..."
signingKeyRefs:
- name: local-signing-key # private key — signs tokens ✓
algorithm: ES256
- name: peer-cluster-key # must also be private key ✗
algorithm: ES256 # rejected if public-key-only
If peer-cluster-key contains only a public key (e.g., PEM with BEGIN PUBLIC KEY), Authorino rejects it with "invalid signing key algorithm".
Desired behavior
signingKeyRefs:
- name: local-signing-key # private key — used for signing
algorithm: ES256
- name: peer-cluster-key # public key only — used for JWKS verification
algorithm: ES256
The first key (private) signs new tokens. All public keys are published in the JWKS endpoint for verification. The second+ keys only need public keys.
Use case
- Multi-cluster wristband federation: Clusters issue wristband JWTs for cross-cluster identity portability. Each cluster signs with its own key and verifies tokens from all peers. Currently requires distributing all private keys to all clusters.
- Key rotation with overlap: During key rotation, the old key (public only, private destroyed) should remain in the JWKS for verification of in-flight tokens while the new key signs.
- Zero-trust posture: Verification-only peers should never hold signing keys they don't own.
Security impact
With public-key-only support, compromising a peer cluster would only expose:
- That cluster's own private signing key
- Other clusters' public keys (non-sensitive)
Without it (current state), compromising any peer exposes all clusters' private keys — a single breach cascades into full federation compromise.
Alternatives considered
- Separate JWKS endpoint per peer: Each peer cluster serves its own JWKS at a different URL. The consumer configures multiple
jwt authentication entries, one per peer. This works but doesn't scale — adding a peer requires adding a new auth rule on every cluster.
- External JWKS aggregator: A sidecar or service that aggregates multiple JWKS endpoints into one. Adds operational complexity.
Summary
Allow
signingKeyRefsin the wristband response configuration to accept Secrets containing only public keys (for signature verification), not just private keys (for signing). Currently, Authorino rejects public-key-only Secrets with"invalid signing key algorithm".Problem
In a multi-cluster federation setup, each cluster issues wristband JWTs signed by its own private key. Peer clusters need to verify these tokens but do not need to sign with them. The current
signingKeyRefsAPI requires every referenced Secret to contain a private key — there is no way to add a key for verification only.This forces operators to distribute private signing keys to every peer cluster, which creates a cascading compromise risk: an attacker who compromises any single cluster gains access to every peer's private signing key and can forge tokens that appear to originate from any cluster in the federation.
Current behavior
If
peer-cluster-keycontains only a public key (e.g., PEM withBEGIN PUBLIC KEY), Authorino rejects it with"invalid signing key algorithm".Desired behavior
The first key (private) signs new tokens. All public keys are published in the JWKS endpoint for verification. The second+ keys only need public keys.
Use case
Security impact
With public-key-only support, compromising a peer cluster would only expose:
Without it (current state), compromising any peer exposes all clusters' private keys — a single breach cascades into full federation compromise.
Alternatives considered
jwtauthentication entries, one per peer. This works but doesn't scale — adding a peer requires adding a new auth rule on every cluster.