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
MCP clients **MUST** support both discovery mechanisms to obtain the information required to interact with the authorization server.
69
72
70
73
### Authorization Server Discovery
71
74
@@ -93,8 +96,20 @@ MCP clients **MUST** be able to parse `WWW-Authenticate` headers and respond app
93
96
94
97
#### Server Metadata Discovery
95
98
96
-
MCP clients **MUST** follow the OAuth 2.0 Authorization Server Metadata [RFC8414](https://datatracker.ietf.org/doc/html/rfc8414)
97
-
specification to obtain the information required to interact with the authorization server.
99
+
To handle different issuer URL formats and ensure interoperability with both OAuth 2.0 Authorization Server Metadata and OpenID Connect Discovery 1.0 specifications, MCP clients **MUST** attempt multiple well-known endpoints when discovering authorization server metadata.
100
+
101
+
The discovery approach is based on [RFC8414 Section 3.1 "Authorization Server Metadata Request"](https://datatracker.ietf.org/doc/html/rfc8414#section-3.1) for OAuth 2.0 Authorization Server Metadata discovery and [RFC8414 Section 5 "Compatibility Notes"](https://datatracker.ietf.org/doc/html/rfc8414#section-5) for OpenID Connect Discovery 1.0 interoperability.
102
+
103
+
For issuer URLs with path components (e.g., `https://auth.example.com/tenant1`), clients **MUST** try endpoints in the following priority order:
104
+
105
+
1. OAuth 2.0 Authorization Server Metadata with path insertion: `https://auth.example.com/.well-known/oauth-authorization-server/tenant1`
106
+
2. OpenID Connect Discovery 1.0 with path insertion: `https://auth.example.com/.well-known/openid-configuration/tenant1`
M-->>C: Resource metadata with authorization server URL
115
130
Note over C: Validate RS metadata,<br />build AS metadata URL
116
131
117
-
C->>A: GET /.well-known/oauth-authorization-server
132
+
C->>A: GET Authorization server metadata endpoint
133
+
Note over C,A: Try OAuth 2.0 and OpenID Connect<br/>discovery endpoints in priority order
118
134
A-->>C: Authorization server metadata
119
135
120
136
Note over C,A: OAuth 2.1 authorization flow happens here
@@ -170,8 +186,9 @@ sequenceDiagram
170
186
171
187
Note over C: Parse metadata and extract authorization server(s)<br/>Client determines AS to use
172
188
173
-
C->>A: GET /.well-known/oauth-authorization-server
174
-
A->>C: Authorization server metadata response
189
+
C->>A: GET Authorization server metadata endpoint
190
+
Note over C,A: Try OAuth 2.0 and OpenID Connect<br/>discovery endpoints in priority order
191
+
A-->>C: Authorization server metadata
175
192
176
193
alt Dynamic client registration
177
194
C->>A: POST /register
@@ -326,9 +343,19 @@ Specifically:
326
343
An attacker who has gained access to an authorization code contained in an authorization response can try to redeem the authorization code for an access token or otherwise make use of the authorization code.
327
344
(Further described in [OAuth 2.1 Section 7.5](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-13#section-7.5))
328
345
329
-
To mitigate this, MCP clients **MUST** implement PKCE according to [OAuth 2.1 Section 7.5.2](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-13#section-7.5.2).
346
+
To mitigate this, MCP clients **MUST** implement PKCE according to [OAuth 2.1 Section 7.5.2](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-13#section-7.5.2) and **MUST** verify PKCE support before proceeding with authorization.
330
347
PKCE helps prevent authorization code interception and injection attacks by requiring clients to create a secret verifier-challenge pair, ensuring that only the original requestor can exchange an authorization code for tokens.
331
348
349
+
MCP clients **MUST** use the `S256` code challenge method when technically capable, as required by [OAuth 2.1 Section 4.1.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-13#section-4.1.1).
350
+
351
+
Since OAuth 2.1 and PKCE specifications do not define a mechanism for clients to discover PKCE support, MCP clients **MUST** rely on authorization server metadata to verify this capability:
352
+
353
+
-**OAuth 2.0 Authorization Server Metadata**: If `code_challenge_methods_supported` is absent, the authorization server does not support PKCE and MCP clients **MUST** refuse to proceed.
354
+
355
+
-**OpenID Connect Discovery 1.0**: While the [OpenID Provider Metadata](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata) does not define `code_challenge_methods_supported`, this field is commonly included by OpenID providers. MCP clients **MUST** verify the presence of `code_challenge_methods_supported` in the provider metadata response. If the field is absent, MCP clients **MUST** refuse to proceed.
356
+
357
+
Authorization servers providing OpenID Connect Discovery 1.0 **MUST** include `code_challenge_methods_supported` in their metadata to ensure MCP compatibility.
358
+
332
359
### Open Redirection
333
360
334
361
An attacker may craft malicious redirect URIs to direct users to phishing sites.
Copy file name to clipboardExpand all lines: docs/specification/draft/changelog.mdx
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,8 @@ the previous revision, [2025-06-18](/specification/2025-06-18).
9
9
10
10
## Major changes
11
11
12
+
1. Enhance authorization server discovery with support for [OpenID Connect Discovery 1.0](https://openid.net/specs/openid-connect-discovery-1_0.html). (PR [#797](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/797))
0 commit comments