fix(auth-router): correct Protected Resource Metadata for pathful RS and add explicit resourceServerUrl (RFC 9728) #858
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.
Fixes #600
issuer) and the protected resource (resource) in the OAuth 2.0 Protected Resource Metadata (PRM).resourceserver (RS) has a path (e.g.,http://host:port/mcp), PRM is now also served at/.well-known/oauth-protected-resource/<path>as required by RFC 9728.resourceServerUrlinAuthRouterOptionswith fallback:resourceServerUrl ?? baseUrl ?? issuer(keeps backward compatibility for AS=RS deployments).Motivation and Context
issuervalue in theresourcefield and ignore the RS path.https://example.com/mcpclients expect PRM athttps://example.com/.well-known/oauth-protected-resource/mcp, but received the base well-known without the path and with an incorrectresource.https://auth.example.com, RS onhttps://example.com/mcp).How Has This Been Tested?
Local app with split roles:
Checks:
OAuth authorization flow completed successfully; the “resource doesn't match expected” error disappeared.
Breaking Changes
None.
resourceServerUrlis optional.Types of changes
Checklist
Additional context
/.well-known/oauth-protected-resourcebefore the RS path; theresourcevalue MUST exactly equal the RS identifier.getOAuthProtectedResourceMetadataUrl()is updated accordingly to construct the path-specific well-known URL.