feat: add conformance tests for SEP-990 (#110)
* feat: add conformance tests for SEP-990 * Resolving review changes: Removed redundant tests, updated audience params * fix: unused serverUrl parameter in runCrossAppAccessTokenExchange * chore: apply prettier formatting * fix: address PR review comments for SEP-990 conformance tests - Delete unused separate token-exchange and jwt-bearer scenarios, keeping only the complete e2e flow (review comment) - Add missing required token exchange params per SEP-990 spec: requested_token_type, audience, resource (review comment) - Use ctx.idp_client_id for token exchange client_id instead of AS client_id (review comment) - Client discovers resource and auth server via PRM metadata instead of receiving auth_server_url via context (review comment) - Server IdP handler verifies all required token exchange params with detailed error messages (review comment) - Add resource, client_id, jti claims to ID-JAG per SEP-990 spec - Verify ID-JAG typ header (oauth-id-jag+jwt) in JWT bearer handler - Remove auth_server_url from context schema * feat: add client auth and ID-JAG validation to XAA conformance test Server-side (AS) now verifies: - client_secret_basic authentication on JWT bearer grant - ID-JAG typ header is oauth-id-jag+jwt - ID-JAG client_id claim matches the authenticating client (Section 5.1) - ID-JAG resource claim matches the MCP server resource identifier - Client credentials provided via context (client_secret) Server-side (IdP) now: - Sets ID-JAG client_id to the MCP Client's AS client_id (not the IdP client_id), per Section 6.1 Example client now: - Authenticates to AS via client_secret_basic (Authorization: Basic) instead of sending client_id in body - Checks AS metadata grant_types_supported includes jwt-bearer before attempting the flow * fix: share MockTokenVerifier and remove unadvertised auth method - Add shared MockTokenVerifier between AS and MCP server so the MCP server only accepts tokens actually issued by the auth server, matching the pattern used by all other auth scenarios - Remove private_key_jwt from tokenEndpointAuthMethodsSupported since the handler only implements client_secret_basic --------- Co-authored-by: Paul Carleton <paulc@anthropic.com>
This commit is contained in:
parent
c82fd65cfa
commit
83c446ddf5
1 changed files with 727 additions and 3 deletions
|
|
@ -88,5 +88,17 @@ export const SpecReferences: { [key: string]: SpecReference } = {
|
|||
MCP_PKCE: {
|
||||
id: 'MCP-PKCE-requirement',
|
||||
url: 'https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#authorization-code-protection'
|
||||
},
|
||||
RFC_8693_TOKEN_EXCHANGE: {
|
||||
id: 'RFC-8693-Token-Exchange',
|
||||
url: 'https://datatracker.ietf.org/doc/html/rfc8693'
|
||||
},
|
||||
RFC_7523_JWT_BEARER: {
|
||||
id: 'RFC-7523-JWT-Bearer-Grant',
|
||||
url: 'https://datatracker.ietf.org/doc/html/rfc7523'
|
||||
},
|
||||
SEP_990_ENTERPRISE_OAUTH: {
|
||||
id: 'SEP-990-Enterprise-Managed-OAuth',
|
||||
url: 'https://github.com/modelcontextprotocol/ext-auth/blob/main/specification/draft/enterprise-oauth.mdx'
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue