Skip to content
Agent Identity

IETF · May 2015

JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants

RFC 7523

M. Jones, B. Campbell, C. Mortimore

RFCStableIdentity + Authn + AuthzFoundationField guide

Cross-domain 'agent already has an identity assertion, needs an access token over here' is RFC 8693 then RFC 7523. Without 7523 there is no ID-JAG redemption step.

At a glance

Problem
A client needs to authenticate to an authorization server, or request a token, using a signed JWT assertion instead of a shared secret or an authorization code.
Identity / authn / authz
Both: private_key_jwt is client authentication; urn:ietf:params:oauth:grant-type:jwt-bearer is an authorization grant. Identity chaining and XAA reuse the grant form.

Actors

  • Client
  • Authorization server
  • Assertion issuer

01

The gap for agents

RFC 7523 lets a client authenticate to an AS, or request a token, with a signed JWT assertion instead of a shared secret or an authorization code. Cross-domain 'the agent already has an identity assertion, needs an access token over here' is RFC 8693 then RFC 7523. Without 7523 there is no ID-JAG redemption step.

Agents that already have a key (SPIFFE, AAuth, private_key_jwt CIMD clients) should prefer this over a client_secret in Kubernetes.

02

Actors and trust boundaries

The assertion issuer (often the client itself for private_key_jwt, or an IdP for JWT bearer grants) is trusted by the receiving AS. The assertion MUST be audience-restricted to that AS. A stolen assertion replayed at another AS is the mix-up analogue.

03

Mechanics

Client authentication: client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer and client_assertion=<jwt>. Authorization grant: grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer and assertion=<jwt>. The JWT carries iss, sub, aud (the AS), exp, jti. Short-lived. draft-ietf-oauth-rfc7523bis was in the RFC Editor queue in 2026 — watch it for nested JWT clarifications.

urn:ietf:params:oauth:grant-type:jwt-bearerfrom spec
Quoted grant type for using a JWT as an authorization grant (identity chaining, XAA redemption).
client_assertion JWTfrom spec
Quoted client authentication form (private_key_jwt). aud must be the receiving AS.

04

Step-by-step flows

Flow 1

JWT bearer grant (redeem an assertion)

  1. 1

    Client obtains a JWT authorization grant audience-restricted to this AS (from token exchange / identity chaining / XAA).

  2. 2

    POSTs grant_type=jwt-bearer and assertion=the JWT, plus any requested resource/scope.

  3. 3

    AS validates signature, aud, exp, and policy, then issues an access token for its RS.

05

Identity vs authentication vs authorization

Both: private_key_jwt is client authentication; jwt-bearer is an authorization grant. The assertion's subject is identity; the issued access token is authorization at this AS.

06

How it composes

07

What bites agent implementers

  • Wrong aud on the assertion

    If aud is the client or the RS instead of the AS, you have an ID Token shaped object. XAA's whole point is that ID-JAG aud is the resource AS, unlike an ID Token.

  • Replay

    jti and short exp matter. Bearer assertions without PoP can be stolen in logs.

08

Stability — what you can ship

RFC 7523, May 2015. Stable. 7523bis in the RFC Editor queue in 2026 — watch for clarifications, do not wait to implement 7523. https://www.rfc-editor.org/rfc/rfc7523.html

Catalog claims (short form)

assertion JWT
Must be audience-restricted to the receiving AS. Short-lived.

Implementer notes

draft-ietf-oauth-rfc7523bis was in the RFC Editor queue in 2026 (awaiting first editor). New implementations should watch 7523bis for clarifications, especially around nested JWT handling.

Relationship to others

Primary sources

  • RFC 7523https://www.rfc-editor.org/rfc/rfc7523.html