Skip to content

SEP-2468: Recommend Issuer (iss) Claim in MCP Auth Responses#2468

Open
EmLauber wants to merge 1 commit intomodelcontextprotocol:mainfrom
EmLauber:sep-issuer-claim-auth
Open

SEP-2468: Recommend Issuer (iss) Claim in MCP Auth Responses#2468
EmLauber wants to merge 1 commit intomodelcontextprotocol:mainfrom
EmLauber:sep-issuer-claim-auth

Conversation

@EmLauber
Copy link
Copy Markdown

Proposes requiring the inclusion and validation of an explicit issuer (iss) claim in MCP authorization responses to mitigate authorization mix-up attacks in multi-IdP environments.

Motivation and Context

  • Problem: MCP operates in multi-IdP environments where mix-up attacks are possible
  • Solution: Require issuer claim validation in clients to bind responses to correct auth server
  • Follows: RFC 9207 specifications for OAuth security

How Has This Been Tested?

Tested in OAuth scenarios. Will need additional testing specific to MCP environments before accepting and merging.

Breaking Changes

It is additive fro security. Clients will need to update code to validate the issuer parameter.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • [ x] New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • [x ] Documentation update

Checklist

  • [ x] I have read the MCP Documentation
  • [ x] My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

Some auth servers already use the issuer claim and can reference those examples once more details are added.

Proposes requiring the inclusion and validation of an explicit
issuer (iss) claim in MCP authorization responses to mitigate
authorization mix-up attacks in multi-IdP environments.
@localden localden changed the title Add SEP: Recommend Issuer (iss) Claim in MCP Auth Responses SEP-2468: Recommend Issuer (iss) Claim in MCP Auth Responses Mar 25, 2026
@localden localden added auth security proposal SEP proposal without a sponsor. SEP labels Mar 25, 2026

## Abstract

This SEP proposes requiring the inclusion and validation of an explicit issuer (iss) claim in Model Context Protocol (MCP) authorization responses to mitigate authorization mix‑up attacks. By binding authorization responses to a specific authorization server identity, MCP clients can reliably detect and reject responses originating from an unexpected issuer, improving protocol robustness in multi‑identity provider (IdP) environments. This SEP follows the specifications defined in [RFC9207](https://datatracker.ietf.org/doc/rfc9207/)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verbiage nit - 9207 uses parameter instead of claim throughout, since iss is returned as a query parameter (and not as a JWT claim).


The Model Context Protocol increasingly operates in environments where multiple authorization servers, identity providers, and intermediaries coexist. In such environments, OAuth 2.0 mix‑up attacks become a realistic threat. Mix-up attacks are when an attacker causes a client to associate an authorization response with the wrong authorization server, potentially leading to token leakage or privilege escalation.

OAuth specifications describes two mitigations for mix‑up attacks: requiring issuer (*iss*) claim or using a unique redirect_uri for each client. A unique redirect_uri is not viable in an MCP environment where dynamic registration is possible. As such, the recommendation is for MCP environments to leverage the issuer mitigation.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
OAuth specifications describes two mitigations for mix‑up attacks: requiring issuer (*iss*) claim or using a unique redirect_uri for each client. A unique redirect_uri is not viable in an MCP environment where dynamic registration is possible. As such, the recommendation is for MCP environments to leverage the issuer mitigation.
OAuth specifications describes two mitigations for mix‑up attacks: requiring issuer (*iss*) claim or using a unique redirect_uri for each issuer a client interacts with. A unique redirect_uri is not viable in an MCP environment where dynamic registration is possible. As such, the recommendation is for MCP environments to leverage the issuer mitigation.

## Specification

###Issuer Claim Requirement
MCP authorization servers SHOULD include an issuer (*iss*) claim in authorization responses that result in the issuance of access tokens or authorization codes.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

9207 also defines the iss param in error responses. Should we do the same to be consistent with the spec?

Suggested change
MCP authorization servers SHOULD include an issuer (*iss*) claim in authorization responses that result in the issuance of access tokens or authorization codes.
MCP authorization servers SHOULD include an issuer (*iss*) claim in authorization responses to the client, including error responses.

The *iss* claim MUST:
- Exactly match the issuer identifier advertised via discovery or configuration
- Its value MUST be a URL that uses the "https" scheme without any query or fragment components.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WDYT about including the corresponding Authorization Server Metadata update that signals to clients that iss is supported / expected -

Suggested change
###Issuer Metadata Requirement
MCP authorization servers that support the `iss` parameter in authorization responses MUST advertise their support by returning `"authorization_response_iss_parameter_supported": true` in their authorization server metadata response as specified in [RFC9207](https://datatracker.ietf.org/doc/html/rfc9207#name-authorization-server-metada).

(Corresponding language needs to be added to the client validation requirement to check this parameter too)

@0xbrainkid

This comment was marked as spam.

@aaronpk
Copy link
Copy Markdown
Contributor

aaronpk commented Mar 30, 2026

I don't think we should bring in any new dependencies in this PR other than the iss defined in RFC9207, especially not something defined in a not-yet-adopted individual draft.

@0xbrainkid

This comment was marked as spam.

@agent-morrow

This comment was marked as spam.

Copy link
Copy Markdown
Contributor

@SamMorrowDrums SamMorrowDrums left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like a great addition. Added a couple of nits but should also add a link to the best practices documentation: https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices

Specifically the confused deputy section. Then you can also update the guidance based on this being merged.

- Exactly match the issuer identifier advertised via discovery or configuration
- Its value MUST be a URL that uses the "https" scheme without any query or fragment components.

###Client Validation Requirements
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
###Client Validation Requirements
### Client Validation Requirements

Nit titles need spaces


## Specification

###Issuer Claim Requirement
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
###Issuer Claim Requirement
### Issuer Claim Requirement

Nit titles need spaces


###Client Validation Requirements
MCP clients MUST validate the *iss* claim in authorization responses by:
- Determining the expected issuer for the authorization request
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i might tweak this to be more clear that the client needs to keep track of the issuer parameter before redirect (regardleess of metadata indicaitng support). As in if you get back iss i think you want to be able to validate it, and if you haven't stored it, you're out of luck

max-stytch added a commit to max-stytch/conformance that referenced this pull request Apr 9, 2026
Adds 5 draft conformance scenarios testing RFC 9207 issuer parameter
validation in OAuth authorization responses:

- auth/iss-supported: server advertises support and sends correct iss
- auth/iss-not-advertised: server omits iss parameter entirely
- auth/iss-supported-missing: client must reject missing iss when required
- auth/iss-wrong-issuer: client must reject mismatched iss value
- auth/iss-unexpected: client must reject iss when not advertised

Also adds auth-test-iss-validation.ts, a reference client that correctly
validates iss per RFC 9207, and negative tests confirming the standard
client fails all three rejection scenarios.

TODO: Update RFC_9207_ISS_PARAMETER spec reference once SEP-2468
(modelcontextprotocol/modelcontextprotocol#2468) is merged.
@pcarleton pcarleton self-assigned this Apr 13, 2026
@sep-automation-bot sep-automation-bot bot removed the proposal SEP proposal without a sponsor. label Apr 13, 2026
@sep-automation-bot
Copy link
Copy Markdown

State Transition: proposal → draft

This SEP has been transitioned from proposal to draft.

@pcarleton has been assigned as the sponsor for this SEP.


This is an automated message from the SEP lifecycle bot.

@sep-automation-bot sep-automation-bot bot added the draft SEP proposal with a sponsor. label Apr 13, 2026
@pcarleton pcarleton added this to the 2026-06-30-RC milestone Apr 13, 2026
@dsp-ant dsp-ant added the roadmap/security Roadmap (horizon): Security & Authorization label Apr 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auth draft SEP proposal with a sponsor. roadmap/security Roadmap (horizon): Security & Authorization security SEP

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

Make RFC 9207 issuer validation (OAuth mixup attack prevention) mandatory

9 participants