fix: strip trailing slashes from OAuth metadata URL fields #1938
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Pydantic's
AnyHttpUrlautomatically appends a trailing slash to bare hostnames (e.g.,http://localhost:8000becomeshttp://localhost:8000/). This causes OAuth metadata discovery to fail in clients that validate per RFC 8414 §3.3 and RFC 9728 §3, which require the returnedissuer/resourceURL to be identical to the URL used for discovery.This broke interop with Google ADK and IBM's MCP Context Forge, which correctly perform this identity check.
Changes
Add
field_serializerto strip trailing slashes during JSON serialization for:OAuthMetadata.issuer(RFC 8414 §3.3)ProtectedResourceMetadata.resource(RFC 9728 §3)ProtectedResourceMetadata.authorization_servers(RFC 9728 §3)The fix is at the serialization layer so the internal
AnyHttpUrlrepresentation is unchanged, but the JSON responses no longer include spurious trailing slashes.Fixes #1919
Fixes #1265