Skip to content

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

Merged
mcp-commander[bot] merged 24 commits into
modelcontextprotocol:mainfrom
EmLauber:sep-issuer-claim-auth
May 17, 2026
Merged

SEP-2468: Recommend Issuer (iss) Parameter in MCP Auth Responses#2468
mcp-commander[bot] merged 24 commits into
modelcontextprotocol:mainfrom
EmLauber:sep-issuer-claim-auth

Conversation

@EmLauber
Copy link
Copy Markdown
Contributor

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
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/0000-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/0000-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/2468-recommend-issuer-claim-for-auth.md
@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.

Comment thread seps/0000-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/0000-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/2468-recommend-issuer-claim-for-auth.md
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
Apply prettier, fix heading syntax, remove template note, and set
SEP number, sponsor, and PR link.
@localden localden added in-review SEP proposal ready for review. and removed draft SEP proposal with a sponsor. labels Apr 22, 2026
@localden localden moved this to In Review in SEP Review Pipeline Apr 22, 2026
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
| ------------------------------------------------ | ----------------- | ------------------------------------------------------------------------------------------ |
| `true` | present | Compare to the recorded issuer using simple string comparison ([RFC3986 Section 6.2.1][1]) |
| `true` | absent | Reject the response |
| `false` or absent | present | Compare to the recorded issuer using simple string comparison ([RFC3986 Section 6.2.1][1]) |
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This isn't the behavior recommended in 9207

Clients SHOULD discard authorization responses with the iss parameter from authorization servers that do not indicate their support for the parameter.

Do we have a strong reason for deviating from the SHOULD?

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 see it as filling in the noted "out of scope guidance" listed below that sentence:

Clients SHOULD discard authorization responses with the iss parameter from authorization servers that do not indicate their support for the parameter. However, there might be legitimate authorization servers that provide the iss parameter without indicating their support in their metadata. Local policy or configuration can determine whether to accept such responses, and specific guidance is out of scope for this specification.

In the experience working with folks AS metadata via PRM and OASM, changing those files can be finicky and slow where I think adding the iss parameter can be faster. I only see this "failing closed", i.e. causing more servers to be rejected than otherwise, so this seems to be only a tightening and means we can get the protection in more places more quickly by only requiring 1 change (the parameter) rather than 2 (parameter + metadata).

I haven't dug deeply into the history of that SHOULD though, so it's worth us seeing if we can find the reasoning there.

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.

dug into this and I'm now confident the deviation is net positive, but you're right we should be explicit about it. I've updated the PR and SEP to call it out:

  • The truth table now has a note that the third row is invoking the local-policy provision §2.4 explicitly leaves open ("specific guidance is out of scope")
  • The SEP's "alternatives considered" section now documents why we're not following the SHOULD literally

The short version of the digging: the SHOULD-discard sentence was a late, lightly-debated addition to RFC 9207. it doesn't appear in the original individual draft (which left this to local policy explicitly) and shows up in WG -01 as an unattributed "incorporated WG feedback" change. The one thing the security argument genuinely depends on is that the recorded issuer always comes from a trusted source, which we get for free since RFC 9728 PRM + RFC 8414 metadata validation is already required upstream in the spec.

Other notes:

  • FAPI 2.0 (final, Feb 2025) drops the metadata-conditional logic entirely and makes iss validation an unconditional shall on both sides — same posture we're taking
  • panva's oauth4webapi / openid-client (the library NextAuth and much of the JS ecosystem use) already implements this rule (i.e. process parameter regardless of metadata presence). This came up with Github's iss rollout: https://github.com/orgs/community/discussions/192143 -- specifically some configs of that library didn't fetch metadata and required issuer to be passed in to validate, which caused problems. That's the same issue noted in the backcompat section of the SEP (i.e. if you upgrade, but don't plumb issuer through from your metadata, you'll have an issue)

…2.4 carve-out

- Adds the §3.3 issuer/well-known-URL match MUST to Authorization Server
  Metadata Discovery, with a normative rejection example. This is the
  trusted-baseline prerequisite that makes iss validation meaningful.
- Response Validation now references the validated metadata and notes the
  validation provides no protection without it.
- Replaces the row-3 leniency note with the actual justification: §2.4's
  explicit local-policy carve-out, the §3.3-validated baseline, and FAPI
  2.0 §5.3.3.2 which makes client validation an unconditional shall.
- Drops "2.0" from "OAuth mix-up attacks" in the SEP Motivation.
Spec note is now a single declarative sentence citing the §2.4
local-policy provision. The fuller reasoning (§3.3-validated baseline,
fail-closed property, metadata-lag accommodation) lives in the SEP's
Alternatives Considered where verbose justification is appropriate.
Copy link
Copy Markdown
Contributor

@localden localden left a comment

Choose a reason for hiding this comment

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

Love the effort on this - thank you for putting it together!

Comment thread docs/specification/draft/basic/authorization.mdx Outdated
Comment thread docs/specification/draft/basic/authorization.mdx Outdated
Comment thread docs/specification/draft/basic/authorization.mdx
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
Comment thread docs/specification/draft/basic/authorization.mdx Outdated
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
Comment thread seps/2468-recommend-issuer-claim-for-auth.md Outdated
@@ -0,0 +1,86 @@
# SEP-2468: Recommend Issuer (iss) Parameter in MCP Auth Responses
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.

nit (non-blocking): the file slug still says claim after the parameter rename and becomes the published docs URL. If we want it consistent, rename to 2468-recommend-issuer-parameter-for-auth.md and re-run npm run generate:seps. Existing SEP slugs are not curated, so also fine to leave as-is.

@pcarleton pcarleton changed the title SEP-2468: Recommend Issuer (iss) Claim in MCP Auth Responses SEP-2468: Recommend Issuer (iss) Parameter in MCP Auth Responses Apr 29, 2026
@pja-ant pja-ant moved this from In Review to Review Batch in SEP Review Pipeline Apr 29, 2026
pcarleton and others added 4 commits April 29, 2026 14:14
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Paul Carleton <paulcarletonjr@gmail.com>
Co-authored-by: Paul Carleton <paulcarletonjr@gmail.com>
…07 §2.3

Also normalizes CRLF→LF and trailing whitespace introduced by the
GitHub-UI suggestion commits; the semantic diff is line 496 only.
@pja-ant
Copy link
Copy Markdown
Contributor

pja-ant commented May 5, 2026

This SEP was reviewed by the Core Maintainers and the decision was to Accept.

@pja-ant pja-ant added accepted SEP accepted by core maintainers, but still requires final wording and reference implementation. and removed in-review SEP proposal ready for review. labels May 5, 2026
@sep-automation-bot
Copy link
Copy Markdown

Reference Implementation Reminder

Hi @EmLauber!

This SEP was accepted 40 days ago.

A reminder that accepted SEPs should have a reference implementation to move to final status.

  • Is there a reference implementation in progress?
  • Do you need help or guidance with the implementation?

Let us know the current status!


This is an automated message from the SEP lifecycle bot.

Regenerated docs/seps/index.mdx to resolve the conflict from new SEPs
landing on main.

:house: Remote-Dev: homespace
@localden
Copy link
Copy Markdown
Contributor

/lgtm

@mcp-commander mcp-commander Bot moved this from Review Batch to Accepted in SEP Review Pipeline May 17, 2026
mcp-commander[bot]
mcp-commander Bot previously approved these changes May 17, 2026
Copy link
Copy Markdown

@mcp-commander mcp-commander Bot left a comment

Choose a reason for hiding this comment

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

Approved on behalf of @localden via /lgtm.

@mcp-commander mcp-commander Bot enabled auto-merge (squash) May 17, 2026 08:29
@localden localden dismissed their stale review May 17, 2026 08:30

New review

The auto-merge left the SEP nav groups in the wrong order; render-seps
emits In-Review before Draft.

:house: Remote-Dev: homespace
@localden
Copy link
Copy Markdown
Contributor

/lgtm

Copy link
Copy Markdown

@mcp-commander mcp-commander Bot left a comment

Choose a reason for hiding this comment

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

Approved on behalf of @localden via /lgtm.

@mcp-commander mcp-commander Bot merged commit fcff9a4 into modelcontextprotocol:main May 17, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accepted SEP accepted by core maintainers, but still requires final wording and reference implementation. auth roadmap/security Roadmap (horizon): Security & Authorization security SEP

Projects

Status: Accepted

Development

Successfully merging this pull request may close these issues.

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