You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add an "Accept subject tokens from external issuers" section to
both the vMCP and Kubernetes embedded auth server guides, covering
the new `trustedIssuers` CRD field shipped in toolhive v0.44.0
(stacklok/toolhive#6353) that lets the RFC 8693 token-exchange
grant accept subject tokens minted by an external OIDC issuer.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
| `issuerUrl` | Yes | Expected `iss` claim value on the subject token (exact match). |
574
+
| `expectedAudience` | Yes | Resource/API identifier that must appear in the token's `aud`. Not a client ID. |
575
+
| `allowedDelegateClients` | Yes | ToolHive delegate `clientId`s permitted to exchange this issuer's tokens. Use `["*"]` to permit any confidential client with the token-exchange grant. |
576
+
| `allowedActors` | No | External client IDs whose tokens may be exchanged. Read from the claim named by `actorClaim`. Empty denies every token unless `allowMayAct` authorizes a specific delegation. |
577
+
| `actorClaim` | No | Claim on the subject token identifying the caller. Defaults to `azp`. Use `appid` for Microsoft Entra v1, `cid` for Okta, or the literal value `client_id` (a sentinel, not a claim name) to read the token's `client_id` claim. |
578
+
| `allowMayAct` | No | Set to `true` to honor a `may_act` claim from this issuer (RFC 8693 §4.4). Defaults to `false`; `may_act` bypasses `allowedActors`, so external issuers must opt in explicitly. Rejected when `allowedDelegateClients` is `["*"]`. |
579
+
| `jwksUrl` | No | JWKS endpoint for signature verification. When omitted, resolved via OIDC discovery at `{issuerUrl}/.well-known/openid-configuration`. |
580
+
| `allowPrivateIPs` | No | Permit OIDC discovery and JWKS fetches for this issuer to resolve to a private or loopback address. Requires `jwksUrl` to be set explicitly. |
581
+
| `insecureAllowHTTP` | No | Permit plain-HTTP OIDC discovery and JWKS fetches for this issuer. Development and testing only. |
582
+
583
+
`allowedDelegateClients`is what binds an external actor to a specific ToolHive
584
+
delegate client. Without it, every confidential client holding the
585
+
token-exchange grant would be equivalent for delegation purposes. Setting
586
+
`allowedDelegateClients: ["*"]` explicitly declares that permissiveness; the
587
+
wildcard cannot be combined with specific client IDs, and cannot be combined
588
+
with `allowMayAct: true`.
589
+
590
+
The delegated token's `sub` is qualified as `<issuerUrl>#<externalSub>` so that
591
+
subjects from different issuers cannot collide. The `act` claim records
592
+
provenance: the outer hop carries ToolHive's issuer and the authenticated client
593
+
ID, and the nested hop carries the external issuer and the allowed actor (when
594
+
one matched).
595
+
539
596
### Enable baseline scopes for DCR clients
540
597
541
598
Some MCP clients (for example, Claude Code) register via DCR with a narrowed
0 commit comments