docs: add section about software_statement to Authorization page#883
docs: add section about software_statement to Authorization page#883knguyen-figma wants to merge 6 commits into
Conversation
localden
left a comment
There was a problem hiding this comment.
Support the idea of adding software statements. Suggesting trimming the content a bit to make sure we're not replicating the DCR RFC.
3cb20e7 to
e064b84
Compare
|
This needs a way to prevent the software statement from being replayed at another AS. The software statement needs to include a claim with the authorization server issuer. Without this, a client will be generating the same looking software statement and sending it to different AS's, so a malicious AS could replay it at a legitimate AS. |
|
Good approach. BTW, Jans Auth Server can mint SSA's and key rotation for the SSA signing key has a less frequent rotation period versus other OAuth JWTs: See docs: https://docs.jans.io/stable/janssen-server/auth-server/endpoints/ssa/ |
|
I am closing this since there was little to no action in months. If you think this is still valuable, please open a SEP or a PR, depending on the change. See https://modelcontextprotocol.io/community/sep-guidelines |
Motivation and Context
Problem
The current MCP Dynamic Client Registration (DCR) flow lacks a way to verify the authenticity of client software attempting to register. This creates several challenges for authorization servers:
Proposal
Recommend that MCP clients send
software_statementandjwks_urifields in DCR requests, as defined in RFC 7591. This enables:jwks_urisor have some self-service mechanism for clients (outside the scope of the MCP spec)sequenceDiagram participant C as MCP Client participant CB as Software Vendor Server participant A as Authorization Server Note over C,CB: Software Statement Preparation C->>CB: Request software_statement JWT Note over CB: Generate JWT with claims:<br/>- client metadata<br/>- software ID<br/>- software version<br/>- expiration CB-->>C: Signed software_statement JWT Note over C,A: Dynamic Registration C->>A: POST /register<br/>software_statement + jwks_uri A->>CB: GET /mcp/jwks.json CB-->>A: JWKS document Note over A: 1. Validate software_statement<br/>2. Verify JWT signature using JWKS<br/>3. Check issuer trust<br/>4. Validate claims & expiry A-->>C: Client credentialsHow Has This Been Tested?
Here's a simple MCP server (no tools, just auth) that supports
software_statementandjwks_uri: https://github.com/knguyen-figma/mcp-auth-server-software-statementI tested it by updating
@modelcontextprotocol/inspectorto sign the JWT with a private key via a protected endpoint in the proxy server and to host the JWKS. knguyen-figma/inspector@f12f5c0Breaking Changes
No breaking changes. While the change is recommending that MCP clients send
software_statementandjwks_uriduring DCR, it is not required.Types of changes
Checklist
Additional context