Tokens are verified on every request and are never stored. A workload’s access ends when its token expires and it can’t get a new one, or as soon as you disable or remove its mapping.
How it works
- The workload asks its platform for a token addressed to Bifrost: an app-only Entra token for the Bifrost SSO app, an AWS STS web identity token, or a client-credentials token from your identity provider.
- It calls an inference endpoint with
Authorization: Bearer <token>and no virtual key. - Bifrost checks that the token comes from a source it trusts (its
issmust match exactly), is addressed to Bifrost, and belongs to a workload: Entra takes only app-only tokens, and a generic issuer takes only tokens that pass its rule or, without one, whose workload ID is mapped. Anything else, including a person’s token, is left to the normal sign-in path, even when the same identity provider runs your SSO. - Bifrost verifies the signature against the source’s published keys, then the expiry and lifetime.
- It looks up the mapping for the token’s identity, such as the object ID, role ARN or client ID. Entra object IDs match whatever their case; an issuer’s workload IDs, role ARNs included, match exactly as the token carries them.
- The request runs as the mapped service account. The token is removed from the request, so it is never forwarded to a provider.
Trusted issuers
Azure workload identity federation is available whenever your SSO provider is Microsoft Entra. Other sources are additional trusted issuers, set on the SSO provider: open User Provisioning, edit the provider, and go to Provider Configuration → Workload identity. For each issuer, give it a name, choose AWS or Generic OIDC, paste the issuer URL exactly as its tokens carry it iniss, and set the audience workloads request tokens for, usually Bifrost’s own URL. Select Test to have Bifrost fetch the issuer’s discovery document and signing keys before you save. If the test fails, it says why, such as an HTTP error, a discovery document naming another issuer, or an address the gateway’s outbound network policy blocks.
AWS fixes the claim that names a workload: the IAM role ARN. A generic issuer names its workload ID claim. Without a rule it takes only tokens whose workload ID is mapped, so it needs no rule to tell people apart unless you map your SSO app’s own client ID (see OIDC providers). Trusted issuers are part of the provider’s settings: they are saved with it, need the User Provisioning permission, and are replaced if you switch to another identity provider. Turning an issuer off refuses its tokens and keeps its mappings.
Mappings refer to an issuer by its name, which is unique among the provider’s issuers, ignoring case. Each mapping also records the issuer’s kind, URL and workload ID claim from when it was made, so a mapping never moves to a different issuer:
- While any workload is mapped on an issuer, Bifrost refuses a provider save that changes its kind, issuer URL or workload ID claim. Disconnect those mappings first, or add the new issuer under another name.
- Renaming or removing an issuer is allowed. Its mappings take no tokens, and show the issuer as unavailable, until an issuer with that name is back.
- If an issuer changes anyway, for example in
config.json, its mappings show that the issuer changed and take no tokens until you map the workloads again.
Mapping a workload
Open the service account under Governance → Users, go to Workload identity, and select Add workload identity. Choose where the token comes from, then identify the workload:- Azure workload identity federation: search the Entra directory for the managed identity or app, or paste its object ID. Its name is taken from Entra.
- An additional trusted issuer: enter the role ARN, client ID or other identity the issuer’s kind names, exactly as tokens carry it.
/api/governance/users/{user_id}/workload-identities.
Declarative configuration
Trusted issuers can live inconfig.json, or in Helm values under bifrost.scim.config, on the SSO provider under workloadIdentity.additionalTrustedIssuers. Mappings can’t: workloads are mapped to service accounts in the dashboard or through the API.
- A generic issuer needs
identityClaimandmachineCheck. Use{"kind": "any"}to take only tokens whose workload ID is mapped, or a rule (sub_equals_claim,claim_equals,claim_prefix) with itsclaimand, for the last two, a non-emptyvalue. issuerUrlmust be https, or http on localhost for testing, with no user info, query or fragment.maxLifetimeSecondscaps a token’s total lifetime, between 300 and 172800; the default is 24 hours.disabled: truekeeps an issuer and its mappings but refuses its tokens.
Responses
A service account with no access profile is refused by governance with an access-not-found error, as for any user without one.
MCP gateway
Workload tokens work on/mcp too, governed by the service account’s access profile like any other request. When the MCP gateway’s auth mode is OAuth only, it accepts only tokens Bifrost issued, so workload tokens are refused there.
Permissions
Viewing a service account’s workload identities is part of viewing the account, so it needs Users → View. Adding, changing or removing a mapping lets whoever holds the workload’s token act as the service account, so it has its own permission: User Provisioning →UpdateWorkloadIdentities. The same permission covers searching the Entra directory for workloads. Admins have it by default; grant it to other roles explicitly. Users → Update alone is not enough.
Trusted issuers are SSO provider settings: saving them, and testing one, needs User Provisioning → Update.
