<?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.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lombardo-oauth-step-up-authz-challenge-proto-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="STEPZ">OAuth 2.0 step-up authorization challenge proto</title>
    <seriesInfo name="Internet-Draft" value="draft-lombardo-oauth-step-up-authz-challenge-proto-00"/>
    <author fullname="Jean-François Lombardo">
      <organization>AWS</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>jeffsec@amazon.com</email>
      </address>
    </author>
    <author fullname="Alexandre Babeanu">
      <organization>IndyKite</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>alex.babeanu@indykite.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="24"/>
    <area/>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>security</keyword>
    <keyword>trust</keyword>
    <abstract>
      <?line 110?>

<t>It is not uncommon for resource servers to require additional information like details of delegation authorization, or assurance proof of the delegation of authorization mechanism used according to the characteristics of a request. This document introduces a mechanism that resource servers can use to signal to a client that the  data and metadata  associated with
the access token of the current request does not meet its authorization requirements and, further, how to meet them. This document also codifies a taxonomy to guide the client into starting a new request towards the authorization server in order to get issued, if applicable, a new set of tokens matching the requirements.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://identitymonk.github.io/draft-lombardo-oauth-step-up-authz-challenge/draft-lombardo-oauth-step-up-authz-challenge-proto.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-lombardo-oauth-step-up-authz-challenge-proto/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol  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/identitymonk/draft-lombardo-oauth-step-up-authz-challenge"/>.</t>
    </note>
  </front>
  <middle>
    <?line 116?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In simple API authorization scenarios, an authorization server will determine what claims to embed in the tokkens to issue on the basis of aspects such as the scopes requested, the resource, the identity of the client, and other characteristics known a provisioning time. Although that approach is viable in many situations, it falls short in several important circumstances. Consider, for instance, a FAPI 2.0 or SMART on FHIR regulated API requiring peculiar client authentication mechanism to be enforced or transaction specific details to be present in the token depending on whether the resource being accessed need to meet some rules estimated by the API itself, or a policy decision point it relies on, using a logic that is opaque to the authorization server.</t>
      <t>This document extends the collection of error codes defined by <xref target="RFC6750"/> and by <xref target="RFC9470"/> with a new error codes, <tt>insufficient_delegated_authorization</tt> and <tt>new_authorization_needed</tt>, which can be used by resource servers to signal to clients that the authorization delegation represented by the access token presented with the request does not meet the authorization requirements of the resource server. This document also introduces associated payload definitions. The resource server can use these payloads to explicitly communicate to the client the required authorization details required.</t>
      <t>The client can use that information to reach back to the authorization server with through a new authorization request that specifies the additional authorization details required to be described in the tokens to be issued. This document does not describe new methods to perform the new authorization request but will rely on OAuth 2.0 Rich Auhtorization Request <xref target="RFC9396"/>, OAuth 2.0 Pushed Authorization Request <xref target="RFC9126"/>, or OAuth 2.0 JWT-Secured Authorization Request <xref target="RFC9101"/>.</t>
      <t>Those extensions will make it possible to implement interoperable step up authorization with minimal work from resource servers, clients, and authorization servers.</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?>

<t>This specification uses the terms "access token", "authorization server", "authorization endpoint", "authorization request", "client", "protected resource", and "resource server" defined by <xref target="RFC6749"/>.</t>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>The following is an end-to-end sequence of a typical step up authorization scenario implemented according to this specification. The scenario assumes that, before the sequence described below takes place, the client already obtained an access token for the protected resource.</t>
      <artwork><![CDATA[
+----------+                                          +--------------+
|          |                                          |              |
|          |-----------(1) request ------------------>|              |
|          |                                          |              |
|          |<---------(2) challenge ------------------|   Resource   |
|          |                                          |    Server    |
|  Client  |                                          |              |
|          |-----------(5) request ------------------>|              |
|          |                                          |              |
|          |<-----(6) protected resource -------------|              |
|          |                                          +--------------+
|          |
|          |
|          |  +-------+                              +---------------+
|          |->|       |                              |               |
|          |  |       |--(3) authorization request-->|               |
|          |  | User  |                              |               |
|          |  | Agent |<-----------[...]------------>| Authorization |
|          |  |       |                              |     Server    |
|          |<-|       |                              |               |
|          |  +-------+                              |               |
|          |                                         |               |
|          |<-------- (4) access token --------------|               |
|          |                                         |               |
+----------+                                         +---------------+
]]></artwork>
      <t><em>Figure 1: Abstract Protocol Flow</em></t>
      <ol spacing="normal" type="1"><li>
          <t>The client requests a protected resource, presenting an access token.</t>
        </li>
        <li>
          <t>The resource server determines that the circumstances in which the presented access token was obtained offer insufficient authorization details, wrong grant flow, or inadequate client authentication mechanism; hence, it denies the request and returns a challenge describing (using a combination of error code and payload details) what authorization details  requirements must be met for the resource server to allow a request.</t>
        </li>
        <li>
          <t>The client directs the user agent to the authorization server with an authorization request that includes the authorization details indicated by the resource server in the previous step.</t>
        </li>
        <li>
          <t>Whatever sequence required by the grant of choice plays out; this will include the necessary steps to authenticate the client in accordance with the playoad, to use the required grant flow type, or to validate that the authorization details are met. Then, the authorization server returns a new access token to the client. The new access token contains or references information about the elements required, including but not limited to what <xref target="I-D.lombardo-oauth-client-extension-claims"/> defines.</t>
        </li>
        <li>
          <t>The client repeats the request from step 1, presenting the newly obtained access token.</t>
        </li>
        <li>
          <t>The resource server finds that the authorization details, grant flow, or client authentication mechanism used during the acquisition of the new access token complies with its requirements and returns the representation of the requested protected resource.</t>
        </li>
      </ol>
      <t>The validation operations mentioned in steps 2 and 6 imply that the resource server has a way of evaluating, on top of the requirements of authentication as defined in <xref target="RFC9470"/>, the authorization requirements that occurred during the process by which the access token was obtained. In the context of this document, the assessment by the resource server of the specific authorization mechanisms used to obtain a token for the requested resource is called an "authorization state".</t>
      <t>This document will not describe how the resource server can perform this assessment of the authorization state whatever the access token is a JSON Web Token (JWT) <xref target="RFC9068"/> or is validated via introspection <xref target="RFC7662"/> and whatever the resource provider is performing this assessment natively or by offloading the assessment to a policy decision point as defined in <xref target="XACML"/> and NIST's ABAC <xref target="SP.800-162"/> Still, this document describes how the resource provider can signal to the client any insatisfying authorization  is expected to be obtained from the authorization server if applicable.</t>
      <t>The terms "authorization state" and "step up" are metaphors in this specification. These metaphors do not suggest that there is an absolute hierarchy of authorization states expressed in interoperable fashion. The notion of a state emerges from the fact that the resource server may only want to accept certain authorization mechanisms. When presented with a token derived from particuliar authorization mechanisms (i.e., a given authorization state) that it does not want to accept (i.e., below the threshold it will accept), the resource server seeks to step up (i.e., renegotiate) from the current authorization state to one that it may accept. The "step up" metaphor is intended to convey a shift from the original authorization state to one that is acceptable to the resource server.</t>
      <t>Although the case in which the new access token supersedes old tokens by virtue of a higher authorization state is common, in line with the connotation of the term "step up authorization", it is important to keep in mind that this might not necessarily hold true in the general case. For example, for a particular request, a resource server might require a higher authorization state and a shorter validity, resulting in a token suitable for one-off calls but leading to frequent prompts: hence, offering a suboptimal user experience if the token is reused for routine operations. In such a scenario, the client would be better served by keeping both the old tokens, which are associated with a lower authorization state, and the new one: selecting the appropriate token for each API call. This is not a new requirement for clients, as incremental consent and least-privilege principles will require similar heuristics for managing access tokens associated with different scopes and permission levels. This document does not recommend any specific token-caching strategy: that choice will be dependent on the characteristics of every particular scenario and remains application-dependent as in the core OAuth cases. Also recall that OAuth 2.0 <xref target="RFC6749"/> assumes access tokens are treated as opaque by clients. The token format might be unreadable to the client or might change at any time to become unreadable. So, during the course of any token-caching strategy, a client must not attempt to inspect the content of the access token to determine the associated authentication information or other details (see Section 6 of <xref target="RFC9068"/> for a more detailed discussion).</t>
    </section>
    <section anchor="authorization-requirements-challenge">
      <name>Authorization Requirements Challenge</name>
      <section anchor="http-error-status-code">
        <name>HTTP Error Status Code</name>
        <t>When a request compliant with this specification does not meet the authorization state requirements, the resource server responds using the <tt>403</tt> HTTP status code with the Bearer authentication scheme's error parameter (from <xref target="RFC6750"/>) .</t>
      </section>
      <section anchor="error-codes">
        <name>Error Codes</name>
        <t>This specification introduces two new error code values for this challenge and other OAuth authentication schemes, as defined in <xref target="RFC9449"/> and in <xref target="RFC9470"/>:</t>
        <dl>
          <dt><tt>insufficient_delegated_authorization</tt>:</dt>
          <dd>
            <t>The authorization mechansisms used for the issuance of the access token presented with the request does not meet the authorization state requirements of the protected resource. It is up to the client to decide what to perform next.</t>
          </dd>
          <dt><tt>new_authorization_needed</tt>:</dt>
          <dd>
            <t>The authorization mechansisms used for the issuance of the access token presented with the request does not meet the authorization state requirements of the protected resource. The client is guided on why new authorization mechanisms and details <bcp14>SHOULD</bcp14> be used through a new authorization request to the authorization server.</t>
          </dd>
        </dl>
        <t>Note: the logic through which the resource server determines that the current request does not meet the authorization state requirements of the protected resource, and associated functionality (such as expressing, deploying and publishing such requirements), is out of scope for this document.</t>
      </section>
      <section anchor="www-authenticate-header-error-code-and-associated-payload">
        <name>WWW-Authenticate Header Error Code And Associated Payload</name>
        <t>Each error code can return different types of HTTP payload to guide the client into initiating the next Authorization Request.</t>
        <section anchor="case-of-insufficientdelegatedauthorization-error">
          <name>Case Of <tt>insufficient_delegated_authorization</tt> Error</name>
          <t>If the error code <tt>insufficient_delegated_authorization</tt> is used, the HTTP payload <bcp14>MUST</bcp14> be formatted as an AuthZEN <xref target="D-OpenID-AuthZEN"/> response for a <tt>decision</tt> that is <tt>false</tt> and <bcp14>MUST</bcp14> include as part of the response <tt>context</tt>:</t>
          <dl>
            <dt>error_msg:</dt>
            <dd>
              <t><em><bcp14>REQUIRED</bcp14></em> - a string representing a human readable justification of the resource provider access control leading to a <tt>deny</tt> of the request.</t>
            </dd>
            <dt>details:</dt>
            <dd>
              <t><em><bcp14>REQUIRED</bcp14></em> - a valid <xref target="RFC8259"/> JSON structure</t>
            </dd>
          </dl>
          <t>The <tt>details</tt> JSON structure <bcp14>MUST</bcp14> include only one of the following element:</t>
          <dl>
            <dt>expected_claims:</dt>
            <dd>
              <t><em><bcp14>OPTIONAL</bcp14></em> - a list of space-delimited, case-sensitive strings representing the claim names that needs to be provided.</t>
            </dd>
            <dt>expected_values:</dt>
            <dd>
              <t><em><bcp14>OPTIONAL</bcp14></em> - a valid JSON <xref target="RFC8259"/> structure that will indicate the claim names that needs to be provided as JSON keys and the values that could be considered valid as a JSON array of values.</t>
            </dd>
            <dt>pdp_message:</dt>
            <dd>
              <t><em><bcp14>OPTIONAL</bcp14></em> - a valid JSON <xref target="RFC8259"/> structure representing the error details in a format of the resource provider or of the policy decision point that is the authority for the resource provider.</t>
            </dd>
          </dl>
          <t>The following is a non-normative example of a WWW-Authenticate header with the error code <tt>insufficient_delegated_authorization</tt> and an ssociated payload:</t>
          <t>```http
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_user_authorization", error_description="A different authorization level is required"</t>
          <t>{
  "decision": false,
  "context": {
    "error_msg": "The user must belongs to a project to access the resource",
    "details": {
      "expected_values": {
        "project" : ["phoenix", "eagle"]
      }
    }
  }
}
```</t>
          <t>This specification does not provide any guidance on which format is preferred when providing a <tt>pdp_message</tt> and leave this to the decision of the resource provide implementers. The authors still recommend that implements profile their format to ease the interoperbility between resource providers, clients, and potentially authorization servers.</t>
        </section>
        <section anchor="case-of-newauthorizationneeded-error">
          <name>Case Of <tt>new_authorization_needed</tt> Error</name>
          <t>If the error code <tt>new_authorization_needed</tt> is used, the HTTP payload <bcp14>MUST</bcp14> be formatted a valid JSON <xref target="RFC8259"/> structure wich will include:</t>
          <dl>
            <dt>method:</dt>
            <dd>
              <t><em><bcp14>REQUIRED</bcp14></em> - The value of this claim <bcp14>MUST</bcp14> be an absolute URI that can be registered with IANA. It <bcp14>SHOULD</bcp14> support present, future or custom values. If IANA registered URIs are used, then their meaning and semantics should be respected and used as defined in the registry. Parties using this custom claim values need to agree upon the semantics of the values used, which may be context specific. This specification recognizes primarily the value <tt>urn:ietf:params:oauth:grant-ext:rar</tt> defined by Rich Authorization Request <xref target="RFC9396"/> and <tt>urn:ietf:params:oauth:grant-ext:par</tt> defined by Pushed Authorization Request <xref target="RFC9126"/>.</t>
            </dd>
          </dl>
          <t>The structure <bcp14>MUST</bcp14> then include one of the following elements:</t>
          <dl>
            <dt>authorization_details:</dt>
            <dd>
              <t><em><bcp14>OPTIONAL</bcp14></em> -  in JSON notation, an array of objects as defined in section 2 of Rich Authorization Request <xref target="RFC9396"/></t>
            </dd>
            <dt>jar:</dt>
            <dd>
              <t><em><bcp14>OPTIONAL</bcp14></em> - a JSON Web Token (JWT) <xref target="RFC7519"/> whose JWT Claims Set holds the JSON-encoded OAuth 2.0 authorization request parameters as defined in section 2.1 of JWT-Secured Authorization Request <xref target="RFC9101"/></t>
            </dd>
            <dt>reference:</dt>
            <dd>
              <t><em><bcp14>OPTIONAL</bcp14></em> - an absolute URI that references the set of parameters comprising an OAuth 2.0 authorization request in a form of a Request Object as defined in section 2.2 of JWT-Secured Authorization Request <xref target="RFC9101"/></t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="auhtorization-request">
      <name>Auhtorization Request</name>
      <t>A client receiving a challenge as defined in section 4 of this specification from the resource <bcp14>MUST</bcp14> take the action appropriate to each use case.</t>
      <section anchor="case-of-insufficientdelegatedauthorization-error-1">
        <name>Case Of <tt>insufficient_delegated_authorization</tt> Error</name>
        <t>In this case, the client <bcp14>MUST</bcp14> determine by itself what is the best course of action for the next action. It <bcp14>SHALL</bcp14> at least provide feedback to the user of the situation but it CAN decide to trigger any OAuth2 grant flow by following the RFC that applied to it.</t>
        <section anchor="case-of-newauthorizationneeded-error-1">
          <name>Case Of <tt>new_authorization_needed</tt> Error</name>
          <t>In this case, the client <bcp14>MUST</bcp14> follow the requirements fixed by the Resource Provider. The following situations CAN occur:</t>
          <table>
            <thead>
              <tr>
                <th align="left">method</th>
                <th align="left">authorization_details</th>
                <th align="left">jar</th>
                <th align="left">reference</th>
                <th align="left">Expectation of the client</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>urn:ietf:params:oauth:grant-ext:rar</tt></td>
                <td align="left">Set as specified</td>
                <td align="left">empty</td>
                <td align="left">empty</td>
                <td align="left">Starts an Authorization Request as defined by RAR with the authorization details</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>urn:ietf:params:oauth:grant-ext:rar</tt></td>
                <td align="left">empty</td>
                <td align="left">Set as specified</td>
                <td align="left">empty</td>
                <td align="left">Starts an Authorization Request as defined in RAR with the Request Object in JWT format</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>urn:ietf:params:oauth:grant-ext:rar</tt></td>
                <td align="left">empty</td>
                <td align="left">empty</td>
                <td align="left">Set as specified</td>
                <td align="left">Starts an Authorization Request as defined in RAR with the Request Object URI (it would mean the Resource Provider will have send the Request Object to AS directly)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>urn:ietf:params:oauth:grant-ext:par</tt></td>
                <td align="left">Set as specified</td>
                <td align="left">empty</td>
                <td align="left">empty</td>
                <td align="left">Starts an Authorization Request as defined by PAR with the authorization details</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>urn:ietf:params:oauth:grant-ext:par</tt></td>
                <td align="left">empty</td>
                <td align="left">Set as specified</td>
                <td align="left">empty</td>
                <td align="left">Starts an Authorization Request as defined in PAR with the Request Object in JWT format</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>urn:ietf:params:oauth:grant-ext:par</tt></td>
                <td align="left">empty</td>
                <td align="left">empty</td>
                <td align="left">Set as specified</td>
                <td align="left">Starts an Authorization Request as defined in PAR with the Request Object URI (it would mean the Resource Provider will have send the Request Object to AS directly)</td>
              </tr>
            </tbody>
          </table>
          <t>This specification recognizes that other method URI might be defined in the future. The associated specifications <bcp14>SHALL</bcp14> defined the expected behavior for such new methods.</t>
        </section>
      </section>
    </section>
    <section anchor="authorization-response">
      <name>Authorization Response</name>
      <t>An authorization server complying with this specification will react to the presence of the presented parameters and react as defined by the associated specification being, without limitations to, the response described in <xref target="RFC6749"/>.</t>
    </section>
    <section anchor="information-conveyed-via-the-access-token">
      <name>Information conveyed via the Access Token</name>
      <t>To evaluate whether an access token meets the protected resource's requirements, the resource server will enforce the conventional token-validation logic before analysing the content of the payload of the token as defined by <xref target="RFC7519"/>, <xref target="RFC6749"/>, and <xref target="RFC9068"/> as long as any specification that applies to IANA registered claims.</t>
    </section>
    <section anchor="authorization-server-metadata">
      <name>Authorization Server Metadata</name>
      <t>TODO</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment  Considerations</name>
      <t>This specification facilitates the communication of requirements from a resource server to a client, which, in turn, can enable a more granular and appropriate Authorization Request at the Authorization Server using either an OAuth 2.0 <xref target="RFC6749"/> defined grant flow, a Rich Authorization Request <xref target="RFC9396"/>, a Push Authorization Request <xref target="RFC9126"/>, or a JWT-Secured Authorization Request <xref target="RFC9101"/>. However, it is important to realize that the user experience achievable in every specific deployment is a function of the policies each resource server and authorization server pair establishes. Imposing constraints on those policies is out of scope for this specification; hence, it is perfectly possible for resource servers and authorization servers to impose requirements that are impossible for subjects or clients to comply with or that lead to an undesirable user-experience outcome.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification adds to previously defined OAuth mechanisms. Their respective security considerations apply:</t>
      <ul spacing="normal">
        <li>
          <t>OAuth 2.0 <xref target="RFC6749"/>,</t>
        </li>
        <li>
          <t>JWT access tokens <xref target="RFC9068"/>,</t>
        </li>
        <li>
          <t>Bearer WWW-Authenticate <xref target="RFC6750"/>,</t>
        </li>
        <li>
          <t>token introspection <xref target="RFC7662"/>,</t>
        </li>
        <li>
          <t>authorization server metadata <xref target="RFC8414"/>,</t>
        </li>
        <li>
          <t>Rich Authorization Request <xref target="RFC9396"/>,</t>
        </li>
        <li>
          <t>Push Authorization Request <xref target="RFC9126"/>, and</t>
        </li>
        <li>
          <t>JWT-Secured Authorization Request <xref target="RFC9101"/>.</t>
        </li>
      </ul>
      <t>This specification does not attempt to define the mechanics by which access control is made by the resource provider and how the result of such access control evaluation should be translated into one of the challenges defined in Section 4. Still, such payload might unintentionally disclose information about the subject, the resource, the action to be performed, as long as context-specific data such as but not limited to authorization details  that an attacker might use to gain knowledge about their target. Implementers should use care in determining what to disclose in the challenge and in what circumstances.</t>
      <t>For this specification, the resource provider <bcp14>MUST</bcp14> examine the incoming access token and enforce the conventional token-validation logic - be it based on JWT validation, introspection, or any other method - before determining whether or not a challenge should be returned.</t>
      <t>As this specification provides a mechanism for the resource server to trigger user interaction, it's important for the authorization server and clients to consider that a malicious resource server might abuse that feature.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="RFC6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="RFC9068">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <date month="October" year="2021"/>
            <abstract>
              <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9068"/>
          <seriesInfo name="DOI" value="10.17487/RFC9068"/>
        </reference>
        <reference anchor="D-OpenID-AuthZEN" target="https://openid.github.io/authzen/">
          <front>
            <title>Authorization API</title>
            <author initials="O." surname="GAzitt" fullname="Omri GAzitt" role="editor">
              <organization>Asserto</organization>
            </author>
            <author initials="D." surname="Brossard" fullname="DAvid Brossard" role="editor">
              <organization>Axiomatics</organization>
            </author>
            <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale" role="editor">
              <organization>SGNL</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC9396">
          <front>
            <title>OAuth 2.0 Rich Authorization Requests</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="J. Richer" initials="J." surname="Richer"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="May" year="2023"/>
            <abstract>
              <t>This document specifies a new parameter authorization_details that is used to carry fine-grained authorization data in OAuth messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9396"/>
          <seriesInfo name="DOI" value="10.17487/RFC9396"/>
        </reference>
        <reference anchor="RFC9126">
          <front>
            <title>OAuth 2.0 Pushed Authorization Requests</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="D. Tonge" initials="D." surname="Tonge"/>
            <author fullname="F. Skokan" initials="F." surname="Skokan"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document defines the pushed authorization request (PAR) endpoint, which allows clients to push the payload of an OAuth 2.0 authorization request to the authorization server via a direct request and provides them with a request URI that is used as reference to the data in a subsequent call to the authorization endpoint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9126"/>
          <seriesInfo name="DOI" value="10.17487/RFC9126"/>
        </reference>
        <reference anchor="RFC9101">
          <front>
            <title>The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)</title>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="August" year="2021"/>
            <abstract>
              <t>The authorization request in OAuth 2.0 described in RFC 6749 utilizes query parameter serialization, which means that authorization request parameters are encoded in the URI of the request and sent through user agents such as web browsers. While it is easy to implement, it means that a) the communication through the user agents is not integrity protected and thus, the parameters can be tainted, b) the source of the communication is not authenticated, and c) the communication through the user agents can be monitored. Because of these weaknesses, several attacks to the protocol have now been put forward.</t>
              <t>This document introduces the ability to send request parameters in a JSON Web Token (JWT) instead, which allows the request to be signed with JSON Web Signature (JWS) and encrypted with JSON Web Encryption (JWE) so that the integrity, source authentication, and confidentiality properties of the authorization request are attained. The request can be sent by value or by reference.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9101"/>
          <seriesInfo name="DOI" value="10.17487/RFC9101"/>
        </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="RFC7662">
          <front>
            <title>OAuth 2.0 Token Introspection</title>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7662"/>
          <seriesInfo name="DOI" value="10.17487/RFC7662"/>
        </reference>
        <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="RFC9728">
          <front>
            <title>OAuth 2.0 Protected Resource Metadata</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="P. Hunt" initials="P." surname="Hunt"/>
            <author fullname="A. Parecki" initials="A." surname="Parecki"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client or authorization server can use to obtain the information needed to interact with an OAuth 2.0 protected resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9728"/>
          <seriesInfo name="DOI" value="10.17487/RFC9728"/>
        </reference>
        <reference anchor="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="RFC9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
        <reference anchor="I-D.lombardo-oauth-client-extension-claims">
          <front>
            <title>OAuth 2.0 client extension claims</title>
            <author fullname="Jeff Lombardo" initials="J." surname="Lombardo">
              <organization>AWS</organization>
            </author>
            <author fullname="Alexandre Babeanu" initials="A." surname="Babeanu">
              <organization>IndyKite</organization>
            </author>
            <date day="11" month="April" year="2025"/>
            <abstract>
              <t>   This specification defines new claims for JWT profiled access tokens
   [RFC9068] so that resource providers can benefit from more granular
   information about the client to make better informed access
   decisions.  The proposed new claims include: the client
   authentication methods, the client OAuth grant flow used as well as
   the OAuth grant flow extensions used as part of the issuance of the
   associated tokens.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lombardo-oauth-client-extension-claims-00"/>
        </reference>
        <reference anchor="XACML" target="https://www.oasis-open.org/committees/xacml/repository/cs-xacml-specification-1.1.pdf">
          <front>
            <title>eXtensible Access Control Markup Language (XACML) Version 1.1</title>
            <author initials="S." surname="Godik" fullname="Simon Godik" role="editor">
              <organization>Overxeer</organization>
            </author>
            <author initials="T. M." surname="(Ed.)" fullname="Tim Moses (Ed.)" role="editor">
              <organization>Entrust</organization>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="SP.800-162" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-162.pdf">
          <front>
            <title>Guide to Attribute Based Access Control (ABAC) Definition and Considerations</title>
            <author initials="V." surname="Hu" fullname="Vincent Hu" role="editor">
              <organization>NIST</organization>
            </author>
            <author initials="D." surname="Ferraiolo" fullname="David Ferraiolo" role="editor">
              <organization>NIST</organization>
            </author>
            <author initials="R." surname="Kuhn" fullname="Richard Kuhn" role="editor">
              <organization>NIST</organization>
            </author>
            <author initials="A." surname="Schnitzer" fullname="Adam Schnitzer" role="editor">
              <organization>BAH</organization>
            </author>
            <author initials="K." surname="Sandlin" fullname="Kenneth Sandlin" role="editor">
              <organization>MITRE</organization>
            </author>
            <author initials="R." surname="Miller" fullname="Robert Miller" role="editor">
              <organization>MITRE</organization>
            </author>
            <author initials="K." surname="Scarfone" fullname="Karen Scarfone" role="editor">
              <organization>Scarfone Cybersecurity</organization>
            </author>
            <date year="2014"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 342?>

<section anchor="use-cases">
      <name>Use Cases</name>
      <section anchor="llm-agent-accessing-a-service-via-an-llm-tool-on-behalf-of-a-user">
        <name>LLM Agent accessing a service via an LLM Tool on behalf of a user</name>
        <t>LLM agents, including those based on large language models (LLMs), are designed to manage user context, memory, and interaction state across multi-turn conversations. To perform complex tasks, these agents often integrate with external systems such as SaaS applications, internal services, or enterprise data sources. When accessing these systems, the agent operates on behalf of the end user, and its actions are constrained by the user’s identity, role, and permissions as defined by the enterprise. This ensures that all data access and operations are properly scoped and compliant with organizational access controls.</t>
        <t>When using an LLM Tool, the LLM Agent is consumming an external API which has its own access control logic and policies on what conditions should be met for the access to the resources and the generation of the enriched information that the AI Agent can send return to the user who prompted it, with potential support of the LLM. Some access control conditions might require some authorization details as defined into, whithout being limited to, the examples of Rich Authorization Request <xref target="RFC9396"/>.</t>
        <t>A non normative example of such interaction would be at the functional level:</t>
        <artwork><![CDATA[
+----------+
|          |                  +--------------+
|          |---(1) prompt --->|              |                                                                                      +--------------+
|          |                  |              |-----------------------------------(2) LLM request ---------------------------------->|              |
|          |                  |              |                                                                                      |              |
|          |                  |              |<-----------------------------------(3) Tool usage -----------------------------------|              |
|  User    |                  |              |                        +--------------+                                              |              |
|          |                  |              |---(4) tool request --->|              |                                              |              |
|          |                  |              |                        |              |                           +--------------+   |              |
|          |                  |              |                        |              |---(5) service request --->|              |   |              |
|          |                  |     LLM      |                        |   LLM Tool   |                           | Service APIs |   |      LLM     |
|          |                  |    Agent     |                        |              |<--(6) service response ---|              |   |              |
|          |                  |              |                        |              |                           +--------------+   |              |
|          |                  |              |<--(7) tool response ---|              |                                              |              |
|          |                  |              |                        +--------------+                                              |              |
|          |                  |              |                                                                                      |              |
|          |                  |              |-----------------------------------(8) LLM request ---------------------------------->|              |
|          |                  |              |                                                                                      |              |
|          |                  |              |<----------------------------------(9) LLM outcome -----------------------------------|              |
|          |                  |              |                                                                                      +--------------+
|          |<-(10) response --|              |
|          |                  +--------------+
+----------+
]]></artwork>
        <t><em>Figure 2: Abstract AI Agent Use Case Flow</em></t>
        <section anchor="preconditions">
          <name>Preconditions</name>
          <ul spacing="normal">
            <li>
              <t>The LLM Agent has a registered OAuth 2.0 Client (<tt>com.example.llm-agent</tt>) with the Enterprise IdP (<tt>idp.example.com</tt>)</t>
            </li>
            <li>
              <t>The LLM Tool has a registered OAuth 2.0 Client (<tt>4960880b83dc9</tt>) with the Enterprise IdP (<tt>idp.example.com</tt>)</t>
            </li>
            <li>
              <t>The LLM Tool has a registered OAuth 2.0 Client (<tt>eb1e27d2df8b7</tt>) with External Service IdP (<tt>authorization-server.saas.net</tt>)</t>
            </li>
            <li>
              <t>The External Service APIs is protected by the Trust Domain controlled by the External Service IdP (<tt>authorization-server.saas.net</tt>)</t>
            </li>
            <li>
              <t>User already authenticated at the Enterprise IdP (<tt>idp.example.com</tt>) and delegated its authorization to the LLM Agent</t>
            </li>
            <li>
              <t>The LLM Agent is in possession of an Identity Token, an Access Token, and a Refresh Token issued by the Enterprise IdP (<tt>idp.example.com</tt>)</t>
            </li>
            <li>
              <t>We assume that the Access Token is valid for the duration of this example and possess the appropriate scopes and claims to be authorized to call the LLM Tool</t>
            </li>
          </ul>
        </section>
        <section anchor="llm-agent-receives-a-response-fromn-the-llm">
          <name>LLM Agent receives a response fromn the LLM</name>
          <t>LLM Agent receives a directive to use the LLM Tool with a specific payload and it calls the external LLM Tool provided by an Enterprise internal IT with a valid access token.</t>
          <t>```http
POST /Pay
Host: tool.example.com
Authorization: Bearer ejyfewfewfwefwefewf.e.fwefwe.fw.e.fwef</t>
          <t>to=DE02100100109307118603&amp;
amount=123.50
```</t>
        </section>
        <section anchor="llm-tool-receives-the-request">
          <name>LLM Tool receives the request</name>
          <t>LLM tool tries to call the service with the External Service APIs with the Access Token received using the JWT Bearer Authentication scheme (5) and is issued an authentication challenge.</t>
          <t>```http
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="new_authorization_needed", error_description="A new authorization request is needed"</t>
          <t>{
  "decision": false,
  "context": {
    "error_msg": "The user must be authorized to initiate payment for Merchant A ",
    "details": {
      "method": "urn:ietf:params:oauth:grant-ext:rar",
      "authorization_details": [
        {
            "type": "payment_initiation",
            "actions": [
              "initiate",
              "status",
              "cancel"
            ],
            "locations": [
              "https://example.com/payments"
            ],
            "instructedAmount": {
              "currency": "EUR",
              "amount": "123.50"
            },
            "creditorName": "Merchant A",
            "creditorAccount": {
              "iban": "DE02100100109307118603"
            },
            "remittanceInformationUnstructured": "Ref Number Merchant"
        }
      ]
    }
  }
}
```
&gt; Note: How agents discover available tools is out of scope of this specification</t>
          <t>LLM Agent fetches the external tool resource's <tt>OAuth 2.0 Protected Resource Metadata</tt> per <xref target="RFC9728"/> to dynamically discover an authorization server that can issue an access token for the resource.</t>
          <t>```http
GET /.well-known/oauth-protected-resource
Host: api.saas.net
Accept: application/json</t>
          <t>HTTP/1.1 200 Ok
Content-Type: application/json</t>
          <t>{
  "resource": "https://api.saas.net/",
  "authorization_servers": [ "https://authorization-server.saas.net" ],
  "bearer_methods_supported": [
    "header",
    "body"
  ],
  "scopes_supported": [
    "agent.tools.read",
    "agent.tools.write"
  ],
  "resource_documentation": "https://idp.saas.net/tools/resource_documentation.html"
}
```</t>
          <t>LLM Agent discovers the Authorization Server configuration per <xref target="RFC8414"/>.</t>
          <t>```http
GET /.well-known/oauth-authorization-server
Host: authorization-server.saas.net
Accept: application/json</t>
          <t>HTTP/1.1 200 Ok
Content-Type: application/json</t>
          <t>{
  "issuer": "https://authorization-server.saas.net",
  "authorization_endpoint": "https://authorization-server.saas.net/oauth2/authorize",
  "token_endpoint": "https://authorization-server.saas.net/oauth2/token",
  "jwks_uri": "https://authorization-server.saas.net/oauth2/keys",
  "registration_endpoint": "authorization-server.saas.net/oauth2/register",
  "scopes_supported": [
    "agent.read", "agent.write"
  ],
  "response_types_supported": [
    "code"
  ],
  "grant_types_supported": [
    "authorization_code", "refresh_token"
  ]
}
```</t>
          <t>LLM Agent has learned all necessary endpoints and supported capabilites to obtain an access token for the external tool.</t>
        </section>
        <section anchor="llm-tool-obtains-a-set-of-token-from-authorization-server-protecting-the-api">
          <name>LLM Tool obtains a set of token from Authorization Server protecting the API</name>
          <t>The LLM tool redirects the LLM Agent for an authorization request:</t>
          <t><tt>http
GET /oauth2/authorize?response_type=code
   &amp;client_id=eb1e27d2df8b7
   &amp;state=af0ifjsldkj
   &amp;redirect_uri=https%3A%2F%2Ftool.example.com%2Fcb
   &amp;code_challenge_method=S256
   &amp;code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bwc-uCHaoeK1t8U
   &amp;authorization_details=%5B%7B%22type%22:%20%22payment_initiation
   %22,%22actions%22:%20%5B%22initiate%22,%22status%22,%22cancel%22
   %5D,%22locations%22:%20%5B%22https://example.com/payments%22%5D,
   %22instructedAmount%22:%20%7B%22currency%22:%20%22EUR%22,%22amount
   %22:%20%22123.50%22%7D,%22creditorName%22:%20%22Merchant%20A%22,
   %22creditorAccount%22:%20%7B%22iban%22:%20%22DE02100100109307118603
   %22%7D,%22remittanceInformationUnstructured%22:%20%22Ref%20Number
   %20Merchant%22%7D%5D
Host: authorization-server.saas.net
</tt></t>
          <ul empty="true">
            <li>
              <t>We don't describe the wy the user is authenticated as it follows Rich Authorization Request <xref target="RFC9396"/></t>
            </li>
          </ul>
          <t>The LLM Tool will receive an Authorization Code that it will be able to exchange for a set of JWTs issued by the Authorization Server protecting the API.</t>
          <t>The LLM Tool can then make a new request to the External Service APIs (5). If it can meet the APIs Access Control requirement, the flow will follow with a response (6).</t>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
