Skip to content

Align Enterprise-Managed Authorization with id-jag-04 and promote to stable#29

Open
pcarleton wants to merge 3 commits into
mainfrom
paulc/ema-idjag-cleanup
Open

Align Enterprise-Managed Authorization with id-jag-04 and promote to stable#29
pcarleton wants to merge 3 commits into
mainfrom
paulc/ema-idjag-cleanup

Conversation

@pcarleton

@pcarleton pcarleton commented Jun 17, 2026

Copy link
Copy Markdown
Member

Two changes to the Enterprise-Managed Authorization extension:

1. Reduce duplication against id-jag-04

References draft-ietf-oauth-identity-assertion-authz-grant-04 directly for roles, token exchange parameters, ID-JAG claims, and processing rules, keeping only MCP-specific constraints inline.

  • Adopt Resource Authorization Server / IdP Authorization Server terminology from id-jag §2
  • Replace parameter and claim tables with section references plus MCP-specific deltas
  • Keep resource REQUIRED in this profile (id-jag-04 made it optional)
  • Drop the restriction on actor_token (removed upstream in -03)
  • Replace multi-tenant implementation notes with a reference to id-jag §6
  • Reference id-jag §5 for cross-domain client_id handling
  • Add a Discovery section referencing authorization_grant_profiles_supported (id-jag §7.2)
  • Require the issued access token to be audience-restricted to the resource claim in the ID-JAG

2. Promote to specification/stable/

Moves the document from draft/ to a new stable/ directory to indicate it is ready for use and has reference implementations. README updated to list Stable and Draft extensions separately; in-document status banner updated to match.

Examples and the sequence diagram are unchanged.

Reduce duplication by referencing draft-ietf-oauth-identity-assertion-authz-grant-04
for roles, token exchange parameters, ID-JAG claims, and processing rules,
keeping only MCP-specific constraints inline.

- Adopt 'Resource Authorization Server' terminology from id-jag §2
- Replace parameter/claim tables with section references plus MCP deltas
- Keep `resource` REQUIRED in this profile (id-jag-04 made it optional)
- Drop the restriction on `actor_token` (removed upstream in -03)
- Replace multi-tenant implementation notes with reference to id-jag §6
- Reference id-jag §5 for cross-domain client_id handling
- Add Discovery section referencing `authorization_grant_profiles_supported`
Move the extension from specification/draft/ to specification/stable/ to
indicate it is ready for use and has reference implementations. Update the
README to list stable and draft extensions separately, and update the
in-document status banner to match.
@pcarleton pcarleton changed the title Align Enterprise-Managed Authorization with id-jag-04 Align Enterprise-Managed Authorization with id-jag-04 and promote to stable Jun 17, 2026
@pcarleton pcarleton marked this pull request as ready for review June 17, 2026 19:15
@pcarleton pcarleton requested a review from aaronpk June 17, 2026 19:15
In this profile:

- `audience` **MUST** be the issuer identifier of the Resource Authorization Server.
- `resource` is **REQUIRED** and **MUST** be the Resource Identifier of the MCP Server as defined in [RFC9728](https://datatracker.ietf.org/doc/html/rfc9728).

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
- `resource` is **REQUIRED** and **MUST** be the Resource Identifier of the MCP Server as defined in [RFC9728](https://datatracker.ietf.org/doc/html/rfc9728).
- `resource` is **OPTIONAL** and if set, **MUST** be the Resource Identifier of the MCP Server as defined in [RFC9728](https://datatracker.ietf.org/doc/html/rfc9728).

Feels like we should make this "optional" right now since that's how the implementations currently work.

&client_id=2ec954a1d60620116d36d9ceb7
&client_secret=a26d84873504215a34a86d52ef5cd64f4b76
```

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
If the client uses SAML for single sign-on to the IdP, see [Section 4.5](https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-04.html#section-4.5) for details on how the client can exchange the SAML assertion for a refresh token, then use the refresh token to request an ID-JAG.


The ID-JAG is a JWT issued and signed by the IdP with the claims defined in [Section 3.1 of draft-ietf-oauth-identity-assertion-authz-grant](https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-04.html#section-3.1).

In this profile, the `resource` claim is **REQUIRED** and **MUST** contain the Resource Identifier of the MCP Server.

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
In this profile, the `resource` claim is **REQUIRED** and **MUST** contain the Resource Identifier of the MCP Server.
In this profile, the `resource` claim **MUST** contain the Resource Identifier of the MCP Server if present.

{
"jti": "9e43f81b64a33f20116179",
"iss": "https://acme.idp.example",
"sub": "U019488227",

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
"sub": "U019488227",
"sub": "U019488227",
"email": "user@example.com",

Comment thread specification/stable/enterprise-managed-authorization.mdx Outdated
Comment thread specification/stable/enterprise-managed-authorization.mdx Outdated
Comment thread specification/stable/enterprise-managed-authorization.mdx Outdated
Co-authored-by: Aaron Parecki <aaron@parecki.com>

In most enterprise deployments, the IdP policy will only allow users to sign in to pre-registered clients. The MCP client will likely need to be pre-registered with the enterprise IdP for single sign-on.

It is also assumed that the MCP client will be pre-registered with the Resource Authorization Server.

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
It is also assumed that the MCP client will be pre-registered with the Resource Authorization Server.


### 7.2 Scope of Enterprise Visibility and Policy Enforcement

This specification enables the enterprise IdP to be part of the issuance of the access token at the MCP Server. The visibility the IdP has between the MCP Client and MCP Server is limited to the process of issuing the access token, but does not extend to the actual API calls between the MCP Client and Server.

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
This specification enables the enterprise IdP to be part of the issuance of the access token at the MCP Server. The visibility the IdP has between the MCP Client and MCP Server is limited to the process of issuing the access token, but does not extend to the actual API calls between the MCP Client and Server.
This specification enables the enterprise IdP to be part of the issuance of the access token at the MCP Server. The visibility the IdP has between the MCP Client and MCP Server is limited to the process of issuing the access token, but does not extend to the actual MCP traffic between the MCP Client and Server.


The Identity Assertion JWT Authorization Grant follows three steps:

1. Single Sign-On to the MCP Client via OpenID Connect or SAML

@aaronpk aaronpk Jun 18, 2026

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
1. Single Sign-On to the MCP Client via OpenID Connect or SAML
1. Single Sign-On to the MCP Client via OpenID Connect or SAML
1a. optionally exchange the SAML assertion for a Refresh Token

The core flow is as follows:

- A user logs in to an MCP Client through their enterprise Identity Provider, resulting in an Identity Assertion (ID Token or SAML assertion) being issued to the MCP Client.
- The MCP Client sends a Token Exchange [[RFC8693](https://datatracker.ietf.org/doc/html/rfc8693)] request to the Identity Provider including the identity assertion and identifier of the MCP Server it is attempting to access, and obtains a Identity Assertion JWT Authorization Grant (ID-JAG).

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
- The MCP Client sends a Token Exchange [[RFC8693](https://datatracker.ietf.org/doc/html/rfc8693)] request to the Identity Provider including the identity assertion and identifier of the MCP Server it is attempting to access, and obtains a Identity Assertion JWT Authorization Grant (ID-JAG).
- For SAML:
- The MCP Client sends a Token Exchange request to the Identity Provider with the SAML assertion, and obtains a Refresh Token.
- The MCP Client sends a Token Exchange [[RFC8693](https://datatracker.ietf.org/doc/html/rfc8693)] request to the Identity Provider including the ID Token or Refresh Token, and the identifier of the MCP Server it is attempting to access, and obtains a Identity Assertion JWT Authorization Grant (ID-JAG).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants