Identity Assertion Authorization Grant (ID-JAG)
Lets a company’s identity provider decide which agent may reach which application for which employee.
Flows / Delegation chains
The company identity provider decides which agents may reach which apps for which employees. No per-app consent screens.
Inside a company, per-user consent is the wrong control. An employee clicking “Allow” twenty times does not give the security team visibility into which AI tools are connected to which systems, and the employee is not the one who should be deciding.
The Identity Assertion JWT Authorization Grant, or ID-JAG, moves the decision to the identity provider the company already uses for single sign-on. The agent signs the user in once. When it needs access to another application, it asks the identity provider for a short-lived assertion aimed at that application’s authorization server. The identity provider applies administrator policy and either issues it or refuses. The agent trades the assertion for an ordinary access token.
No browser redirect, no consent prompt, and one place where access is granted, logged and revoked. Vendors market this as Cross App Access. In MCP it is the official Enterprise-Managed Authorization extension.
9 steps between 4 parties. Each step shows the message and who holds which credential afterward. Use ←→ or select any arrow.
Drag to see every party and step. Tap a step to jump to its explanation.
An ordinary OpenID Connect login, the same one used for every other workplace application. The agent receives an ID token asserting who the user is.
Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
A token exchange (RFC 8693) at the identity provider. The ID token is the subject. audience is the issuer of the application’s authorization server; resource is the MCP server itself.
POST /oauth2/token HTTP/1.1
Host: acme.idp.example
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:token-exchange
&requested_token_type=urn:ietf:params:oauth:token-type:id-jag
&audience=https://auth.chat.example/
&resource=https://mcp.chat.example/
&scope=chat.read chat.history
&subject_token=eyJraWQiOiJzMTZ0cVNtODhwREo4VGZCXzdrSEtQ…
&subject_token_type=urn:ietf:params:oauth:token-type:id_token
&client_id=2ec954a1d60620116d36d9ceb7
&client_secret=…Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
Is this client allowed to reach that application, for this user, with these scopes? The answer was configured by an administrator. The user is not asked.
Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
A signed JWT with its own type, so it cannot be mistaken for an ID token or an access token. It is not usable at the MCP server. Its only purpose is to be presented to the application’s authorization server.
// header: { "typ": "oauth-id-jag+jwt" }
{
"jti": "9e43f81b64a33f20116179",
"iss": "https://acme.idp.example",
"sub": "U019488227",
"aud": "https://auth.chat.example/",
"resource": "https://mcp.chat.example/",
"client_id": "f53f191f9311af35",
"scope": "chat.read chat.history",
"exp": 1311281970,
"iat": 1311280970
}Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
A standard JWT bearer grant (RFC 7523). The agent authenticates as a client of this authorization server, either pre-registered or by using a Client ID Metadata Document URL as its client ID.
POST /oauth2/token HTTP/1.1
Host: auth.chat.example
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&assertion=eyJhbGciOiJIUzI1NiIsI…
&client_id=https://client.example.com/client.jsonWho holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
It trusts the enterprise IdP because the company’s tenant was configured for single sign-on with it. It checks the signature, that it is the intended audience, that the client matches, and that the grant has not expired or been used.
Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
Audience-restricted to the MCP server named in the grant’s resource claim. From here the agent uses it like any other MCP access token.
Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
The MCP server validates the token exactly as it would one obtained through an interactive flow. It does not need to know the difference.
Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
When the employee leaves, or the administrator withdraws the agent’s access to this application, the identity provider stops issuing grants. Nothing has to be revoked application by application.
Who holds what after this step
Parties not listed hold none of this flow’s credentials at this point.
In plain token exchange one authorization server issues both tokens. Here there are two: the identity provider issues a grant, and a different authorization server turns it into an access token. That split is what lets it cross between applications from different vendors. ID-JAG is a profile of the more general identity chaining pattern.
See the full tracker for status and links.
Lets a company’s identity provider decide which agent may reach which application for which employee.
Central, administrator-controlled access for workforce agents, with no per-server consent prompts.
The primitive under on-behalf-of flows, ID-JAG, identity chaining and transaction tokens.
Secretless client authentication, and the second leg of ID-JAG and identity chaining.
The general mechanism for carrying identity across a trust boundary. ID-JAG is a profile of it.
The preferred way for an MCP client to identify itself to a server it has never met.
How an MCP client that has never seen a server before discovers where to sign in, identifies itself, and gets a token good for that server alone.
Trade the token you were given for a new one that names both the user and the service now acting for them.
Carry who-is-this-for across an organizational boundary, with each side keeping control of its own tokens.
The baseline. A person signs in, approves specific scopes, and the agent receives a token that says so.