<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-parecki-oauth-identity-assertion-authz-grant-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="ID Token Authz Grant">Identity Assertion Authorization Grant</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-identity-assertion-authz-grant-02"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <author fullname="Karl McGuinness">
      <organization>Independent</organization>
      <address>
        <email>public@karlmcguinness.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="20"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>cross-domain</keyword>
    <keyword>authorization</keyword>
    <keyword>authz</keyword>
    <keyword>assertion</keyword>
    <keyword>enterprise</keyword>
    <abstract>
      <?line 55?>

<t>This specification provides a mechanism for an application to use an identity assertion to obtain an access token for a third-party API using Token Exchange <xref target="RFC8693"/> and JWT Profile for OAuth 2.0 Authorization Grants <xref target="RFC7523"/>.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://drafts.aaronpk.com/draft-parecki-oauth-identity-assertion-authz-grant/draft-parecki-oauth-identity-assertion-authz-grant.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-parecki-oauth-identity-assertion-authz-grant/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/aaronpk/draft-parecki-oauth-identity-assertion-authz-grant"/>.</t>
    </note>
  </front>
  <middle>
    <?line 59?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The draft specification Identity Chaining Across Trust Domains <xref target="I-D.ietf-oauth-identity-chaining"/> defines how to request a JWT authorization grant from an Authorization Server and exchange it for an Access Token at another Authorization Server in a different trust domain. The specification is an application of a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/>. The draft supports multiple different use cases by leaving many details of the token exchange request and JWT authorization grant unspecified.</t>
      <t>This specification defines the additional details necessary to support interoperable implementations when using identity tokens as the input to the token exchange request. This specification assumes that there is a single authorization server that is trusted by two applications in different trust domains, as typically found in an enterprise scenario where the two applications allow users to log in using the same enterprise identity provider. The same enterprise identity provider that is trusted by applications for single sign-on can be extended to broker access to APIs as well.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="roles">
        <name>Roles</name>
        <dl>
          <dt>Client</dt>
          <dd>
            <t>Application that wants to obtain an OAuth 2.0 access token on behalf of a signed-in user to an external/3rd party application's API (Resource Server below). In <xref target="I-D.ietf-oauth-identity-chaining"/>, this is the Client in trust domain A.</t>
          </dd>
          <dt>Resource Application</dt>
          <dd>
            <t>Application that provides an OAuth 2.0 Protected Resource. In <xref target="I-D.ietf-oauth-identity-chaining"/>, this is the Protected Resource in trust domain B.</t>
          </dd>
          <dt>Authorization Server (IdP)</dt>
          <dd>
            <t>The Identity Provider that is trusted by a set of applications in an organization's app ecosystem. In <xref target="I-D.ietf-oauth-identity-chaining"/>, this is the Authorization Server in trust domain A, which is also trusted by the Authorization Server of the Protected Resource in trust domain B.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The example flow is for an enterprise <tt>acme</tt>, which uses a wiki app and chat app from different vendors, both of which are integrated into the enterprise's Identity Provider using OpenID Connect.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Role</th>
            <th align="left">App URL</th>
            <th align="left">Tenant URL</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Client</td>
            <td align="left">
              <tt>https://wiki.example</tt></td>
            <td align="left">
              <tt>https://acme.wiki.example</tt></td>
            <td align="left">Wiki app that embeds content from one or more resource applications</td>
          </tr>
          <tr>
            <td align="left">Resource Application</td>
            <td align="left">
              <tt>https://chat.example</tt></td>
            <td align="left">
              <tt>https://acme.chat.example</tt></td>
            <td align="left">Chat and communication app</td>
          </tr>
          <tr>
            <td align="left">Identity Provider</td>
            <td align="left">
              <tt>https://idp.example</tt></td>
            <td align="left">
              <tt>https://acme.idp.example</tt></td>
            <td align="left">Identity Provider</td>
          </tr>
        </tbody>
      </table>
      <t>Sequence Diagram</t>
      <artwork><![CDATA[
+---------+      +--------------+   +---------------+  +--------------+
|         |      |              |   |   Resource    |  |   Resource   |
|         |      |    IdP       |   |  Application  |  |  Application |
| Client  |      | Authorization|   | Authorization |  |   Resource   |
|         |      |   Server     |   |    Server     |  |    Server    |
+----+----+      +-------+------+   +-------+-------+  +------+-------+
     |                   |                  |                 |
     |                   |                  |                 |
     |  -------------->  |                  |                 |
     |   1 User SSO      |                  |                 |
     |                   |                  |                 |
     |     ID Token      |                  |                 |
     |  <- - - - - - - - |                  |                 |
     |                   |                  |                 |
     |                   |                  |                 |
     |                   |                  |                 |
     | 2 Token Exchange  |                  |                 |
     | ----------------> |                  |                 |
     |                   |                  |                 |
     |   ID-JAG          |                  |                 |
     | <- - - - - - - -  |                  |                 |
     |                   |                  |                 |
     |                   |                  |                 |
     |                   |                  |                 |
     |  3 Present ID-JAG |                  |                 |
     | ------------------+----------------> |                 |
     |                   |                  |                 |
     |    Access Token   |                  |                 |
     | <- - - - - - - - - - - - - - - - - - |                 |
     |                   |                  |                 |
     |                   |                  |                 |
     |                   |                  |                 |
     |  4 Resource Request with Access Token|                 |
     | -----------------------------------------------------> |
     |                   |                  |                 |
     |                   |                  |                 |
     |                   |                  |                 |
]]></artwork>
      <ol spacing="normal" type="1"><li>
          <t>User logs in to the Client, the Client obtains the Identity Assertion (e.g. OpenID Connect ID Token or SAML assertion)</t>
        </li>
        <li>
          <t>Client uses the Identity Assertion to request an Identity Assertion Authorization Grant for the Resource Application from the IdP</t>
        </li>
        <li>
          <t>Client exchanges the Identity Assertion Authorization Grant JWT for an Access Token at the Resource Application's token endpoint</t>
        </li>
        <li>
          <t>Client makes an API request with the Access Token</t>
        </li>
      </ol>
      <t>This specification is constrained to deployments where all Resource Application Resource Servers are leveraging the same IdP Authorization Server for Single-Sign-On (SSO) and session management services. The IdP provides a consistent trust boundary enabling the set of Resource Application Authorization Servers to honor the JWT Authorization Grant (ID-JAG) issued by the IdP. This specification also assumes that the Resource Server Authorization Servers delegate user authorization authority to the IdP (e.g. the IdP is trusted to ensure the scopes identified in the ID-JAG have been correctly authorized before issuing the ID-JAG token).</t>
    </section>
    <section anchor="user-authentication">
      <name>User Authentication</name>
      <t>The Client initiates an authentication request with the IdP using OpenID Connect or SAML.</t>
      <t>The following is an example using OpenID Connect</t>
      <artwork><![CDATA[
302 Redirect
Location: https://acme.idp.example/authorize?response_type=code&scope=openid&client_id=...
]]></artwork>
      <t>The user authenticates with the IdP, and is redirected back to the Client with an authorization code, which it can then exchange for an ID Token.</t>
      <t>Note: The Enterprise IdP may enforce security controls such as multi-factor authentication before granting the user access to the Client.</t>
      <artwork><![CDATA[
POST /token HTTP/1.1
Host: acme.idp.example
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=.....

HTTP/1.1 200 Ok
Content-Type: application/json

{
  "id_token": "eyJraWQiOiJzMTZ0cVNtODhwREo4VGZCXzdrSEtQ...",
  "token_type": "Bearer",
  "access_token": "7SliwCQP1brGdjBtsaMnXo",
  "scope": "openid"
}
]]></artwork>
    </section>
    <section anchor="token-exchange">
      <name>Token Exchange</name>
      <t>The Client makes a Token Exchange <xref target="RFC8693"/> request to the IdP's Token Endpoint with the following parameters:</t>
      <dl>
        <dt><tt>requested_token_type</tt>:</dt>
        <dd>
          <t><bcp14>REQUIRED</bcp14> - The value <tt>urn:ietf:params:oauth:token-type:id-jag</tt> indicates that an ID Assertion JWT is being requested.</t>
        </dd>
        <dt><tt>resource</tt>:</dt>
        <dd>
          <t><bcp14>REQUIRED</bcp14> - The Issuer URL of the Resource Application's authorization server.</t>
        </dd>
        <dt><tt>audience</tt>:</dt>
        <dd>
          <t>The audience parameter <bcp14>MUST NOT</bcp14> be used.</t>
        </dd>
        <dt><tt>scope</tt>:</dt>
        <dd>
          <t><bcp14>OPTIONAL</bcp14> - The space-separated list of scopes at the Resource Application that is being requested.</t>
        </dd>
        <dt><tt>subject_token</tt>:</dt>
        <dd>
          <t><bcp14>REQUIRED</bcp14> - The identity assertion (e.g. the OpenID Connect ID Token or SAML assertion) for the target end-user.</t>
        </dd>
        <dt><tt>subject_token_type</tt>:</dt>
        <dd>
          <t><bcp14>REQUIRED</bcp14> - An identifier, as described in Section 3 of <xref target="RFC8693"/>, that indicates the type of the security token in the <tt>subject_token</tt> parameter. For an OpenID Connect ID Token: <tt>urn:ietf:params:oauth:token-type:id_token</tt>, or for a SAML assertion: <tt>urn:ietf:params:oauth:token-type:saml2</tt>.</t>
        </dd>
      </dl>
      <t>The additional parameters defined in Section 2.1 of <xref target="RFC8693"/> <tt>actor_token</tt> and <tt>actor_token_type</tt> are not used in this specification.</t>
      <t>Client authentication to the authorization server is done using the standard mechanisms provided by OAuth 2.0. Section 2.3.1 of <xref target="RFC6749"/> defines password-based authentication of the client (<tt>client_id</tt> and <tt>client_secret</tt>), however, client authentication is extensible and other mechanisms are possible. For example, <xref target="RFC7523"/> defines client authentication using bearer JSON Web Tokens using <tt>client_assertion</tt> and <tt>client_assertion_type</tt>.</t>
      <t>The example below uses an ID Token as the Identity Assertion, and uses a JWT Bearer Assertion (<xref target="RFC7523"/>) as the client authentication method, (tokens truncated for brevity):</t>
      <artwork><![CDATA[
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
&resource=https://acme.chat.example/
&scope=chat.read+chat.history
&subject_token=eyJraWQiOiJzMTZ0cVNtODhwREo4VGZCXzdrSEtQ...
&subject_token_type=urn:ietf:params:oauth:token-type:id_token
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsImtpZCI6IjIyIn0...
]]></artwork>
      <section anchor="processing-rules">
        <name>Processing Rules</name>
        <t>The IdP <bcp14>MUST</bcp14> validate the subject token, and <bcp14>MUST</bcp14> validate that the audience of the Subject Token (e.g. the <tt>aud</tt> claim of the ID Token) matches the <tt>client_id</tt> of the client authentication of the request.</t>
        <t>The IdP evaluates administrator-defined policy for the token exchange request and determines if the client should be granted access to act on behalf of the subject for the target audience and scopes.</t>
        <t>The IdP may also introspect the authentication context described in the SSO assertion to determine if step-up authentication is required.</t>
      </section>
      <section anchor="response">
        <name>Response</name>
        <t>If access is granted, the IdP creates a signed Identity Assertion Authorization Grant JWT and returns it in the token exchange response defined in Section 2.2 of <xref target="RFC8693"/>:</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "issued_token_type": "urn:ietf:params:oauth:token-type:id-jag",
  "access_token": "eyJhbGciOiJIUzI1NiIsI...",
  "token_type": "N_A",
  "scope": "chat.read chat.history",
  "expires_in": 300
}
]]></artwork>
        <dl>
          <dt><tt>issued_token_type</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - <tt>urn:ietf:params:oauth:token-type:id-jag</tt></t>
          </dd>
          <dt><tt>access_token</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - The Identity Assertion Authorization Grant JWT. (Note: Token Exchange requires the <tt>access_token</tt> response parameter for historical reasons, even though this is not an OAuth access token.)</t>
          </dd>
          <dt><tt>token_type</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - <tt>N_A</tt> (because this is not an OAuth access token.)</t>
          </dd>
          <dt><tt>scope</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> if the scope of the issued token is identical to the scope requested by the client; otherwise, it is <bcp14>REQUIRED</bcp14>. This may be fewer scopes than the application requested based on various policies in the IdP.</t>
          </dd>
          <dt><tt>expires_in</tt>:</dt>
          <dd>
            <t><bcp14>RECOMMENDED</bcp14> - The lifetime in seconds of the authorization grant.</t>
          </dd>
          <dt><tt>refresh_token</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> according to Section 2.2 of <xref target="RFC8693"/>. In the context of this specification, this parameter <bcp14>SHOULD NOT</bcp14> be used.</t>
          </dd>
        </dl>
        <section anchor="error-response">
          <name>Error Response</name>
          <t>On an error condition, the IdP returns an OAuth 2.0 Token Error response as defined in Section 5.2 of <xref target="RFC6749"/>, e.g:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store

{
  "error": "invalid_grant",
  "error_description": "Audience validation failed"
}
]]></artwork>
        </section>
      </section>
      <section anchor="jwt-authorization-grant">
        <name>Identity Assertion Authorization Grant JWT</name>
        <t>The Identity Assertion Authorization Grant JWT is issued and signed by the IdP, and describes the intended audience of the authorization grant as well as the client to which it was issued and the subject identifier of the resource owner, using the following claims:</t>
        <dl>
          <dt><tt>iss</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - The IdP <tt>issuer</tt> URL as defined in Section 4.1.1 of <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>sub</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - The subject identifier (e.g. user ID) of the resource owner at the Resource Application as defined in Section 4.1.2 of <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>aud</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - The Issuer URL of the Resource Application's authorization server as defined in Section 4.1.3 of <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>client_id</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - An identifier of the client that this JWT was issued to, which <bcp14>MUST</bcp14> be recognized by the Resource Application's authorization server. For interoperability, the client identifier <bcp14>SHOULD</bcp14> be a <tt>client_id</tt> as defined in Section 4.3 <xref target="RFC8693"/>.</t>
          </dd>
          <dt><tt>jti</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - Unique ID of this JWT as defined in Section 4.1.7 of <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>exp</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - as defined in Section 4.1.4 of <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>iat</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - as defined in Section 4.1.6 of <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>scope</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> - a JSON string containing a space-separated list of scopes associated with the token, in the format described in Section 3.3 of <xref target="RFC6749"/></t>
          </dd>
        </dl>
        <t>The <tt>typ</tt> of the JWT indicated in the JWT header <bcp14>MUST</bcp14> be <tt>oauth-id-jag+jwt</tt>.</t>
        <t>An example JWT shown with expanded header and payload claims is below:</t>
        <artwork><![CDATA[
{
  "typ": "oauth-id-jag+jwt"
}
.
{
  "jti": "9e43f81b64a33f20116179",
  "iss": "https://acme.idp.example",
  "sub": "U019488227",
  "aud": "https://acme.chat.example/",
  "client_id": "f53f191f9311af35",
  "exp": 1311281970,
  "iat": 1311280970,
  "scope": "chat.read chat.history"
}
.
signature
]]></artwork>
        <t>The authorization server <bcp14>MAY</bcp14> add additional claims as necessary.</t>
        <t>Implementation notes:</t>
        <ul spacing="normal">
          <li>
            <t>If the IdP is multi-tenant and uses the same <tt>issuer</tt> for all tenants, the Resource Application will already have IdP-specific logic to determine the tenant from the OpenID Connect ID Token (e.g. the <tt>hd</tt> claim in Google) or SAML assertion, and will need to use that if the IdP also has only one client registration for the Resource Application.</t>
          </li>
          <li>
            <t><tt>sub</tt> should be an opaque ID, as <tt>iss</tt>+<tt>sub</tt> is unique. The IdP might want to also include the user's email here, which it should do as a new <tt>email</tt> claim. This would let the app dedupe existing users who may have an account with an email address but have not done SSO yet.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="token-request">
      <name>Access Token Request</name>
      <t>The Client makes an access token request to the Resource Application's token endpoint using the previously obtained Identity Assertion Authorization Grant as a JWT Assertion as defined by <xref target="RFC7523"/>.</t>
      <dl>
        <dt><tt>grant_type</tt>:</dt>
        <dd>
          <t><bcp14>REQUIRED</bcp14> - The value of <tt>grant_type</tt> is <tt>urn:ietf:params:oauth:grant-type:jwt-bearer</tt></t>
        </dd>
        <dt><tt>assertion</tt>:</dt>
        <dd>
          <t><bcp14>REQUIRED</bcp14> - The Identity Assertion Authorization Grant JWT obtained in the previous token exchange step</t>
        </dd>
      </dl>
      <t>The Client authenticates with its credentials as registered with the Resource Application's authorization server.</t>
      <t>For example:</t>
      <artwork><![CDATA[
POST /oauth2/token HTTP/1.1
Host: acme.chat.example
Authorization: Basic yZS1yYW5kb20tc2VjcmV0v3JOkF0XG5Qx2

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=eyJhbGciOiJIUzI1NiIsI...
]]></artwork>
      <section anchor="processing-rules-1">
        <name>Processing Rules</name>
        <t>All of Section 5.2 of <xref target="RFC7521"/> applies, in addition to the following processing rules:</t>
        <ul spacing="normal">
          <li>
            <t>Validate the JWT <tt>typ</tt> is <tt>oauth-id-jag+jwt</tt> (per <xref target="RFC8725"/>)</t>
          </li>
          <li>
            <t>The <tt>aud</tt> claim <bcp14>MUST</bcp14> identify the Issuer URL of the Resource Application's authorization server as the intended audience of the JWT.</t>
          </li>
          <li>
            <t>The <tt>client_id</tt> claim <bcp14>MUST</bcp14> identify the same client as the client authentication in the request.</t>
          </li>
        </ul>
      </section>
      <section anchor="response-1">
        <name>Response</name>
        <t>The Resource Application token endpoint responds with an OAuth 2.0 Token Response, e.g.:</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "token_type": "Bearer",
  "access_token": "2YotnFZFEjr1zCsicMWpAA",
  "expires_in": 86400,
  "scope": "chat.read chat.history",
  "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
}
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>This specification <bcp14>SHOULD</bcp14> only be supported for confidential clients.  Public clients <bcp14>SHOULD</bcp14> redirect the user with an OAuth 2.0 Authorization Request.</t>
      </section>
      <section anchor="step-up-authentication">
        <name>Step-Up Authentication</name>
        <t>In the initial token exchange request, the IdP may require step-up authentication for the subject if the authentication context in the subject's assertion does not meet policy requirements. An <tt>insufficient_user_authentication</tt> OAuth error response may be returned to convey the authentication requirements back to the client similar to OAuth 2.0 Step-up Authentication Challenge Protocol <xref target="RFC9470"/>.</t>
        <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store

{
  "error": "insufficient_user_authentication",
  "error_description": "Subject doesn't meet authentication requirements",
  "max_age": 5
}
]]></artwork>
        <t>The Client would need to redirect the user back to the IdP to obtain a new assertion that meets the requirements and retry the token exchange.</t>
        <t>TBD: It may make more sense to request the Identity Assertion Authorization Grant as an additional <tt>response_type</tt> on the authorization request if using OIDC for SSO when performing a step-up to skip the need for additional token exchange round-trip.</t>
      </section>
      <section anchor="cross-domain-use">
        <name>Cross-Domain Use</name>
        <t>This specification is intended for cross-domain uses where the Client, Resource App, and Identity Provider are all in different trust domains. In particular, the Identity Provider <bcp14>SHOULD NOT</bcp14> issue access tokens in response to an ID-JAG it issued itself. Doing so could lead to unintentional broadening of the scope of authorization.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>This section registers <tt>oauth-id-jag+jwt</tt>, a new media type <xref target="RFC2046"/> in the "Media Types" registry <xref target="IANA.MediaTypes"/> in the manner described in <xref target="RFC6838"/>. It can be used to indicate that the content is a Identity Assertion Authorization Grant JWT.</t>
      </section>
      <section anchor="oauth-uri-registration">
        <name>OAuth URI Registration</name>
        <t>This section registers <tt>urn:ietf:params:oauth:token-type:id-jag</tt> in the "OAuth URI" subregistry of the "OAuth Parameters" registry <xref target="IANA.oauth-parameters"/>.</t>
        <ul spacing="normal">
          <li>
            <t>URN: urn:ietf:params:oauth:token-type:id-jag</t>
          </li>
          <li>
            <t>Common Name: Token type URI for a Identity Assertion JWT Authorization Grant</t>
          </li>
          <li>
            <t>Change Controller: IESG</t>
          </li>
          <li>
            <t>Specification Document: This document</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7521">
          <front>
            <title>Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="Y. Goland" initials="Y." surname="Goland"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.</t>
              <t>The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.</t>
              <t>Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7521"/>
          <seriesInfo name="DOI" value="10.17487/RFC7521"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="RFC8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-identity-chaining">
          <front>
            <title>OAuth Identity and Authorization Chaining Across Domains</title>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Kelley Burgin" initials="K." surname="Burgin">
              <organization>MITRE</organization>
            </author>
            <author fullname="Michael J. Jenkins" initials="M. J." surname="Jenkins">
              <organization>NSA-CCSS</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This specification defines a mechanism to preserve identity
   information and federate authorization across trust domains that use
   the OAuth 2.0 Framework.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the Web Authorization
   Protocol Working Group mailing list (oauth@ietf.org), which is
   archived at https://mailarchive.ietf.org/arch/browse/oauth/.

   Source for this draft and an issue tracker can be found at
   https://github.com/oauth-wg/oauth-identity-chaining.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-chaining-02"/>
        </reference>
        <reference anchor="IANA.MediaTypes">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="IANA.oauth-parameters" target="https://www.iana.org/assignments/oauth-parameters">
          <front>
            <title>OAuth Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9470">
          <front>
            <title>OAuth 2.0 Step Up Authentication Challenge Protocol</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>It is not uncommon for resource servers to require different authentication strengths or recentness according to the characteristics of a request. This document introduces a mechanism that resource servers can use to signal to a client that the authentication event associated with the access token of the current request does not meet its authentication requirements and, further, how to meet them. This document also codifies a mechanism for a client to request that an authorization server achieve a specific authentication strength or recentness when processing an authorization request.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9470"/>
          <seriesInfo name="DOI" value="10.17487/RFC9470"/>
        </reference>
      </references>
    </references>
    <?line 444?>

<section anchor="use-cases">
      <name>Use Cases</name>
      <section anchor="enterprise-deployment">
        <name>Enterprise Deployment</name>
        <t>Enterprises often have hundreds of SaaS applications.  SaaS applications often have integrations to other SaaS applications that are critical to the application experience and jobs to be done.  When a SaaS app needs to request an access token on behalf of a user to a 3rd party SaaS integration's API, the end-user typically needs to complete an interactive delegated OAuth 2.0 flow, as the SaaS application is not in the same security or policy domain as the 3rd party SaaS integration.</t>
        <t>It is industry best practice for an enterprise to connect their ecosystem of SaaS applications to their Identity Provider (IdP) to centralize identity and access management capabilites for the organization.  End-users get a better experience (SSO) and administrators get better security outcomes such multi-factor authentication and zero-trust.  SaaS applications today enable the administrator to establish trust with an IdP for user authentication.</t>
        <t>This specification can be used to extend the SSO relationship of multiple SaaS applications to include API access between these applications as well. This specification enables federation for Authorization Servers across policy or administrative boundaries. The same enterprise IdP that is trusted by applications for SSO can be extended to broker access to APIs.  This enables the enterprise to centralize more access decisions across their SaaS ecosystem and provides better end-user experience for users that need to connect multiple applications via OAuth 2.0.</t>
        <section anchor="preconditions">
          <name>Preconditions</name>
          <ul spacing="normal">
            <li>
              <t>The Client has a registered OAuth 2.0 Client with the IdP Authorization Server</t>
            </li>
            <li>
              <t>The Client has a registered OAuth 2.0 Client with the Resource Application</t>
            </li>
            <li>
              <t>Enterprise has established a trust relationship between their IdP and the Client for SSO and Identity Assertion Authorization Grant</t>
            </li>
            <li>
              <t>Enterprise has established a trust relationship between their IdP and the Resource Application for SSO and Identity Assertion Authorization Grant</t>
            </li>
            <li>
              <t>Enterprise has granted the Client permission to act on behalf of users for the Resource Application with a set of scopes</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="email-and-calendaring-applications">
        <name>Email and Calendaring Applications</name>
        <t>Email clients can be used with arbitrary email servers, and cannot require pre-established relationships between each email client and each email server. When an email client uses OAuth to obtain an access token to an email server, this provides the security benefit of being able to use strong multi-factor authentication methods provided by the email server's authorization server, but does require that the user go through a web-based flow to log in to the email client. However, this web-based flow is often seen as distruptive to the user experience when initiated from a desktop or mobile native application, and so is often attempted to be minimized as much as possible.</t>
        <t>When the email client needs access to a separate API, such as a third-party calendaring application, traditionally this would require that the email client go through another web-based OAuth redirect flow to obtain authorization and ultimately an access token.</t>
        <t>To streamline the user experience, this specification can be used to enable the email client to use the identity assertion to obtain an access token for the third-party calendaring application without any user interaction.</t>
        <section anchor="preconditions-1">
          <name>Preconditions</name>
          <ul spacing="normal">
            <li>
              <t>The Client does not have a pre-registered OAuth 2.0 client at the IdP Authorization Server or the Resource Application</t>
            </li>
            <li>
              <t>The Client has obtained an Identity Assertion (e.g. ID Token) from the IdP Authorization Server</t>
            </li>
            <li>
              <t>The Resource Application is configured to allow the Identity Assertion Authorization Grant from unregistered clients</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following people for their contributions and reviews of this specification: Brian Campbell, Kamron Batmanghelich, Sofia Desenberg.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from the final specification ]]</t>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Changed the <tt>aud</tt> property to the Issuer URL instead of the token endpoint</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Corrected the <tt>scope</tt> property in the JWT to match token exchange and JWT access token profile</t>
        </li>
        <li>
          <t>Formatting and editorial fixes</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial revision</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
