PE
Protocol Explorer
Client Instance Assertion

Client Instance Assertion — SPIFFE Workload (SPIRE → OAuth)

A Kubernetes pod attested by SPIRE fetches a JWT-SVID from the SPIFFE Workload API, then exchanges it at a SPIFFE-OAuth adapter (Instance Issuer) to receive a re-minted client-instance+jwt. The re-minted assertion adds cnf.jkt (DPoP key binding), client_id, and the required typ — bridging SPIFFE workload identity into OAuth sender-constrained tokens. SPIRE's CredentialComposer cannot bind a workload-supplied public key into JWT-SVIDs during issuance (the API provides no mechanism for the workload to inject cnf.jkt at SVID mint time), so the adapter must independently verify key possession via a DPoP-style proof before embedding cnf.jkt. Without this proof step, a stolen SVID could be used with an arbitrary public key, binding the wrong key into the re-minted assertion.

Pod / WorkloadSPIRE AgentSPIFFE→OAuth AdapterAuthorization ServerResource Server1FetchJWTSVID (Workload API)2002JWT-SVID Response3POST /assert (SVID + key pr…4client-instance+jwt5POST /token (client_creds)6200 OK + Access Token7GET /api/repos (DPoP-bound)8200 OK + Resource
gRPC unix:///run/spire/sockets/agent.sock → SpiffeWorkloadAPI/FetchJWTSVID200

The pod calls the SPIFFE Workload API over a UNIX domain socket (no credentials needed — the SPIRE Agent attests the caller via kernel-level process inspection). It requests a JWT-SVID bound to the Instance Issuer's URL as audience. The SPIRE Agent contacts the SPIRE Server to fetch a valid SVID for this workload's SPIFFE ID.

• The SPIFFE Workload API is a gRPC API exposed by the SPIRE Agent over a UNIX domain socket (default: /run/spire/sockets/agent.sock).

• Attestation is transparent — the SPIRE Agent authenticates the caller using OS-level signals (Linux namespaces, cgroups, pod UID). No credentials are passed in the request.

• The audience list MUST match the Instance Issuer's identifier. Presenting this SVID to any other service will fail audience validation.

• SPIRE issues SVIDs backed by the SPIRE Server's CA — the trust bundle (root CA certs) is what the Issuer uses to verify the SVID signature.

1 / 8
speed

Step 1: FetchJWTSVID (Workload API)

Request / response
gRPCunix:///run/spire/sockets/agent.sock → SpiffeWorkloadAPI/FetchJWTSVID
Content-Type?

application/grpc+proto

x-spiffe-workload-api

true

Body
{
  "audience": [
    "https://issuer.openai.example.com"
  ],
  "spiffe_id": "spiffe://openai.example.com/codex/pod-abc123"
}