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
* Use issuer_url for OAuth issuer identity, not base_url
* Apply ruff format to issuer identity tests
* Align ID-JAG audience docstring with issuer_url
* Make InMemoryOAuthProvider keyword-only like its parent
* Keep ID-JAG audience on base_url, out of scope for issuer identity
* Remove stray scratch script
* Make AuthorizationHandler keyword-only
* Bind ID-JAG audience to the issuer identifier
* Fix double slash in issuer_url well-known log hint
Copy file name to clipboardExpand all lines: docs/deployment/http.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -544,7 +544,7 @@ base_url="http://localhost:8000/api" # Includes mount prefix
544
544
mcp_path="/mcp"# Internal MCP path, NOT the mount prefix
545
545
```
546
546
547
-
**`issuer_url`** (optional) controls the authorization server identity for OAuth discovery. Defaults to `base_url`.
547
+
**`issuer_url`** (optional) controls the authorization server identity for OAuth discovery. Defaults to `base_url`. It sets the `issuer` advertised in the authorization server metadata and the `iss` on issued tokens, while the endpoints in that metadata continue to point at `base_url`.
548
548
549
549
```python
550
550
# Usually not needed - just set base_url and it works
Issuer URL for OAuth authorization server metadata (defaults to `base_url`).
137
137
138
+
`issuer_url` is the server's OAuth identity: it is the `issuer` field of the authorization server metadata, the `iss` claim of the tokens the proxy mints, and the RFC 9207 `iss` parameter on authorization responses. `base_url` remains the location of the endpoints, so `authorization_endpoint`, `token_endpoint`, and the rest of the metadata still point at `base_url` where the routes are actually mounted.
139
+
138
140
When `issuer_url` has a path component (either explicitly or by defaulting from `base_url`), FastMCP creates path-aware discovery routes per RFC 8414. For example, if `base_url` is `http://localhost:8000/api`, the authorization server metadata will be at `/.well-known/oauth-authorization-server/api`.
139
141
140
142
**Default behavior (recommended for most cases):**
@@ -718,7 +720,7 @@ For each ID-JAG presented at the token endpoint, the proxy checks that:
718
720
- the JOSE header `typ` is `oauth-id-jag+jwt`;
719
721
- the `iss` claim is one of the configured `trusted_issuers`;
720
722
- the signature verifies against the issuer's published keys;
721
-
- the `aud` claim identifies this authorization server;
723
+
- the `aud` claim identifies this authorization server — configure your identity provider to mint assertions whose `aud` is the `issuer` value published at `/.well-known/oauth-authorization-server`, which is your `issuer_url` when you set one and your `base_url` otherwise;
722
724
- the signed `client_id` claim matches the client presenting the assertion — an assertion the IdP minted for one client cannot be redeemed by another;
723
725
- the signed `resource` claim names this server — an assertion minted for a different MCP server behind the same IdP is rejected;
724
726
-`exp` (and `iat`/`nbf`, when present) place the assertion within a short lifetime and its validity window; and
0 commit comments