Workload identity federation
Authenticate an agent to its Virtual MCP with a short-lived OIDC token that the agent's own infrastructure mints for it, instead of a credential MintMCP issues and you store. The workload requests a token from its platform's OpenID Connect (OIDC) provider, scoped to a MintMCP audience, and sends that token as Authorization: Bearer <token> on each MCP request. MintMCP verifies the token against the provider and maps it to the agent identity you bound to it, so nothing secret has to live in the workload.
Workload identity federation applies to agent identities only, and it is available on request rather than enabled by default. Contact enterprise@mintmcp.com to turn it on for your organization.
Why workload identity over M2M
An M2M token already keeps a long-lived secret out of the request path, but MintMCP still mints a client secret that you have to copy into each runtime's secret manager and rotate on your own schedule. Every new context (a new cluster, a new CI environment, a new service) is another secret to distribute and track.
Workload identity removes that secret. The agent's platform already gives each workload a cryptographic identity (a Kubernetes service account, a cloud instance role, a CI job identity), and its OIDC provider mints a fresh, context-specific token for that identity on demand. MintMCP trusts the provider and maps one exact identity to one agent, so there is nothing for you to store, hand off, or rotate:
- No MintMCP-issued secret. MintMCP never generates a client secret or key for this path, so there is no one-time secret to capture and no secret to leak.
- Tokens mint themselves per context. Each workload gets its own short-lived token from its own infrastructure, instead of you provisioning and placing a client secret for every context by hand.
- Rotation is the provider's job. Signing keys rotate through the provider's published key set (JWKS), and MintMCP follows the rotation with no action on your side.
- Revoke at the source. Removing the workload upstream (deleting the service account or role) stops it from getting new tokens, and disabling the binding or provider in MintMCP cuts it off on the next request.
Reach for M2M tokens when the runtime has no workload identity to present and can run a client-credentials exchange, and for a bearer key when the client can only send a static header.
| Property | Bearer key | M2M token | Workload identity |
|---|---|---|---|
| What each request carries | The long-lived secret | A short-lived access token | A short-lived OIDC token from your provider |
| MintMCP-issued secret | The key itself | A client secret you store | None |
| Who mints the credential | MintMCP | MintMCP mints the client; your runtime exchanges the secret | Your OIDC provider, per workload |
| Rotation | Re-mint the key, delete the old one | Rotate the client secret on your schedule | Your provider rotates signing keys; MintMCP follows |
| Containment | Revoke the key | Token expires, or revoke a secret | Token expires, disable the binding or provider, or remove the workload upstream |
How it works
Trust is split into two configuration surfaces so that establishing which issuers your organization trusts is a separate decision from assigning an identity to an agent:
- An organization admin registers a workload identity provider once per external issuer.
- An agent admin binds one exact subject from an approved provider to an agent identity.
Register a workload identity provider
In enterprise settings, open Workload identity providers and create a provider with a name and the exact issuer URL of your OIDC provider. MintMCP runs OIDC discovery against the issuer, validates its published signing keys, and stores the trust configuration. The issuer must be reachable over public HTTPS so MintMCP can fetch its discovery and JWKS documents.
Each provider shows the canonical audience your workloads must request, derived from your deployment's application URL:
https://app.mintmcp.com/oidc/workload # US
https://eu.mintmcp.com/oidc/workload # EU
Copy the audience shown for your provider rather than composing it by hand, and configure your workload to request a token for that exact value. Registering a provider is org-wide: disabling it is an immediate emergency stop for every agent bound to it, so provider management can require a stronger permission than assigning a subject to an agent.
Bind a subject to an agent identity
Open the agent Virtual MCP's authentication settings and, in the Workload identity card, select an approved provider and enter the exact sub value your provider puts in the workload's token. MintMCP maps that one subject to this agent identity. The match is exact and case-sensitive, and each agent accepts one binding at a time, so you have a single external identity to reason about per agent. Changing the provider or subject means deleting the binding and creating its replacement.
No token or key is ever entered here: the card only names an already-trusted provider and the subject to expect.
How a request authenticates
At request time the workload presents a token it minted itself, and MintMCP verifies it and resolves the bound agent before the call reaches any connector:
The external token proves which workload is calling; it does not carry MintMCP permissions. After MintMCP maps the verified subject to the agent identity, the request uses that agent's own connector credentials, exactly as any other agent traffic does. Claims such as roles, groups, or scopes in the external token are ignored and never grant access.
Scoping
A workload token carries the same tight scope as any agent credential, with trust anchored to the approved provider:
| Scope | What it means |
|---|---|
| Provider-trusted | Only tokens from an approved organization provider, matching its exact issuer and audience, are considered |
| Subject-bound | One exact, case-sensitive subject maps to exactly one agent identity |
| VMCP-bound | The token authenticates against that agent's Virtual MCP; the gateway rechecks the agent and organization on every request |
| Principal-bound | The token acts as exactly one agent identity, never a human user, and external claims never elevate it |
| Policy-bound | The token inherits the Virtual MCP's tool curation, rules, and middleware |
| Org-scoped | Tokens never cross organizations; the organization comes from the target Virtual MCP, never from the token |
For how access policies shape what any agent credential can reach, see role-based access control.
Audit
Workload authentication is auditable at both configuration and request time:
- Provider lifecycle is recorded in signed provider history: created, updated, enabled or disabled, metadata refreshed, and deleted transitions, each with the acting admin.
- Binding lifecycle writes discrete events:
agent_workload_identity_binding_created,agent_workload_identity_binding_updated, andagent_workload_identity_binding_deleted, each recording the agent, provider, subject, and acting admin. - Runtime authentication emits structured logs and metrics under the
oidc_workloadmethod (issuer and subject resolution, key cache activity, and a bounded result reason), so operators can see authentication outcomes without a durable audit row per MCP call. - Tool calls made with a workload token attribute to the agent identity, the same as any other agent traffic, so agent activity stays distinguishable from human activity in the gateway audit log.
Tokens, full token claims, signatures, and signing-key material are never stored or logged. For where these land in your audit pipeline, see audit and observability.
Constraints
- Token claims. MintMCP accepts a compact, signed JWT whose
issexactly matches the provider's issuer, whosesubexactly and case-sensitively matches the bound subject, and whoseaudcontains the canonical MintMCP audience. Tokens must carryiatandexpand may live at most one hour. Signing algorithms are asymmetric only:RS256,PS256,ES256, andEdDSA. Unsigned (none) and symmetric (HS*) tokens are rejected. - Trust is configured on the provider side. MintMCP verifies tokens but never issues them. Your OIDC provider must be reachable over public HTTPS for discovery and key rotation, and you configure the workload to request the MintMCP audience. Establishing which issuers to trust happens in provider settings; agents only reference an already-approved provider.
- One binding per agent. An agent accepts a single external identity at a time. Supporting a workload from a different provider or subject means replacing the binding.
- Kubernetes uses projected service account tokens. Configure a service account token volume projection with the MintMCP audience and bind that service account's subject to the agent. MintMCP consumes the standard projected OIDC token; it does not use SPIFFE JWT-SVID.
- Configured in the web UI only. Providers and bindings are managed in enterprise settings and agent Virtual MCP settings, not through the Admin MCP.
Related
- M2M tokens: the client-credentials alternative when a workload has no infrastructure identity to present
- Bearer keys: the long-lived static-header credential
- Agent identities: the non-human principal a workload binding maps to
- Role-based access control: how access policies shape what an agent credential can reach
- Audit and observability: where authentication events and agent tool calls land