tokenBrokering configuration on the OIDC app.
Flows
Token brokering supports three flows, determined by the mapping’stype field and whether a tokenSource is set.
| Type | tokenSource | Flow | Description |
|---|---|---|---|
passthrough | required | Session Passthrough | Return an upstream token from the user’s session |
exchange | omitted | Federated Exchange | Orchestrator mints a JWT and exchanges it with an upstream AS |
exchange | set | Brokered Exchange | Forward the user’s IdP token to an upstream AS for exchange |
Session Passthrough
The simplest flow. The user authenticated to an upstream IdP during login, and the Orchestrator cached their access token in the session. When the client requests a token for that audience, the Orchestrator returns the cached token directly. Trust model: The upstream IdP issued the token to the user during an interactive OAuth consent flow. The Orchestrator returns it from cache — the upstream doesn’t know the Orchestrator exists. When to use: The upstream service accepts standard OAuth tokens but does not support RFC 8693 token exchange. The user must have authenticated to the upstream IdP during their session. Examples: GitHub OAuth Apps, Atlassian 3LO, Google Workspace APIs (Drive, Calendar).Federated Exchange
The Orchestrator mints a short-lived JWT (signed with its own key) and exchanges it with the upstream authorization server via RFC 8693. The upstream AS trusts the Orchestrator as an IdP through a federation policy that validates the JWT signature via the Orchestrator’s OIDC discovery/JWKS endpoints. Trust model: The upstream AS trusts the Orchestrator’s issuer. A federation policy on the upstream maps the Orchestrator’s JWT claims to an upstream identity. When to use: The upstream supports RFC 8693 token exchange with external JWTs. No user interaction with the upstream is required — the trust is configured between the Orchestrator and the upstream AS. Examples: Databricks Workload Identity Federation, GCP Workload Identity Federation.Brokered Exchange
The Orchestrator retrieves the user’s IdP token from the session (like Session Passthrough) and then uses it as thesubject_token in an RFC 8693 exchange with the upstream AS (like Federated Exchange). The upstream AS trusts the customer’s IdP directly — the Orchestrator is not in the trust chain.
Trust model: The upstream AS trusts the customer’s IdP (e.g., Okta, Entra) directly. The Orchestrator is invisible to the upstream — it forwards the customer’s IdP token.
When to use: The upstream supports RFC 8693 with external JWTs, and the customer’s IdP is already configured as a trusted issuer on the upstream. This avoids adding the Orchestrator to the trust chain.
Examples: GCP Workload Identity Federation with Okta/Entra as the trusted issuer, Databricks federation with a customer’s IdP.
Client Request Format
From the client’s perspective, token brokering is transparent — it uses standard RFC 8693 token exchange against the Orchestrator’s token endpoint with anaudience parameter.
Configuration
Token brokering is configured on an OIDC app under thetokenBrokering field. Each mapping associates an audience with a brokering action.
Mapping Fields
| Field | Type | Required | Description |
|---|---|---|---|
audience | string | yes | The audience value that triggers this mapping. Must also be listed in the client’s allowedAudiences. |
type | string | yes | The brokering flow: passthrough or exchange. |
passthrough | object | conditional | Required when type is passthrough. |
passthrough.tokenSource.idp | string | yes | The IdP whose access token is stored in the user’s session. |
exchange | object | conditional | Required when type is exchange. |
exchange.idp | string | yes | The upstream IdP/AS to exchange with. |
exchange.type | string | no | Token exchange semantics: delegation or impersonation. Defaults to delegation. |
exchange.scope | string | no | Scope to request from the upstream AS. If omitted, client-requested scopes pass through. |
exchange.tokenSource.idp | string | no | The IdP whose session token to use as the subject. If omitted, the Orchestrator mints its own JWT. |
Session Passthrough Example
The user authenticates to GitHub during login. The client exchanges its Maverics token for the user’s GitHub access token.maverics.yaml
Authorization
Token brokering integrates with the existing token exchange authorization pipeline. Before any brokering action is taken, the Orchestrator:- Validates client-requested scopes against the client’s
customScopesconfiguration. - Evaluates OPA token minting policies configured on the client’s
authorization.tokenMinting.accessToken.policies. - Only if authorized, proceeds with the brokering action.
Prerequisites
For Passthrough
- The
passthrough.tokenSource.idpmust reference a configured connector. - The user must complete an interactive OAuth login flow with that IdP during their session so the access token is cached.
For Exchange (without tokenSource)
- The Orchestrator’s OIDC well-known endpoint and JWKS must be publicly reachable so the upstream AS can validate the minted JWT’s signature.
- The upstream AS must have a federation policy that trusts the Orchestrator’s issuer and maps its JWT claims to an upstream identity.
- The
exchange.idpmust reference a configured connector that supports RFC 8693 token exchange.
For Exchange (with tokenSource)
- The
exchange.tokenSource.idpmust reference a configured connector, and the user must have authenticated to it during their session. - The tokenSource IdP’s access token must be a JWT (the upstream validates it via that IdP’s OIDC discovery/JWKS).
- The upstream AS must have a federation policy that trusts the tokenSource IdP’s issuer directly.
- The
exchange.idpmust reference a configured connector that supports RFC 8693 token exchange.
Related Pages
Experimental Features
Overview of all experimental features and important caveats
SSO with OIDC
Configure the Orchestrator as an OIDC Provider
Policies
OPA authorization policies for token minting