<?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.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lombardo-oauth-step-up-authz-challenge-proto-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <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-01"/>
    <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>
    <author fullname="Yaron Zehavi">
      <organization>Raiffeisen Bank International</organization>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>yaron.zehavi@rbinternational.com</email>
      </address>
    </author>
    <author fullname="George Fletcher">
      <organization>Practical Identity</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>george@practicalidentity.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="28"/>
    <area/>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>security</keyword>
    <keyword>trust</keyword>
    <abstract>
      <?line 148?>

<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 154?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In simple authorization scenarios, an authorization server will determine what claims to embed in the tokens 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. <xref target="RFC9470"/> helped improve the feedback a resource server can provide to a client in case the user authentication method, authentication class, or the freshness of the authentication event did not meet the requirements expexted by the resource server. Although those approaches are viable in many situations, it falls short in several important circumstances, for instance, in <xref target="FAPI2.0-Security-Profiles"/> or <xref target="hl7.fhir.uv.smart-app-launch"/> regulated APIs when they require peculiar client authentication mechanisms to be enforced or transaction specific details to be present in the token. These requirements may depend upon resource access rules or policies implemented at 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>failed_authorization</tt> and <tt>insufficient_authorization</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 its authorization requirements.</t>
      <t>The client can then use this information to reach back to the authorization server with a new authorization request that specifies the additional authorization details required for issuing tokens useable at the resource. This document does not describe any new methods to perform this additional 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"/> for this purpose. These extensions will make it possible to implement interoperable step up authorization flows 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 the client obtained an access token for the protected resource before the sequence described below takes place.</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; it therefore denies the request and returns a challenge describing (using a combination of error code and payload details) what authorization requirements must be met to allow the request. It is possible here for the resource server to rely on the responses from an external policy decision point.</t>
        </li>
        <li>
          <t>The client redirects 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>A new and adequate authorization sequence takes place between the user agent, the client and the authorization server, resulting in the issuance of a new access token that encapsulates the authorization level, or ceremonies requested by the resource server. The authorization server uses the payload for the resource server's response forwarded by the client to initiate the right grant flow type or to ensure that the authorization details are met. The authorization server may here also contact an external policy decision point to request evaluation of complex business access policies. The newly minted access token contains or references information about the authorization elements required, including but not limited to the claims defined in <xref target="I-D.lombardo-oauth-client-extension-claims"/>.</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>Such protocol flow is coherent with the expectations of <xref target="FAPI2.0-Security-Profiles"/> and section 2.1.10.2.1 of <xref target="hl7.fhir.uv.smart-app-launch"/>.</t>
      <t>The validation operations mentioned in steps 2 and 6 imply that the resource server has a way of evaluating the authorization requirements that occurred during the ceremonies that led to the issuance of the access token. 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 does not describe how the resource server performs this assessment of the authorization state, whether the access token is a JSON Web Token (JWT) <xref target="RFC9068"/> or is validated via introspection <xref target="RFC7662"/> or whether the resource provider is performing this assessment natively or by offloading the assessment to a policy decision point as defined in <xref target="D-OpenID-AuthZEN"/>, <xref target="XACML"/> or NIST's ABAC <xref target="SP.800-162"/>. This document rather describes how the resource provider tells the client what type of authorization it needs to get from the authorization server for a request.</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>As for <xref target="RFC9470"/>, 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 algorithms 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. Furthermore, OAuth 2.0 <xref target="RFC6749"/> assumes access tokens are treated as opaque by clients. The token format might thus 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="step-up-authorization-challenge">
      <name>Step-Up Authorization Challenge</name>
      <section anchor="http-error-status-code">
        <name>HTTP Error Status Code</name>
        <t>The resource server responds with a <tt>403</tt> HTTP status code using the Bearer authentication scheme's error parameter (from <xref target="RFC6750"/>) when a request compliant with this specification does not meet its authorization state requirements.</t>
      </section>
      <section anchor="www-authenticate-header-error-code">
        <name>WWW-Authenticate Header Error Code</name>
        <t>Following other standards like OAuth 2.0 Demonstrating Proof of Possession (DPoP)<xref target="RFC9449"/> and in OAuth 2.0 Step Up Authentication Challenge Protocol<xref target="RFC9470"/>, the error code of the <tt>WWW-Authenticate</tt> HTTP Header <bcp14>MUST</bcp14> be set to <tt>insufficient_authorization</tt>.</t>
        <t>This will signal that the authorization mechanisms used for the issuance of the access token presented with the request do not meet the authorization state requirements of the protected resource. The client is provided with a response that describes which new authorization mechanisms and details <bcp14>SHOULD</bcp14> be used in order to gain access to the requested resource. The client <bcp14>SHOULD</bcp14> then initiate a new ceremony with the authorization server, that comply with the stated resource requirements.</t>
        <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 are out of scope for this document.</t>
      </section>
      <section anchor="www-authenticate-header-description">
        <name>WWW-Authenticate Header Description</name>
        <t>The description field of the <tt>WWW-Authenticate</tt> HTTP Header <bcp14>MUST</bcp14> be set to <tt>The authorization level requires more details</tt>.</t>
      </section>
      <section anchor="www-authenticate-header-challenge">
        <name>WWW-Authenticate Header Challenge</name>
        <t>This document specifies two types of challenge that <bcp14>MAY</bcp14> be used individually or conjointly.</t>
        <section anchor="resourcemetadatauri-challenge">
          <name><tt>resource_metadata_uri</tt> Challenge</name>
          <t>The resource server <bcp14>MAY</bcp14> return a challnge with the key <tt>resource_metadata_uri</tt>. When this challenge is present, its value <bcp14>MUST</bcp14> be set to the OAuth2 Protected Resource Metadata Endpoint URI for the resource server as defined in <xref target="RFC9728"/>.</t>
          <t>The metadata endpoint <bcp14>MAY</bcp14> provide information on authorization details expected by the resource server.</t>
          <t>Note: the logic through which the client determines how to use any information on authorization details expected by the resource server fron the metadata endpoint and how to map it to a viable authorization request for the authorization server is out of the scope of this document.</t>
        </section>
        <section anchor="bodyinstructions-challenge">
          <name><tt>body_instructions</tt> Challenge</name>
          <t>The resource server <bcp14>MAY</bcp14> return a challnge with the key <tt>body_instructions</tt> When this challenge is present, its value <bcp14>MUST</bcp14> be set to <tt>false</tt> if no body is associated to the response from the resource server, or <tt>true</tt> if a body is associated to the response from the resource server.</t>
          <section anchor="challenge-associated-body-content">
            <name>Challenge Associated Body Content</name>
            <t>If a body is attached to the to the response from the resource server, it <bcp14>MUST</bcp14> be formatted as an AuthZEN <xref target="D-OpenID-AuthZEN"/> response which <bcp14>MUST</bcp14> contain the following keys:</t>
            <dl>
              <dt><tt>decision</tt>:</dt>
              <dd>
                <t><em><bcp14>REQUIRED</bcp14></em> - <bcp14>MUST</bcp14> be set to <tt>false</tt>.</t>
              </dd>
              <dt><tt>context</tt>:</dt>
              <dd>
                <t><em><bcp14>REQUIRED</bcp14></em> - JSON structure as decribed below</t>
              </dd>
            </dl>
            <t>The <tt>context</tt> <bcp14>MAY</bcp14> contain the following information</t>
            <dl>
              <dt><tt>error_msg</tt>:</dt>
              <dd>
                <t><em><bcp14>OPTIONAL</bcp14></em> - a human readable String that summarize the details required</t>
              </dd>
              <dt><tt>details</tt>:</dt>
              <dd>
                <t><em><bcp14>OPTIONAL</bcp14></em> - a JSON structure representing the expected parameters to be passed by the client to the authorization server if a new authorization request is attempted. This JSON structure <bcp14>MUST</bcp14> be formatted using the syntax defined by <xref target="eKYC.IDA"/></t>
              </dd>
            </dl>
          </section>
        </section>
      </section>
      <section anchor="non-normative-examples-of-step-up-authorization-challenge">
        <name>Non Normative Examples Of Step-Up Authorization Challenge</name>
        <t>The following are non normative examples of some step-up authorization challenges:</t>
        <section anchor="resourcemetadatauri-challenge-and-bodyinstructions-challenge-expressing-a-missing-expected-access-token-scope">
          <name><tt>resource_metadata_uri</tt> challenge and <tt>body_instructions</tt> challenge expressing a missing expected access token scope:</name>
          <artwork><![CDATA[
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_authorization", error_description="The authorization level is not met", resource_metadata_uri="https://www.example.com/.well-known/oauth-protected-resource", body_instructions=true

{
  "decision": false,
  "context": {
        "error_msg": "Missing expected access token scope",
        "details": [{
    "loc": "/scope",
    "method": "simple",
    "values": ["resource:read", "resource:write"]
    }]
  }
}
]]></artwork>
        </section>
        <section anchor="bodyinstructions-challenge-expressing-missing-authorizationdetails">
          <name><tt>body_instructions</tt> challenge expressing missing authorization_details:</name>
          <artwork><![CDATA[
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_authorization", error_description="The authorization level is not met",  body_instructions=true

{
    "decision": false,
    "context": {
        "error_msg": "Missing authorization_details",
        "details": [{
      "loc": "/authorization_details",
      "method": "simple",
      "value": [{
        "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"
      }]
    }]
  }
}
]]></artwork>
        </section>
        <section anchor="bodyinstructions-challenge-expressing-missing-email-as-an-expected-access-token-claim">
          <name><tt>body_instructions</tt> challenge expressing missing <tt>email</tt> as an expected access token claim</name>
          <artwork><![CDATA[
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_authorization", error_description="The authorization level is not met",  body_instructions=true

{
    "decision": false,
    "context": {
        "error_msg": "Missing expected access token scope",
        "details": [{
      "loc": "/email",
      "method": "exists"
    }]
  }
}
]]></artwork>
        </section>
        <section anchor="bodyinstructions-challenge-expressing-missing-gty-ccr-and-cmr-as-an-expected-access-token-claim">
          <name><tt>body_instructions</tt> challenge expressing missing <tt>gty</tt>, <tt>ccr</tt>, and <tt>cmr</tt> as an expected access token claim</name>
          <artwork><![CDATA[
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_authorization", error_description="The authorization level is not met",  body_instructions=true

{
    "decision": false,
    "context": {
        "error_msg": "Missing token claims - gty, ccr, cmr",
        "details": [{
    "loc": "/gty",
    "method": "exists"
    }, {
    "loc": "/ccr",
    "method": "exists"
    }, {
    "loc": "/cmr",
    "method": "exists"
    }]
  }
}
]]></artwork>
          <ul empty="true">
            <li>
              <t>Note: <tt>gty</tt>, <tt>ccr</tt>, and <tt>cmr</tt> are claims defined by <xref target="I-D.lombardo-oauth-client-extension-claims"/></t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="client-action-following-a-setp-up-auhtorization-challenge">
      <name>CLient Action Following A Setp-Up Auhtorization Challenge</name>
      <t>This document does not define how the client should respond to a step-up authorization challenge. It is up to the logic of the client to decide what is the most appropriate grant type flow to start in order to try to obtain a new set of tokens from the authorization server.</t>
    </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="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 flows, a Rich Authorization Request <xref target="RFC9396"/>, a Push Authorization Request <xref target="RFC9126"/>, or a JWT-Secured Authorization Request <xref target="RFC9101"/> as it sees fit. 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 document. It is therefore 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="resource-server-metadata">
      <name>Resource Server Metadata</name>
      <t>Resource servers can advertise their support of this specification by including in their OAuth protected resource metadata document, as defined in <xref target="RFC9728"/>, the value <tt>step_up_authorization_supported</tt>. The presence of <tt>step_up_authorization_supported</tt> in the resource server metadata document signals that the resource server <bcp14>MAY</bcp14> honor the issuance of step-up authorization challenge if its sees fit.</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>OAuth2 Protected Resource Metadata <xref target="RFC9728"/>,</t>
        </li>
        <li>
          <t>Rich Authorization Request <xref target="RFC9396"/>,</t>
        </li>
        <li>
          <t>Push Authorization Request <xref target="RFC9126"/>,</t>
        </li>
        <li>
          <t>JWT-Secured Authorization Request <xref target="RFC9101"/> and</t>
        </li>
        <li>
          <t>AuthZEN <xref target="D-OpenID-AuthZEN"/></t>
        </li>
      </ul>
      <section anchor="scope">
        <name>Scope</name>
        <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.</t>
        <t>This specification does not attempt to define the mechanics by which extended authorization requests are processed and vlidated by the authorization server.</t>
      </section>
      <section anchor="validation-of-token">
        <name>Validation Of Token</name>
        <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>
      </section>
      <section anchor="step-up-authorization-challenge-payload">
        <name>Step-Up Authorization Challenge Payload</name>
        <t>Following this document, response from the resource server to the client 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.</t>
        <t>Implementers should use care in determining what to disclose in the challenge and in what circumstances.</t>
      </section>
    </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="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="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="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </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="eKYC.IDA" target="https://openid.bitbucket.io/ekyc/openid-connect-advanced-syntax-for-claims.html">
          <front>
            <title>OpenID Connect Advanced Syntax for Claims (ASC) 1.0</title>
            <author initials="D. D." surname="Fett" fullname="Dr Daniel Fett" role="editor">
              <organization>Authlete</organization>
            </author>
            <date>n.d.</date>
          </front>
        </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="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="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="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.ietf-oauth-v2-1">
          <front>
            <title>The OAuth 2.1 Authorization Framework</title>
            <author fullname="Dick Hardt" initials="D." surname="Hardt">
              <organization>Hellō</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
              <organization>SPRIND</organization>
            </author>
            <date day="28" month="May" year="2025"/>
            <abstract>
              <t>   The OAuth 2.1 authorization framework enables an application to
   obtain limited access to a protected resource, either on behalf of a
   resource owner by orchestrating an approval interaction between the
   resource owner and an authorization service, or by allowing the
   application to obtain access on its own behalf.  This specification
   replaces and obsoletes the OAuth 2.0 Authorization Framework
   described in RFC 6749 and the Bearer Token Usage in RFC 6750.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-v2-1-13"/>
        </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>
        <reference anchor="FAPI2.0-Security-Profiles" target="https://openid.net/specs/fapi-2_0-security-02.html">
          <front>
            <title>FAPI 2.0 Security Profile</title>
            <author initials="D. D." surname="Fett" fullname="Dr Daniel Fett" role="editor">
              <organization>Authlete</organization>
            </author>
            <author initials="D." surname="Tonge" fullname="Dave Tonge" role="editor">
              <organization>Moneyhub Financial Technology</organization>
            </author>
            <author initials="J." surname="Heenan" fullname="Joseph Heenan" role="editor">
              <organization>Authlete</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="hl7.fhir.uv.smart-app-launch" target="https://www.hl7.org/fhir/smart-app-launch/app-launch.html#obtain-authorization-code">
          <front>
            <title>HL7 FHIR SMART App Launch</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP" target="https://modelcontextprotocol.io/specification/2025-06-18/basic">
          <front>
            <title>Model Context Protocol</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 438?>

<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>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/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"
          }
        ]
      }
    }
  }</t>
          <ul empty="true">
            <li>
              <t>Note: How agents discover available tools is out of scope of this specification and this example</t>
            </li>
          </ul>
          <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>
          <artwork><![CDATA[
GET /.well-known/oauth-protected-resource
Host: api.saas.net
Accept: application/json

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

{
  "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"
}
]]></artwork>
          <t>LLM Agent discovers the Authorization Server configuration per <xref target="RFC9728"/>.</t>
          <artwork><![CDATA[
GET /.well-known/oauth-authorization-server
Host: authorization-server.saas.net
Accept: application/json

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

{
  "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"
  ]
}
]]></artwork>
          <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>
          <artwork><![CDATA[
GET /oauth2/authorize?response_type=code
  &client_id=eb1e27d2df8b7
  &state=af0ifjsldkj
  &redirect_uri=https%3A%2F%2Ftool.example.com%2Fcb
  &code_challenge_method=S256
  &code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bwc-uCHaoeK1t8U
  &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
]]></artwork>
          <ul empty="true">
            <li>
              <t>We don't describe the way 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>The authors wants to acknowledge the support and work of the following indivisuals: Grese Hyseni (Raiffeisen Bank International, grese.hyseni@rbinternational.com), Henrik Kroll (Raiffeisen Bank International, henrik.kroll@rbinternational.com).</t>
      <t>The authors wants also to recognize the trail blazers and thought leaders that created the ecosystem without which this draft proposal would not be able to solve customer pain points and secure usage of digital services, especially without being limited to: Vittorio Bertocci†, Brian Campbell (Ping Identity), Justin Richer (MongoDB), Aaron Parecki (Okta), Pieter Kasselman (SPRL), Dr Mike Jones (Self-Issued Consulting, LLC), Dr Daniel Fett (Authlete).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
