Prerequisites
- A SPIFFE implementation (for example SPIRE) issuing JWT-SVIDs to your workloads, with a publicly accessible SPIFFE bundle endpoint
- A service principal with a SPIFFE federation trust. See set up federation if you haven’t created one yet. Use the SPIFFE preset.
- The trust’s client ID (for example
still-heron-30217@yourcompany.conductor.one/wfe)
Step 1: Configure the provider in C1
When creating the provider, select the SPIFFE preset and provide:
C1 verifies every JWT-SVID’s signature against this bundle endpoint, and confirms the token’s trust domain matches the one you configured — this check happens server-side, not in the trust’s CEL expression.
Step 2: Create a federation trust
Configure the trust with the workload path you want to allow. The wizard generates a CEL expression from the path you enter; switch to manual mode to write your own.Step 3: Request and exchange the token
From your workload, request a JWT-SVID from your SPIFFE implementation (for example the SPIRE Workload API), then exchange it for a C1 access token:CEL expression examples
The JWT-SVID’ssub claim is a SPIFFE ID URI in the form spiffe://<trust-domain>/<workload-path>. Use the CEL url() function to parse it and match on the workload path.
Restrict to a specific workload path
Restrict to a path prefix
Common JWT-SVID claims
JWT-SVIDs carry minimal claims compared to platform-specific OIDC tokens:The
iat claim is optional under the JWT-SVID specification, and many SPIFFE implementations (including SPIRE) omit it. C1 only enforces the token-freshness check when iat is present.Security best practices for SPIFFE
- Scope by workload path: Use
url(claims.sub).pathto restrict which specific workload identity can use this trust, not just the trust domain. - Keep bundle endpoints current: If your SPIFFE implementation rotates its signing keys, make sure the bundle endpoint URL configured in C1 stays reachable so signature verification keeps working.
- Scope trust roles: Use scoped roles on the federation trust to limit what the exchanged token can do. See security controls for details.