<?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-02" 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-02"/>
    <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="30"/>
    <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 expected 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 one new error code, <tt>insufficient_authorization</tt>, which can be used by resource servers to signal to clients that the access token  presented with the request does not meet the authorization requirements of the resource server. This document also introduces authorization step-up challenges and 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 Authorization 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 particular 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 challenge 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 from 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 challenge 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 described 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-step-up-authorization-challenge">
      <name>Client Action Following A Step-Up Authorization 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="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 validated 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="28" month="June" 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: its authentication methods as long as
   the grant flow and the 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-01"/>
        </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 430?>

<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 consuming 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, without 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-from-the-llm">
          <name>LLM Agent receives a response from 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 eyJhbGciOiJIUzI1NiIsInR5cCI6ImF0K2p3dCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.S9QVKeqooCU7nRahQsPhnV7xOrkqsKB7YKQEReyaWT8</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 individuals: 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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
1q+ePfr51R8Pz9Vcvrt8jMvN06fN1Y7/AC+5JPMp12MWm3/JRqTZT+84Je83
2Zh5RufgPCKyRnghGRsljntdInszm38UARMvBvGVM7t82lmgr0REoy0jmjsL
vaZFxQ8iY2Ht26rKt0TdVXLbeN+PCpvr3vrLj2eYrggQl3UtqG1rqGsrV7Rd
2pChvYKyzN7uYKup7iWRUtTQClc95pW5eXVmRUHZLEv28Mck9+jwit6j0q89
qrnByq+9TJYq0ZrLrct1z9Xi3P+VpdT1YZbWVq8c/O+l1kX/b1Jq7T5XKyBL
VZAv0jubM8J8XkqlUbf4e+Z8Z0Ya1wubmutzOC9Q6GhfPw7pJ6crms2665RX
+J0W12v9LO815naKegxKRM4TOcGfCDDpWl7Egp8L46Pr0tgvC6/29y5GRKw9
PwS9uc6JIS4zJtUqp5GzAelxn65+2vMzbVsfNR7bo05WPu9ub4tT/vFVc1ay
e0m/Sd/cz4lHd2jJ+114H4atQuZVSpW4Jgu52uu5zKRtFwzcHpCyuDK/S1PU
PZWERHtMx8t9SYmlz5Zgi9HYeFs0ClFqj6iyx0eUmt/xaaXa4O6EmE00s4z1
8IVWq8MXjbXV3Il+I7Jta4oLSrf0pxfXdoJmG6LryA9L1Lyc2pq2xKe3ZTv2
tyBA4qisRH5LiWgBObqfKFl3IEbPrmtUqL82MfXXj2h+XMWO9vHuRuOhwi8e
B88Qtz0yRO83q692rbGs79z+Ip6xB/r422L+ID/niq53WDQgXgdT70sW0fKO
5W2mYeiIIXmVV4xrO26dszByEIOsoct7wey2N8TN3Y0B7PO5yfE3heQAq8DZ
WLfl5wskfkkv9SoOAffVVFRS1K2zP9jI5EYzWHserH8+A+x8iPLl5J6qTBt0
lzGg9zzxUKX5P5Q276n5oVr8+weub7qKwqelyIp9TZUnT+VwOxp+1HF489G+
sCDSOVqi9+/v9b/fPYL/Vd1GeBQM3Hww95VzPoxmeHqx++Bhc4unr3a7cR48
vgf7cn+8HTy5e3h4sX+VHZ5cvrw3uAu6s/0XMlWvdvLHb+0IjXb20+8fPPv+
0bPvd3cRB/Cfve93t+E/dbvaDAPvOvB/Y1PbDg9wBGtKmyZsPZsvbDDDBzvM
gwN87Ozj0kDLzGJ4jX0LaKpWsB2JFmWN32JhYALbJVDzYiDTgE1gnOYRgeib
ukUraz/Ctz6OVwxTMXdL4KCVW4zRbOsWIxkAVpq2xYhg4MIHNnHdONsFrDgk
YG9tDQg27zslwjT5nXdFMTIfXgjtKlAiXQ3P0YEGPruv16r0KDjdxHxiF1Gw
t1J4FY1pWFxJaq/qsxfWqU/mejq+ns3InpfvLnUl/LamDOpVQHM/o0g/pFf9
neAlgYyNB5s9cTzkmFVSXL5EL01wY9/U4ngHE7hyhg4K0VIZq7XLsjYe8oVz
/cCWLRK3tP6ylxA1qPBpm2IF7V94Qbzxmq6e1Xz3bFHwyGWaXDeECoJ+388U
EPnXaNjbivSeeI71/eLFXKskEhvnEu9ujOCLeCaTG/zpYkQJV+Pg9e/QuDem
xj9mg8h/i9y+2REvsDTqRrzCYPLK8cbUuHeDjRvH6zUtmn5TgM7UBOkosRd5
YM0cUFQsP9tjJHyPLB/vYDMV/SFzxyLpwSDlwj1X/2TvBMIKzUwO6bbSaarp
pxKxSAlrVD2i1Wl8ixd16Tyd8Hkac621tvfBY9qEy0nw98ajEf7yn1doSOcG
InLnFpVg7YmfQIykeDHlM5XlaRBE//Uv/9YRz7IIyHEfJO1AIarPsJsNb8NG
vASoABzkYrwg8CRNRunBM3jRlxkwzhm4MsENbPnpTS7h6VlEFwm+wmtKYrw7
ZePi7Pw1vDgApxtv6XuZ4sVIGxcqHnaPmSOxspXvhO0Ao+1z4wOZRCoWRyrP
xQYyK/7aPWzk/wN0Q+4H9Y0AAA==

-->

</rfc>
