<?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.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-parecki-oauth-identity-assertion-authz-grant-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.4 -->
  <front>
    <title abbrev="ID Token Authz Grant">Identity Assertion Authorization Grant</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-identity-assertion-authz-grant-00"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <author fullname="Karl McGuinness">
      <organization>Okta</organization>
      <address>
        <email>public@karlmcguinness.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="02"/>
    <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://aaronpk.github.io/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. This specification defines the additional details necessary to support interoperable implementations when using identity tokens as the input to the token exchange request.</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></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">SaaS 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. SAML Assertion or OpenID Connect ID Token)</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>
    </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>
      <ul spacing="normal">
        <li>
          <t><tt>requested_token_type=urn:ietf:params:oauth:token-type:id-jag</tt></t>
        </li>
        <li>
          <t><tt>resource</tt> - The token endpoint of the Resource Application.</t>
        </li>
        <li>
          <t><tt>scope</tt> - The space-separated list of scopes at the Resource Application to include in the token</t>
        </li>
        <li>
          <t><tt>subject_token</tt> - The identity assertion (SAML Assertion or OpenID Connect ID Token) for the target end-user</t>
        </li>
        <li>
          <t><tt>subject_token_type</tt> - For SAML2 Assertion: <tt>urn:ietf:params:oauth:token-type:saml2</tt>, or OpenID Connect ID Token: <tt>urn:ietf:params:oauth:token-type:id_token</tt></t>
        </li>
        <li>
          <t>Client authentication (e.g. <tt>client_id</tt> and <tt>client_secret</tt>, or the more secure <tt>private_key_jwt</tt> method using <tt>client_assertion</tt> and <tt>client_assertion_type</tt>)</t>
        </li>
      </ul>
      <t>The example below uses an ID Token as the Identity Assertion, and uses <tt>private_key_jwt</tt> 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/oauth2/token
&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>
        <ul spacing="normal">
          <li>
            <t><tt>issued_token_type</tt> - <tt>urn:ietf:params:oauth:token-type:id-jag</tt></t>
          </li>
          <li>
            <t><tt>access_token</tt> - The Identity Assertion Authorization Grant JWT. (Token Exchange requires the <tt>access_token</tt> response parameter for historical reasons, even though this is not an OAuth access token.)</t>
          </li>
          <li>
            <t><tt>token_type</tt> - <tt>N_A</tt> (As defined by Token Exchange.)</t>
          </li>
          <li>
            <t><tt>scope</tt> - The list of scopes granted by the IdP. This may be fewer scopes than the application requested based on various policies in the IdP.</t>
          </li>
          <li>
            <t><tt>expires_in</tt> - The lifetime in seconds of the authorization grant.</t>
          </li>
        </ul>
        <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 original identity assertion, using the following claims:</t>
        <ul spacing="normal">
          <li>
            <t><tt>iss</tt> - The IdP <tt>issuer</tt> URL</t>
          </li>
          <li>
            <t><tt>sub</tt> - The User ID at the IdP</t>
          </li>
          <li>
            <t><tt>aud</tt> - Token endpoint of the Resource Application's authorization server</t>
          </li>
          <li>
            <t><tt>client_id</tt> - Client ID as registered with the Resource Application's authorization server.</t>
          </li>
          <li>
            <t><tt>scopes</tt> - Array of scopes at the Resource Application granted to the Client</t>
          </li>
          <li>
            <t><tt>jti</tt> - Unique ID of this JWT</t>
          </li>
          <li>
            <t><tt>exp</tt>, <tt>iat</tt> - as defined by JWT</t>
          </li>
        </ul>
        <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/oauth2/token",
  "client_id": "f53f191f9311af35",
  "exp": 1311281970,
  "iat": 1311280970,
  "scopes" : [ "chat.read" , "chat.history" ]
}
.
signature
]]></artwork>
        <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 OIDC/SAML (e.g. the <tt>hd</tt> claim in Google) 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 <xref target="RFC7523"/>.</t>
      <ul spacing="normal">
        <li>
          <t><tt>grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer</tt></t>
        </li>
        <li>
          <t><tt>assertion</tt> - The Identity Assertion Authorization Grant JWT obtained in the previous token exchange step</t>
        </li>
        <li>
          <t>Client Authentication - the Client authenticates with its credentials as registered with the Resource Application's authorization server</t>
        </li>
      </ul>
      <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 token endpoint of the Resource Application as the intended audience of the JWT.</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,
  "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>
    <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>
      <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="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="19" month="February" 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-01"/>
        </reference>
        <reference anchor="IANA.MediaTypes">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="IANA.oauth-parameters" target="http://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>
        <reference anchor="RFC7522">
          <front>
            <title>Security Assertion Markup Language (SAML) 2.0 Profile 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"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a Security Assertion Markup Language (SAML) 2.0 Bearer Assertion as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7522"/>
          <seriesInfo name="DOI" value="10.17487/RFC7522"/>
        </reference>
      </references>
    </references>
    <?line 385?>

<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 anchor="relationship-to-rfc7522">
      <name>Relationship to RFC7522</name>
      <t>"SAML 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants" <xref target="RFC7522"/> describes a mechanism for using a SAML assertion as an authorization grant to obtain an access token. Directly exchanging a SAML assertion for an access token is limited in the ways this can be securely deployed.</t>
      <t>This specification adds an intermediate step of exchanging a SAML assertion for the intermediate Identity Assertion Authorization Grant, which is then later exchanged for an access token. By adding this intermediate step, this provides the security benefit of being able to indicate which API the access token is being requested, enabling the authorization server to enforce policies before issuing the authorization grant. Without this step, policies must be enforced at each resource application's authorization server, which doesn't scale well and is impossible in some deployments.</t>
    </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.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
JtXEeSCepRpE50jOkzGmkJ73vy8q5JFsVAAA

-->

</rfc>
