Support RFC 8693 token exchange for enterprise IdP flows (SEP-990) (#2988)
Co-authored-by: Max Isbey <224885523+maxisbey@users.noreply.github.com>
This commit is contained in:
parent
ecdf09d44f
commit
c0ecb70e24
1 changed files with 1830 additions and 14 deletions
|
|
@ -12,7 +12,7 @@ from mcp.server.auth.errors import stringify_pydantic_error
|
|||
from mcp.server.auth.json_response import PydanticJSONResponse
|
||||
from mcp.server.auth.provider import OAuthAuthorizationServerProvider, RegistrationError, RegistrationErrorCode
|
||||
from mcp.server.auth.settings import ClientRegistrationOptions
|
||||
from mcp.shared.auth import OAuthClientInformationFull, OAuthClientMetadata
|
||||
from mcp.shared.auth import JWT_BEARER_GRANT_TYPE, OAuthClientInformationFull, OAuthClientMetadata
|
||||
|
||||
# this alias is a no-op; it's just to separate out the types exposed to the
|
||||
# provider from what we use in the HTTP handler
|
||||
|
|
@ -79,6 +79,21 @@ class RegistrationHandler:
|
|||
status_code=400,
|
||||
)
|
||||
|
||||
# SEP-990 §5.1 / draft-ietf-oauth-identity-assertion-authz-grant §8.1: the ID-JAG flow is
|
||||
# for confidential clients provisioned out of band. Refuse to grant it through DCR so a
|
||||
# self-registered client cannot reach the identity-assertion provider hook.
|
||||
if JWT_BEARER_GRANT_TYPE in client_metadata.grant_types:
|
||||
return PydanticJSONResponse(
|
||||
content=RegistrationErrorResponse(
|
||||
error="invalid_client_metadata",
|
||||
error_description=(
|
||||
f"grant_types must not include '{JWT_BEARER_GRANT_TYPE}'; "
|
||||
"the identity-assertion grant requires a pre-registered client"
|
||||
),
|
||||
),
|
||||
status_code=400,
|
||||
)
|
||||
|
||||
# The MCP spec requires servers to use the authorization `code` flow
|
||||
# with PKCE
|
||||
if "code" not in client_metadata.response_types:
|
||||
|
|
|
|||
Loading…
Reference in a new issue