Skip to content

Commit ed77850

Browse files
Correct CIMD auth-method rules; polish CA-trust section
- The upstream fetcher rejects symmetric shared-secret token_endpoint_auth_method values outright; only asymmetric methods (for example, private_key_jwt) can be negotiated down to none via the token_endpoint_auth_methods_supported list. Rewrite the rule and the two troubleshooting entries to match. - Use the already-introduced DCR acronym in the new CA-trust section and change "independent from" to "independent of". Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 9cb4925 commit ed77850

2 files changed

Lines changed: 24 additions & 21 deletions

File tree

docs/toolhive/guides-k8s/embedded-auth-server-k8s.mdx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -439,11 +439,13 @@ The embedded AS enforces the following rules on fetched CIMD documents:
439439
- The `client_id` field inside the document must exactly match the URL it was
440440
fetched from.
441441
- `redirect_uris` must be present and pass strict validation.
442-
- `token_endpoint_auth_method` must be `none`, omitted, or (per OpenID Connect
443-
RP Metadata Choices 1.0) accompanied by a
444-
`token_endpoint_auth_methods_supported` list that includes `none`. Documents
445-
that declare a symmetric shared-secret method without also publishing a
446-
supported-methods list containing `none` are rejected.
442+
- `token_endpoint_auth_method` must be `none` or omitted. When it names any
443+
other value (for example, `private_key_jwt`), the document must also publish a
444+
`token_endpoint_auth_methods_supported` list containing `none` (per OpenID
445+
Connect RP Metadata Choices 1.0), and the server negotiates down to `none`.
446+
Symmetric shared-secret methods (`client_secret_post`, `client_secret_basic`,
447+
`client_secret_jwt`) are always rejected, even alongside a supported-methods
448+
list.
447449
- `grant_types` must include `authorization_code`. Unsupported entries in
448450
`grant_types` and `response_types` are filtered out rather than rejected; the
449451
document is only rejected when the filtered intersection lacks the
@@ -666,10 +668,10 @@ For OAuth 2.0 servers that return identity in the token response itself, see
666668
If the upstream identity provider serves its endpoints with a certificate signed
667669
by an internal CA (for example, an in-cluster Keycloak or a corporate ADFS
668670
behind private PKI), the embedded authorization server can't complete discovery,
669-
token, user-info, or Dynamic Client Registration requests to it until it trusts
670-
that CA. Set `caBundleRef` on the upstream's `oidcConfig` or `oauth2Config` to
671-
point at a ConfigMap containing the PEM-encoded CA bundle. The operator projects
672-
it read-only into the proxy pod and the auth server adds it to the system trust
671+
token, user-info, or DCR requests to it until it trusts that CA. Set
672+
`caBundleRef` on the upstream's `oidcConfig` or `oauth2Config` to point at a
673+
ConfigMap containing the PEM-encoded CA bundle. The operator projects it
674+
read-only into the proxy pod and the auth server adds it to the system trust
673675
roots for connections to this upstream only. The bundle augments the system
674676
roots; it doesn't restrict trust to this CA or disable public roots.
675677

@@ -711,7 +713,7 @@ restart. When the bundle content is invalid PEM, the operator surfaces a
711713
terminal condition on the `MCPExternalAuthConfig` rather than retrying
712714
reconciliation.
713715

714-
`caBundleRef` on the upstream provider is independent from `caBundleRef` on the
716+
`caBundleRef` on the upstream provider is independent of `caBundleRef` on the
715717
`MCPOIDCConfig` that validates incoming JWTs (see
716718
[Use a custom CA certificate for the OIDC issuer](./auth-k8s.mdx#use-a-custom-ca-certificate-for-the-oidc-issuer)):
717719
the two references configure trust for different network hops.
@@ -1135,11 +1137,12 @@ consumer's mirrored condition clears on the next reconcile.
11351137

11361138
- The `client_id` field inside the fetched document must exactly match the URL
11371139
used to fetch it.
1138-
- `token_endpoint_auth_method` must be `none`, omitted, or paired with a
1139-
`token_endpoint_auth_methods_supported` list that contains `none`. A document
1140-
that declares a symmetric shared-secret method (`client_secret_post`,
1141-
`client_secret_basic`, `client_secret_jwt`) without a supported-methods list
1142-
containing `none` is rejected with `invalid_client`.
1140+
- `token_endpoint_auth_method` must be `none` or omitted. When it names any
1141+
other value (for example, `private_key_jwt`), the document must also publish a
1142+
`token_endpoint_auth_methods_supported` list containing `none` so the server
1143+
can negotiate down to `none`. Symmetric shared-secret methods
1144+
(`client_secret_post`, `client_secret_basic`, `client_secret_jwt`) are always
1145+
rejected with `invalid_client`.
11431146
- After unsupported entries are filtered out, `grant_types` must still include
11441147
`authorization_code` and `response_types` must still include `code`.
11451148
- `redirect_uris` must be present and valid.

docs/toolhive/guides-vmcp/embedded-auth-server-vmcp.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -991,12 +991,12 @@ supports CIMD but still uses DCR:
991991

992992
- The `client_id` field in the fetched document must exactly match the URL used
993993
to fetch it.
994-
- `token_endpoint_auth_method` must be `none`, omitted, or paired with a
995-
`token_endpoint_auth_methods_supported` list containing `none`. Documents that
996-
declare only a symmetric shared-secret method (`client_secret_post`,
997-
`client_secret_basic`, `client_secret_jwt`) are rejected; documents that also
998-
publish a supported-methods list containing `none` are accepted and negotiated
999-
down to `none`.
994+
- `token_endpoint_auth_method` must be `none` or omitted. When it names any
995+
other value (for example, `private_key_jwt`), the document must also publish a
996+
`token_endpoint_auth_methods_supported` list containing `none` so the server
997+
can negotiate down to `none`. Symmetric shared-secret methods
998+
(`client_secret_post`, `client_secret_basic`, `client_secret_jwt`) are always
999+
rejected.
10001000
- After unsupported entries are filtered, `grant_types` must include
10011001
`authorization_code` and `response_types` must include `code`.
10021002
- `redirect_uris` must be present and valid.

0 commit comments

Comments
 (0)