Applications at one enterprise sign in through a common identity provider. When one of them needs to call another application's API on the user's behalf, Cross-App Access (XAA) routes that delegation through the same IdP instead of building a new app-to-app trust path: the IdP vouches for the user with a short-livedIdentity Assertion JWT Authorization Grant (ID-JAG), and the destination's authorization server decides whether to honor it. The draft is short and the rules are load-bearing; this lab-site validates them rule by rule and explains the machinery behind them. Start anywhere:
Paste a token, mint a broken one, or check metadata - a rule-by-rule console over the id-jag-validate engine. Runs in the page.
Rules explorerBoth draft revisions, every rule grouped by section cite, with the -04 to -05 delta computed from the rule data.
GuideHow XAA works: the roles, the two hops, the wire shapes, and the attack/defense map - with a citation on every mechanic.
PrimerThe draft itself: status and history, the claims table, metadata parameters, the revision timeline, and the keyword map.
The flow on one screen
Four parties, two hops, one grant. Solid arrows carry requests, dashed arrows carry responses (Section 4.1).
- User SSO. The client signs the user in with the IdP and receives an Identity Assertion: an OpenID Connect ID Token or a SAML 2.0 assertion, plus an optional refresh token (Section 4.2).
- Token exchange. The client trades the assertion at the IdP's token endpoint for an ID-JAG: a Token Exchange request with
requested_token_type=urn:ietf:params:oauth:token-type:id-jagandaudienceset to the Resource Authorization Server's issuer (Section 4.3). - jwt-bearer grant. The client presents the ID-JAG to the Resource Authorization Server as a JWT bearer assertion (RFC 7523) and gets back an access token (Section 4.4).
- API call. The client calls the Resource Server with the access token. Note what never happened: the IdP never held or issued an access token for the chat API - the Resource Authorization Server minted this one (Section 1).
The four roles
| Role | Who that is | Cite |
|---|---|---|
| Client | the app the user signed into and that wants to call another app’s API - the wiki app in the draft’s example | Section 2.1 |
| IdP Authorization Server | the identity provider both sides already trust for SSO and subject resolution; it mints the ID-JAG | Section 2.1 |
| Resource Authorization Server | the other app’s authorization server; it validates the ID-JAG and issues its own access tokens | Section 2.1 |
| Resource Server | hosts the API itself; it never sees the IdP, only access tokens from its own authorization server | Section 2.1 |
The trust is asymmetric and already paid for: the client has a SSO relationship with the IdP, the Resource Authorization Server independently trusts that same IdP for SSO and subject resolution, and the Resource Server trusts only its own authorization server (Section 5). XAA adds no new trust relationships; it reuses the federation that exists.
Three tracks, one site
One app acts for a user at another app’s API, brokered by the IdP both already trust for SSO. This is Cross-App Access, realized with the ID-JAG draft - this site’s subject.
start with how XAA works →Automated clients proving who they are at the HTTP layer, so servers can tell good bots from bad ones. An adjacent track; not covered on this site yet.
not covered on this site yetAgents holding identity of their own, distinct from the user they act for: delegation chains, actor claims, agent-scoped credentials. An adjacent track; not covered on this site yet.
not covered on this site yetPick your seat
You mint the grants. See exactly what an ID-JAG looks like on the wire, then break one on purpose, a rule family at a time.
Open the Mint tabYou validate the grant and issue the access token. Walk the processing rules with your own deployment context supplied.
Open the Validate tabYour server is the resource side. Check the metadata advertisement and the grant-type coupling an authorization server must carry.
Open the Metadata tabYou run the two hops: token exchange at the IdP, then the jwt-bearer grant at the resource side. Read both on the wire first.
Read how XAA worksYou need the paper trail: draft status and history, the full claims table, and which normative keyword carries which weight.
Read the draft primerNormative - the documents the pattern is built from:
- draft-ietf-oauth-identity-assertion-authz-grant-05 (work in progress) - this site's subject
- draft-ietf-oauth-identity-chaining-17 (work in progress) - the identity-chaining base XAA profiles
- RFC 8693 - OAuth 2.0 Token Exchange
- RFC 7523 - JWT Profile for OAuth 2.0 Authorization Grants
- RFC 6749 - The OAuth 2.0 Authorization Framework
Informative - status and context:
- Datatracker: draft-ietf-oauth-identity-assertion-authz-grant - revision and status history
- oauth-wg/oauth-identity-assertion-authz-grant - the draft's issue tracker