Description
Make both SPIFFE authentication methods produce equivalent OAuth behaviour:
client_credentials tokens whose subject is the workload, RFC 8693 delegation
with the workload as actor, and discovery metadata that advertises exactly the
methods actually available.
This is where the epic's central guarantee is either enforced or quietly lost.
Two credentials for the same SPIFFE ID must yield the same sub, the same
act, the same scopes, audiences, expiry and Cedar inputs. The authentication
method is an audit fact, not an authorization input.
Scope
- Make
client_credentials issue tokens whose subject is the associated SPIFFE
ID.
- Make RFC 8693 token exchange use the authenticated SPIFFE principal as
act.sub.
- Bind an optional actor token to that same principal.
- Require explicit client authorization for both
client_credentials and token
exchange.
- Require and authorize the target MCP
resource.
- Constrain requested scopes and resources by both workload policy and
source-token authority, whichever is narrower.
- Add
spiffe_x509 and spiffe_jwt to the dynamic discovery-metadata
mechanism.
- Record the authentication method for audit without letting it change
authorization semantics.
What belongs to other issues
This sub-issue has more external dependencies than any other, and its scope is
easy to over-draw. Three pieces are explicitly not to be built here:
Acceptance criteria
- X.509-SVID and JWT-SVID authentication for the same SPIFFE ID produce
equivalent sub, act, scopes, audiences, expiry and Cedar inputs.
- Public clients cannot use
client_credentials or token exchange.
- Token exchange is unavailable without an explicitly permitted confidential
client association.
- An actor token, when supplied, must be bound to the authenticated workload
principal.
- Requested scope and resource cannot exceed workload entitlement or
source-token authorization.
- Discovery advertises exactly
spiffe_x509, spiffe_jwt, or both, according
to operational configuration — never an unavailable method.
- Existing secret-authenticated confidential clients continue to use only their
registered grants.
- Public-only deployments' discovery metadata stays byte-identical.
Dependencies
Do not start this until the discovery-metadata and consent pieces have landed or
been explicitly claimed.
Related
Description
Make both SPIFFE authentication methods produce equivalent OAuth behaviour:
client_credentialstokens whose subject is the workload, RFC 8693 delegationwith the workload as actor, and discovery metadata that advertises exactly the
methods actually available.
This is where the epic's central guarantee is either enforced or quietly lost.
Two credentials for the same SPIFFE ID must yield the same
sub, the sameact, the same scopes, audiences, expiry and Cedar inputs. The authenticationmethod is an audit fact, not an authorization input.
Scope
client_credentialsissue tokens whose subject is the associated SPIFFEID.
act.sub.client_credentialsand tokenexchange.
resource.source-token authority, whichever is narrower.
spiffe_x509andspiffe_jwtto the dynamic discovery-metadatamechanism.
authorization semantics.
What belongs to other issues
This sub-issue has more external dependencies than any other, and its scope is
easy to over-draw. Three pieces are explicitly not to be built here:
id_tokensubject type belong to Support explicit actor_token and id_token subject type in token exchange #5815.Require the binding to the authenticated workload principal here; do not
re-specify the mechanism.
discovery currently publishes
grant_types_supported: [authorization_code, refresh_token]andtoken_endpoint_auth_methods_supported: ["none"], so anymetadata-driven client refuses to attempt the grant regardless of what is
configured. That fix is shared with the pre-provisioned-client option. Extend
it with two method names; do not fork it.
its
allowed_delegate_clientsfield is optional today only because no stableconfidential client ID can be created. SPIFFE makes the client ID equal to the
SPIFFE ID, so this work is part of what lets that field become required — or
better, lets the invariant be enforced from the other side, so every ID named
must resolve to a declared client. A typo currently reverts silently to
permissive behaviour.
Acceptance criteria
equivalent
sub,act, scopes, audiences, expiry and Cedar inputs.client_credentialsor token exchange.client association.
principal.
source-token authorization.
spiffe_x509,spiffe_jwt, or both, accordingto operational configuration — never an unavailable method.
registered grants.
Dependencies
Do not start this until the discovery-metadata and consent pieces have landed or
been explicitly claimed.
actor_tokenandid_tokensubject typeRelated