<?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-zehavi-oauth-app2app-browserless-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="Native OAuth App2App">OAuth 2.0 App2App Browserless Flow</title>
    <seriesInfo name="Internet-Draft" value="draft-zehavi-oauth-app2app-browserless-04"/>
    <author fullname="Yaron Zehavi">
      <organization>Raiffeisen Bank International</organization>
      <address>
        <email>yaron.zehavi@rbinternational.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="24"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>native-apps</keyword>
    <keyword>oauth</keyword>
    <keyword>app2app</keyword>
    <keyword>browserless</keyword>
    <abstract>
      <?line 83?>

<t>This document describes a protocol connecting 2 native apps via the OAuth <xref target="App2App"/> pattern, to achieve native user navigation (no web browser required), regardless of any number of OAuth brokers federating the request across trust domains.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaron-zehavi.github.io/oauth-app2app-browserless/draft-zehavi-oauth-app2app-browserless.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-zehavi-oauth-app2app-browserless/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaron-zehavi/oauth-app2app-browserless"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document, <em>OAuth 2.0 App2App Browserless Flow</em> (Native App2App), presents a protocol enabling native OAuth <xref target="App2App"/> <strong>browser-less</strong> navigation across apps.</t>
      <t>It addresses the challenges presented when using a web browser to navigate through <strong>one or more</strong> Brokering Authorization Servers:</t>
      <ul spacing="normal">
        <li>
          <t>Such <em>OAuth Brokers</em> are required when <em>Client App</em> is not an OAuth client of the <em>User-Interacting Authorization Server</em> and so they federate the flow across trust domains.</t>
        </li>
        <li>
          <t>Since no app owns <em>OAuth Brokers'</em> urls, App2App flows involving brokers require a web browser, which degrades the user experience.</t>
        </li>
      </ul>
      <t>This document specifies:</t>
      <ul spacing="normal">
        <li>
          <t>A new parameter to the authorization endpoint: <strong>native_callback_uri</strong>.</t>
        </li>
        <li>
          <t>A new scope value: <strong>app2app</strong>.</t>
        </li>
        <li>
          <t>A new error_description value: <strong>native_callback_uri_not_claimed</strong>.</t>
        </li>
      </ul>
      <section anchor="difference-from-openidnative-sso">
        <name>Difference from OpenID.Native-SSO</name>
        <t><xref target="OpenID.Native-SSO"/> also offers a native SSO flow across apps. However, it is limited to apps:</t>
        <ul spacing="normal">
          <li>
            <t>Published by the same issuer, therefore can securely share information.</t>
          </li>
          <li>
            <t>Using the same Authorization Server.</t>
          </li>
        </ul>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>In addition to the terms defined in referenced specifications, this document uses
the following terms:</t>
        <dl>
          <dt>"OAuth":</dt>
          <dd>
            <t>In this document, "OAuth" refers to OAuth 2.0, <xref target="RFC6749"/> and <xref target="RFC6750"/> as well as <xref target="OpenID"/>, both in their <strong>authorization code flow</strong>.</t>
          </dd>
          <dt>"PKCE":</dt>
          <dd>
            <t>Proof Key for Code Exchange (PKCE) <xref target="RFC7636"/>, a mechanism
to prevent various attacks on OAuth authorization codes.</t>
          </dd>
          <dt>"OAuth Broker":</dt>
          <dd>
            <t>A component acting as an Authorization Server for its clients, as well as an OAuth Client towards <em>Downstream Authorization Servers</em>.
Brokers are used to facilitate a trust relationship when there is no direct relation between an OAuth Client and the final Authorization Server where end-user authenticates and authorizes.
This pattern is in current use to establish trust in federation use cases in Academia and in the business world, across corporations.
Note: It is possible OAuth Brokers will be superseded in the future by <xref target="OpenID.Federation"/>, offering dynamic trust establishment.</t>
          </dd>
          <dt>"Client App":</dt>
          <dd>
            <t>A Native app implementing "OAuth 2.0 for Native Apps" <xref target="RFC8252"/> as an OAuth client of <em>Initial Authorization Server</em>. Client's redirect_uri is claimed by the app.</t>
          </dd>
          <dt>"Initial Authorization Server":</dt>
          <dd>
            <t>The Authorization Server of <em>Client App</em> which acts as an <em>OAuth Broker</em> as an OAuth client of a <em>Downstream Authorization Server</em>.</t>
          </dd>
          <dt>"Downstream Authorization Server":</dt>
          <dd>
            <t>An Authorization Server which may be an <em>OAuth Broker</em> or a <em>User-Interacting Authorization Server</em>.</t>
          </dd>
          <dt>"User-Interacting Authorization Server":</dt>
          <dd>
            <t>An Authorization Server which interacts with end-user. The interaction may be interim navigation (e.g: user input guides where to redirect), or user authentication and request authorization.</t>
          </dd>
          <dt>"User-Interacting App":</dt>
          <dd>
            <t>Native App of <em>User-Interacting Authorization Server</em>.</t>
          </dd>
          <dt>"Deep Link":</dt>
          <dd>
            <t>A url claimed by a native application.</t>
          </dd>
          <dt>"Native Callback uri":</dt>
          <dd>
            <t><em>Client App's</em> redirect_uri, claimed as a deep link. This deep link is invoked by <em>User-Interacting App</em> to natively return to <em>Client App</em>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="challenge-of-app2app-with-oauth-brokers">
      <name>Challenge of App2App with OAuth Brokers</name>
      <section anchor="app2app-with-oauth-brokers-requires-a-web-browser">
        <name>App2App with OAuth Brokers requires a web browser</name>
        <figure anchor="app2app-w-brokers-and-browser">
          <name>App2App with brokers and browser (redirects back to Client not depicted)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="696" viewBox="0 0 696 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,48 L 24,128" fill="none" stroke="black"/>
                <path d="M 24,240 L 24,304" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,160" fill="none" stroke="black"/>
                <path d="M 120,48 L 120,128" fill="none" stroke="black"/>
                <path d="M 136,96 L 136,152" fill="none" stroke="black"/>
                <path d="M 136,168 L 136,224" fill="none" stroke="black"/>
                <path d="M 144,240 L 144,304" fill="none" stroke="black"/>
                <path d="M 152,128 L 152,192" fill="none" stroke="black"/>
                <path d="M 232,128 L 232,192" fill="none" stroke="black"/>
                <path d="M 296,128 L 296,192" fill="none" stroke="black"/>
                <path d="M 416,128 L 416,192" fill="none" stroke="black"/>
                <path d="M 480,128 L 480,208" fill="none" stroke="black"/>
                <path d="M 560,208 L 560,272" fill="none" stroke="black"/>
                <path d="M 648,128 L 648,208" fill="none" stroke="black"/>
                <path d="M 672,96 L 672,224" fill="none" stroke="black"/>
                <path d="M 688,32 L 688,320" fill="none" stroke="black"/>
                <path d="M 8,32 L 688,32" fill="none" stroke="black"/>
                <path d="M 24,48 L 120,48" fill="none" stroke="black"/>
                <path d="M 136,96 L 672,96" fill="none" stroke="black"/>
                <path d="M 24,128 L 120,128" fill="none" stroke="black"/>
                <path d="M 152,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 296,128 L 416,128" fill="none" stroke="black"/>
                <path d="M 480,128 L 648,128" fill="none" stroke="black"/>
                <path d="M 88,160 L 144,160" fill="none" stroke="black"/>
                <path d="M 240,160 L 288,160" fill="none" stroke="black"/>
                <path d="M 424,160 L 472,160" fill="none" stroke="black"/>
                <path d="M 152,192 L 232,192" fill="none" stroke="black"/>
                <path d="M 296,192 L 416,192" fill="none" stroke="black"/>
                <path d="M 480,208 L 648,208" fill="none" stroke="black"/>
                <path d="M 136,224 L 552,224" fill="none" stroke="black"/>
                <path d="M 568,224 L 672,224" fill="none" stroke="black"/>
                <path d="M 24,240 L 144,240" fill="none" stroke="black"/>
                <path d="M 152,272 L 560,272" fill="none" stroke="black"/>
                <path d="M 24,304 L 144,304" fill="none" stroke="black"/>
                <path d="M 8,320 L 688,320" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="480,160 468,154.4 468,165.6" fill="black" transform="rotate(0,472,160)"/>
                <polygon class="arrowhead" points="296,160 284,154.4 284,165.6" fill="black" transform="rotate(0,288,160)"/>
                <polygon class="arrowhead" points="160,272 148,266.4 148,277.6" fill="black" transform="rotate(180,152,272)"/>
                <polygon class="arrowhead" points="152,160 140,154.4 140,165.6" fill="black" transform="rotate(0,144,160)"/>
                <g class="text">
                  <text x="76" y="84">Client</text>
                  <text x="388" y="84">Mobile</text>
                  <text x="448" y="84">Browser</text>
                  <text x="72" y="100">App</text>
                  <text x="348" y="148">Downstream</text>
                  <text x="560" y="148">User-</text>
                  <text x="192" y="164">Initial</text>
                  <text x="360" y="164">Authorization</text>
                  <text x="564" y="164">Authenticating</text>
                  <text x="80" y="180">Authorization</text>
                  <text x="188" y="180">Broker</text>
                  <text x="264" y="180">Auth.</text>
                  <text x="336" y="180">Servers</text>
                  <text x="448" y="180">Auth.</text>
                  <text x="560" y="180">Authorization</text>
                  <text x="56" y="196">Request</text>
                  <text x="260" y="196">Req.</text>
                  <text x="444" y="196">Req.</text>
                  <text x="556" y="196">Server</text>
                  <text x="88" y="260">User-</text>
                  <text x="84" y="276">Authenticating</text>
                  <text x="88" y="292">App</text>
                  <text x="308" y="292">Deep</text>
                  <text x="348" y="292">Link</text>
                  <text x="324" y="340">Mobile</text>
                  <text x="380" y="340">Device</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------------------------------------------------------------------------------------+
| +-----------+                                                                      |
| |           |                                                                      |
| |   Client  |                              Mobile Browser                          |
| |    App    | +------------------------------------------------------------------+ |
| |           | |                                                                  | |
| +-----------+ | +---------+       +--------------+       +--------------------+  | |
|         |     | |         |       | Downstream   |       |       User-        |  | |
|         +------>| Initial |------>| Authorization|------>|   Authenticating   |  | |
|  Authorization| | Broker  | Auth. | Servers      | Auth. |   Authorization    |  | |
|  Request      | +---------+ Req.  +--------------+ Req.  |      Server        |  | |
|               |                                          +---------+----------+  | |
|               +----------------------------------------------------|-------------+ |
| +--------------+                                                   |               |
| |     User-    |                                                   |               |
| |Authenticating|<--------------------------------------------------+               |
| |      App     |                  Deep Link                                        |
| +--------------+                                                                   |
+------------------------------------------------------------------------------------+
                                     Mobile Device
]]></artwork>
          </artset>
        </figure>
        <t>Since no native app claims <em>OAuth Brokers'</em> urls, OAuth requests and redirect_uri responses to and from <em>OAuth Brokers</em> are handled by a web browser as the User Agent.</t>
      </section>
      <section anchor="impact-of-using-a-web-browser">
        <name>Impact of using a web browser</name>
        <t>Using a web browser may degrade the user experience in several ways:</t>
        <ul spacing="normal">
          <li>
            <t>Some browser's support for deep links is limited by design, or by the settings used.</t>
          </li>
          <li>
            <t>The browser may prompt end-user for consent before opening deep links, introducing additional friction.</t>
          </li>
          <li>
            <t>Browser's loading of urls and redirecting may be noticeable by end-user, rendering the UX less smooth.</t>
          </li>
          <li>
            <t>App developers cannot control which browser will handle the response redirect_uri. This poses a risk that necessary cookies used to bind session identifiers to the user agent (nonce, state or PKCE verifier) will be unavailable, which may break the flow.</t>
          </li>
          <li>
            <t>After the flow is complete, "orphan" browser tabs might remain. While they do not directly impact the flow, they can be regarded as unnecessary "clutter".</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="app2web-with-brokers">
      <name>App2Web with brokers</name>
      <figure anchor="app2web-w-brokers">
        <name>App2Web with brokers (redirects back to Client not depicted)</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="696" viewBox="0 0 696 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,304" fill="none" stroke="black"/>
              <path d="M 24,48 L 24,128" fill="none" stroke="black"/>
              <path d="M 88,136 L 88,160" fill="none" stroke="black"/>
              <path d="M 120,48 L 120,128" fill="none" stroke="black"/>
              <path d="M 136,96 L 136,152" fill="none" stroke="black"/>
              <path d="M 136,168 L 136,288" fill="none" stroke="black"/>
              <path d="M 152,128 L 152,192" fill="none" stroke="black"/>
              <path d="M 232,128 L 232,192" fill="none" stroke="black"/>
              <path d="M 296,128 L 296,192" fill="none" stroke="black"/>
              <path d="M 416,128 L 416,192" fill="none" stroke="black"/>
              <path d="M 480,128 L 480,208" fill="none" stroke="black"/>
              <path d="M 496,208 L 496,272" fill="none" stroke="black"/>
              <path d="M 632,208 L 632,272" fill="none" stroke="black"/>
              <path d="M 648,128 L 648,208" fill="none" stroke="black"/>
              <path d="M 672,96 L 672,288" fill="none" stroke="black"/>
              <path d="M 688,32 L 688,304" fill="none" stroke="black"/>
              <path d="M 8,32 L 688,32" fill="none" stroke="black"/>
              <path d="M 24,48 L 120,48" fill="none" stroke="black"/>
              <path d="M 136,96 L 672,96" fill="none" stroke="black"/>
              <path d="M 24,128 L 120,128" fill="none" stroke="black"/>
              <path d="M 152,128 L 232,128" fill="none" stroke="black"/>
              <path d="M 296,128 L 416,128" fill="none" stroke="black"/>
              <path d="M 480,128 L 648,128" fill="none" stroke="black"/>
              <path d="M 88,160 L 144,160" fill="none" stroke="black"/>
              <path d="M 240,160 L 288,160" fill="none" stroke="black"/>
              <path d="M 424,160 L 472,160" fill="none" stroke="black"/>
              <path d="M 152,192 L 232,192" fill="none" stroke="black"/>
              <path d="M 296,192 L 416,192" fill="none" stroke="black"/>
              <path d="M 480,208 L 648,208" fill="none" stroke="black"/>
              <path d="M 496,272 L 632,272" fill="none" stroke="black"/>
              <path d="M 136,288 L 672,288" fill="none" stroke="black"/>
              <path d="M 8,304 L 688,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="480,160 468,154.4 468,165.6" fill="black" transform="rotate(0,472,160)"/>
              <polygon class="arrowhead" points="296,160 284,154.4 284,165.6" fill="black" transform="rotate(0,288,160)"/>
              <polygon class="arrowhead" points="152,160 140,154.4 140,165.6" fill="black" transform="rotate(0,144,160)"/>
              <g class="text">
                <text x="76" y="84">Client</text>
                <text x="388" y="84">Mobile</text>
                <text x="448" y="84">Browser</text>
                <text x="72" y="100">App</text>
                <text x="348" y="148">Downstream</text>
                <text x="560" y="148">User-</text>
                <text x="192" y="164">Initial</text>
                <text x="360" y="164">Authorization</text>
                <text x="564" y="164">Authenticating</text>
                <text x="80" y="180">Authorization</text>
                <text x="188" y="180">Broker</text>
                <text x="264" y="180">Auth.</text>
                <text x="336" y="180">Servers</text>
                <text x="448" y="180">Auth.</text>
                <text x="560" y="180">Authorization</text>
                <text x="56" y="196">Request</text>
                <text x="260" y="196">Req.</text>
                <text x="444" y="196">Req.</text>
                <text x="556" y="196">Server</text>
                <text x="560" y="228">User-</text>
                <text x="564" y="244">Authenticating</text>
                <text x="552" y="260">Web</text>
                <text x="580" y="260">UI</text>
                <text x="324" y="324">Mobile</text>
                <text x="380" y="324">Device</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+------------------------------------------------------------------------------------+
| +-----------+                                                                      |
| |           |                                                                      |
| |   Client  |                              Mobile Browser                          |
| |    App    | +------------------------------------------------------------------+ |
| |           | |                                                                  | |
| +-----------+ | +---------+       +--------------+       +--------------------+  | |
|         |     | |         |       | Downstream   |       |       User-        |  | |
|         +------>| Initial |------>| Authorization|------>|   Authenticating   |  | |
|  Authorization| | Broker  | Auth. | Servers      | Auth. |   Authorization    |  | |
|  Request      | +---------+ Req.  +--------------+ Req.  |      Server        |  | |
|               |                                          +-+----------------+-+  | |
|               |                                            |     User-      |    | |
|               |                                            | Authenticating |    | |
|               |                                            |     Web UI     |    | |
|               |                                            +----------------+    | |
|               +------------------------------------------------------------------+ |
+------------------------------------------------------------------------------------+
                                     Mobile Device
]]></artwork>
        </artset>
      </figure>
      <t>End-user's device may not have an app claiming <em>User-Interacting Authorization Server's</em> urls, when:</t>
      <ul spacing="normal">
        <li>
          <t><em>User-Interacting Authorization Server</em> offers no native app.</t>
        </li>
        <li>
          <t>Or such an app is offered, but is not installed on the end-user's device.</t>
        </li>
      </ul>
      <t>In such case interacting with <em>User-Interacting Authorization Server's</em> <bcp14>MUST</bcp14> use the browser as user agent.
This is similar to the flow described in "OAuth 2.0 for Native Apps" <xref target="RFC8252"/>, and referred to in <xref target="App2App"/> as <strong>App2Web</strong>, and is therefore not discussed further in this document.</t>
    </section>
    <section anchor="browser-less-app2app-with-oauth-brokers">
      <name>Browser-less App2App with OAuth Brokers</name>
      <section anchor="flow-diagram">
        <name>Flow Diagram</name>
        <figure anchor="app2app-browserless-w-brokers">
          <name>Browser-less App2App with Brokers</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="424" viewBox="0 0 424 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,416" fill="none" stroke="black"/>
                <path d="M 24,96 L 24,160" fill="none" stroke="black"/>
                <path d="M 24,320 L 24,400" fill="none" stroke="black"/>
                <path d="M 40,168 L 40,312" fill="none" stroke="black"/>
                <path d="M 72,168 L 72,312" fill="none" stroke="black"/>
                <path d="M 104,168 L 104,224" fill="none" stroke="black"/>
                <path d="M 120,64 L 120,88" fill="none" stroke="black"/>
                <path d="M 120,168 L 120,208" fill="none" stroke="black"/>
                <path d="M 144,96 L 144,160" fill="none" stroke="black"/>
                <path d="M 160,320 L 160,400" fill="none" stroke="black"/>
                <path d="M 264,48 L 264,144" fill="none" stroke="black"/>
                <path d="M 264,192 L 264,288" fill="none" stroke="black"/>
                <path d="M 264,320 L 264,400" fill="none" stroke="black"/>
                <path d="M 392,48 L 392,144" fill="none" stroke="black"/>
                <path d="M 392,192 L 392,288" fill="none" stroke="black"/>
                <path d="M 392,320 L 392,400" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,416" fill="none" stroke="black"/>
                <path d="M 8,32 L 416,32" fill="none" stroke="black"/>
                <path d="M 264,48 L 392,48" fill="none" stroke="black"/>
                <path d="M 120,64 L 256,64" fill="none" stroke="black"/>
                <path d="M 24,96 L 144,96" fill="none" stroke="black"/>
                <path d="M 152,112 L 256,112" fill="none" stroke="black"/>
                <path d="M 152,128 L 256,128" fill="none" stroke="black"/>
                <path d="M 264,144 L 392,144" fill="none" stroke="black"/>
                <path d="M 24,160 L 144,160" fill="none" stroke="black"/>
                <path d="M 264,192 L 392,192" fill="none" stroke="black"/>
                <path d="M 120,208 L 256,208" fill="none" stroke="black"/>
                <path d="M 104,224 L 256,224" fill="none" stroke="black"/>
                <path d="M 264,288 L 392,288" fill="none" stroke="black"/>
                <path d="M 24,320 L 160,320" fill="none" stroke="black"/>
                <path d="M 264,320 L 392,320" fill="none" stroke="black"/>
                <path d="M 168,352 L 256,352" fill="none" stroke="black"/>
                <path d="M 24,400 L 160,400" fill="none" stroke="black"/>
                <path d="M 264,400 L 392,400" fill="none" stroke="black"/>
                <path d="M 8,416 L 416,416" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="264,352 252,346.4 252,357.6" fill="black" transform="rotate(0,256,352)"/>
                <polygon class="arrowhead" points="264,224 252,218.4 252,229.6" fill="black" transform="rotate(0,256,224)"/>
                <polygon class="arrowhead" points="264,208 252,202.4 252,213.6" fill="black" transform="rotate(0,256,208)"/>
                <polygon class="arrowhead" points="264,112 252,106.4 252,117.6" fill="black" transform="rotate(0,256,112)"/>
                <polygon class="arrowhead" points="264,64 252,58.4 252,69.6" fill="black" transform="rotate(0,256,64)"/>
                <polygon class="arrowhead" points="176,352 164,346.4 164,357.6" fill="black" transform="rotate(180,168,352)"/>
                <polygon class="arrowhead" points="160,128 148,122.4 148,133.6" fill="black" transform="rotate(180,152,128)"/>
                <polygon class="arrowhead" points="128,168 116,162.4 116,173.6" fill="black" transform="rotate(270,120,168)"/>
                <polygon class="arrowhead" points="112,168 100,162.4 100,173.6" fill="black" transform="rotate(270,104,168)"/>
                <polygon class="arrowhead" points="80,312 68,306.4 68,317.6" fill="black" transform="rotate(90,72,312)"/>
                <polygon class="arrowhead" points="48,168 36,162.4 36,173.6" fill="black" transform="rotate(270,40,168)"/>
                <g class="text">
                  <text x="192" y="52">(8)</text>
                  <text x="328" y="68">Initial</text>
                  <text x="328" y="84">Authorization</text>
                  <text x="192" y="100">(1)</text>
                  <text x="324" y="100">Server</text>
                  <text x="84" y="116">Client</text>
                  <text x="80" y="132">App</text>
                  <text x="300" y="132">(OAuth</text>
                  <text x="360" y="132">Broker)</text>
                  <text x="192" y="148">(2)</text>
                  <text x="192" y="196">(3)</text>
                  <text x="316" y="228">Downstream</text>
                  <text x="192" y="244">(7)</text>
                  <text x="328" y="244">Authorization</text>
                  <text x="304" y="260">Servers</text>
                  <text x="24" y="292">(6)</text>
                  <text x="88" y="292">(4)</text>
                  <text x="328" y="340">User-</text>
                  <text x="96" y="356">User-</text>
                  <text x="332" y="356">Authenticating</text>
                  <text x="92" y="372">Authenticating</text>
                  <text x="192" y="372">(5)</text>
                  <text x="328" y="372">Authorization</text>
                  <text x="96" y="388">App</text>
                  <text x="300" y="388">Server</text>
                  <text x="172" y="436">Mobile</text>
                  <text x="228" y="436">Device</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------------------------------------------------+
|                     (8)       +---------------+  |
|             +---------------->|    Initial    |  |
|             |                 | Authorization |  |
| +--------------+    (1)       |    Server     |  |
| |    Client    |------------->|               |  |
| |     App      |<-------------| (OAuth Broker)|  |
| |              |    (2)       +---------------+  |
| +--------------+                                 |
|   ^   |   ^ ^                                    |
|   |   |   | |       (3)       +---------------+  |
|   |   |   | +---------------->|               |  |
|   |   |   +------------------>| Downstream    |  |
|   |   |             (7)       | Authorization |  |
|   |   |                       | Servers       |  |
|   |   |                       |               |  |
|(6)|   |(4)                    +---------------+  |
|   |   v                                          |
| +----------------+            +---------------+  |
| |                |            |     User-     |  |
| |      User-     |<---------->| Authenticating|  |
| | Authenticating |  (5)       | Authorization |  |
| |       App      |            | Server        |  |
| +----------------+            +---------------+  |
+--------------------------------------------------+
                  Mobile Device
]]></artwork>
          </artset>
        </figure>
        <ul spacing="normal">
          <li>
            <t>(1) <em>Client App</em> presents an authorization request to <em>Initial Authorization Server</em>, indicating app2app flow using new scope value <strong>app2app</strong>.</t>
          </li>
          <li>
            <t>(2) <em>Initial Authorization Server</em> returns an authorization request for Downstream Authorization Server, including Client App's redirect_uri as <strong>native_callback_uri</strong>.</t>
          </li>
          <li>
            <t>(3) <em>Client App</em> checks if the returned authorization request url is claimed by an app on the device and if so proceeds to the next step. Otherwise it loops through Downstream Authorization Servers, calling their authorization endpoints and processing their HTTP 3xx redirect responses, until a url claimed by an app on the device is reached.</t>
          </li>
          <li>
            <t>(4) <em>Client App</em> natively invokes <em>User-Interacting App</em>.</t>
          </li>
          <li>
            <t>(5) <em>User-Interacting App</em> authenticates user and authorizes the request.</t>
          </li>
          <li>
            <t>(6) <em>User-Interacting App</em> natively invokes <strong>native_callback_uri</strong> (overriding the request's redirect_uri), providing as a parameter the redirect_uri with its response parameters.</t>
          </li>
          <li>
            <t>(7) <em>Client App</em> loops through Authorization Servers in reverse order, starting from the redirect_uri it received from the <em>User-Interacting App</em>. It calls the first redirect_uri and any subsequent uri obtained as 3xx redirect directive, until it obtains a location header indicating its own redirect_uri.</t>
          </li>
          <li>
            <t>(8) <em>Client App</em> exchanges code for tokens and the flow is complete.</t>
          </li>
        </ul>
      </section>
      <section anchor="parameters">
        <name>New Parameters and Values</name>
        <t>The protocol described in this document requires <strong>User-Interacting App</strong> to natively navigate end-user back to Client App, for which it requires Client App's <strong>native_callback_uri</strong>.</t>
        <t>Therefore this document defines new parameters and values.</t>
        <dl>
          <dt>"<strong>app2app</strong>":</dt>
          <dd>
            <t>New scope value, used by <em>Client App</em> to request an app2app flow from <em>Initial Authorization Server</em>.</t>
          </dd>
        </dl>
        <t><em>Initial Authorization Server</em>, processing an app2app flow according to this document, <bcp14>MUST</bcp14> provide Client App's redirect_uri as Native Callback uri to <em>Downstream Authorization Server</em> using one of the following options:</t>
        <dl>
          <dt>"<strong>native_callback_uri</strong>":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. New authorization endpoint request parameter. When <strong>native_callback_uri</strong> is provided, structured scope <strong>app2app:native_callback_uri</strong> <bcp14>MUST NOT</bcp14> be provided.</t>
          </dd>
          <dt>"<strong>app2app:{<em>native_callback_uri</em>}</strong>":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. New structured scope value including the <strong>app2app</strong> flag as well as the Client's <strong>native_callback_uri</strong>, separated by a colon. When structured scope <strong>app2app:{<em>native_callback_uri</em>}</strong> is provided, <strong>native_callback_uri</strong> <bcp14>MUST NOT</bcp14> be provided.</t>
          </dd>
        </dl>
        <t><strong>native_callback_uri</strong> accepts the following query parameter when invoked by <em>User-Interacting Authorization Server's App</em>:</t>
        <dl>
          <dt>"<strong>redirect_uri</strong>":</dt>
          <dd>
            <t>url-encoded OAuth redirect_uri with its response parameters.</t>
          </dd>
        </dl>
        <t><em>Downstream Authorization Server</em>, processing an app2app flow according to this document:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>MUST</bcp14> retain the <strong>native_callback_uri</strong> in downstream authorization requests created.</t>
          </li>
          <li>
            <t><bcp14>MAY</bcp14> validate <strong>native_callback_uri</strong>.</t>
          </li>
        </ul>
        <t><strong>Note</strong>: A simplification is considered, to replace these options and the validation logic by <em>Initial Authorization Server</em>, by having <em>Client App</em> provide the <strong>native_callback_uri</strong> through a <xref target="RFC9396"/> rich authorization details type, which is expected to be passed on by <em>Downstream Authorization Servers</em>:</t>
        <artwork><![CDATA[
{
   "type": "https://scheme.example.org/native_callback_uri",
   "locations": [
      "https://app.example.com/native_callback_uri"
   ]
}
]]></artwork>
      </section>
      <section anchor="validation-of-nativecallbackuri">
        <name>Validation of native_callback_uri</name>
        <t>Validation of <strong>native_callback_uri</strong> by <em>User-Interacting Authorization Server</em> and its App is <bcp14>RECOMMENDED</bcp14>, to mitiagte open redirection attacks.</t>
        <t>A validating Authorization Server <bcp14>MAY</bcp14> use various mechanisms outside the scope of this document.
For example, validation using <xref target="OpenID.Federation"/> is possible:</t>
        <ul spacing="normal">
          <li>
            <t>Strip url path from <strong>native_callback_uri</strong> (retaining the DNS domain).</t>
          </li>
          <li>
            <t>Add the url path /.well-known/openid-federation and perform trust chain resolution.</t>
          </li>
          <li>
            <t>Inspect Client's metadata for redirect_uri's and validate <strong>native_callback_uri</strong> is included.</t>
          </li>
        </ul>
      </section>
      <section anchor="protocol-flow">
        <name>Protocol Flow</name>
        <section anchor="client-app-calls-initial-authorization-server">
          <name>Client App calls Initial Authorization Server</name>
          <t>Client App calls Initial Authorization Server's authorization_endpoint to initiate an authorization code flow and indicates App2App flow using the scope: <strong>app2app</strong>.</t>
        </section>
        <section anchor="initial-authorization-server-returns-authorization-request-to-downstream-authorization-server">
          <name>Initial Authorization Server returns authorization request to Downstream Authorization Server</name>
          <t><em>Initial Authorization Server</em> <bcp14>SHALL</bcp14> process Client's request and return an HTTP 3xx response with a Location header containing an authorization request url towards <em>Downstream Authorization Server's</em> authorization_endpoint.
The request <bcp14>SHALL</bcp14> include Client's redirect_uri as <strong>native_callback_uri</strong> in one of the methods specified in this document.</t>
        </section>
        <section anchor="client-app-invokes-app-of-user-interacting-authorization-server">
          <name>Client App invokes app of User-Interacting Authorization Server</name>
          <t>Client App <bcp14>SHALL</bcp14> use OS mechanisms to attempt to locate an app installed on the device claiming the authorization request url.
If such app is found, <em>Client App</em> <bcp14>SHALL</bcp14> natively invoke the app claiming the url to process the authorization request. This achieves the desired native navigation across applications.
If a suitable app is not found, <em>Client App</em> <bcp14>SHALL</bcp14> use HTTP to call the authorization request url and process the response:</t>
          <ul spacing="normal">
            <li>
              <t>If the response code is HTTP 2xx, <em>Client App</em> cannot accomplish the browser-less flow and <bcp14>MUST</bcp14> fallback to using the browser. The reason is that it reached a <em>User-Interacting Authorization Server</em>, perhaps aiming to authenticate the user and authorize the request, or prompt the user for a routing decision or perhaps to redirect through HTTP Form-Post or Javascript. All of these are not compliant with the browser-less flow.</t>
            </li>
            <li>
              <t>If the response is a redirect instruction (HTTP Code 3xx + Location header), <em>Client App</em> <bcp14>SHALL</bcp14> repeat the logic previously described:  </t>
              <ul spacing="normal">
                <li>
                  <t>Check if an app claims the url in the Location header, and if so natively invoke it.</t>
                </li>
                <li>
                  <t>Otherwise use HTTP to call the url and analyze the response.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Client App <bcp14>SHALL</bcp14> handle error responses (HTTP 4xx / 5xx), for example display the error.</t>
            </li>
          </ul>
          <t>As the <em>Client App</em> traverses through Brokers, it <bcp14>SHALL</bcp14> maintain a list of all the DNS domains it traverses, to be used as Allowlist for response handling traversal.</t>
          <t>As Authorization Servers <bcp14>MAY</bcp14> use Cookies to bind security elements (state, nonce, PKCE) to the user agent, causing the flow to break if said cookies are not present in subsequent HTTP requests, <em>Client App</em> <bcp14>MUST</bcp14> act as a browser would:</t>
          <ul spacing="normal">
            <li>
              <t>Store Cookies it obtains in HTTP responses.</t>
            </li>
            <li>
              <t>Send Cookies in subsequent HTTP requests.</t>
            </li>
          </ul>
        </section>
        <section anchor="fallback-to-using-the-browser">
          <name>Fallback to using the browser</name>
          <t>If <em>Client App</em> obtains an HTTP 2xx response, a new flow <bcp14>MUST</bcp14> be initiated <strong>using the browser</strong>. It is <bcp14>NOT RECOMMENDED</bcp14> to relaunch the current flow's last authorization request on the browser as:</t>
          <ul spacing="normal">
            <li>
              <t>Single-use elements such as <em>request_uri</em> might have been used in the request, and if so relaunching the request on the browser will fail.</t>
            </li>
            <li>
              <t>Authorization Servers previously engaged may have returned cookies to <em>Client App</em>, which would be unavailable to the browser and cause the flow to fail.</t>
            </li>
          </ul>
          <t>Therefore <em>Client App</em> <bcp14>MUST</bcp14> start a new flow by launching on the browser a new authorization request without the <strong>app2app</strong> scope, which then follows "OAuth 2.0 for Native Apps" <xref target="RFC8252"/> and does not require further elaboration in this document.</t>
          <t>Note - In future interactions <em>Client App</em> <bcp14>MAY</bcp14> retry the <em>browser-less App2App</em> flow because past usage of the browser might have resulted from lack of <em>User-Interacting App</em> on the user's device.
Since in the meantime the app may have been installed, retrying may achieve the desired <em>browser-less App2App</em> flow.</t>
        </section>
        <section anchor="processing-by-user-interacting-authorization-servers-app">
          <name>Processing by User-Interacting Authorization Server's App:</name>
          <t>The <em>User-Interacting Authorization Server</em> <bcp14>SHALL</bcp14> handle the authorization request using its native app:</t>
          <ul spacing="normal">
            <li>
              <t>Authenticates end-user and authorizes the request.</t>
            </li>
            <li>
              <t><bcp14>SHALL</bcp14> use <strong>native_callback_uri</strong> to override the request's original redirect_uri:  </t>
              <ul spacing="normal">
                <li>
                  <t><em>User-Interacting Authorization Server's app</em> validates that an app claiming <strong>native_callback_uri</strong> is on the device</t>
                </li>
                <li>
                  <t>If so it natively invokes <strong>native_callback_uri</strong> with the redirect url and its response parameters as the url-encoded query parameter <strong>redirect_uri</strong>.</t>
                </li>
                <li>
                  <t>If such an app does not exist on the device, the flow terminates and <em>User-Interacting Authorization Server's app</em> redirects to redirect_uri with:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>error=invalid_request.</t>
                    </li>
                    <li>
                      <t>error_description=<strong>native_callback_uri_not_claimed</strong>.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="client-app-traverses-oauth-brokers-in-reverse-order">
          <name>Client App traverses OAuth Brokers in reverse order</name>
          <t><em>Client App</em> is natively invoked by <em>User-Interacting Authorization Server App</em>, with the request's redirect_uri.</t>
          <t><em>Client App</em> <bcp14>MUST</bcp14> validate this url, and any url subsequently obtained via a 3xx redirect instruction, against the Allowlist it previously generated, and <bcp14>MUST</bcp14> fail if any url is not included in the Allowlist.</t>
          <t><em>Client App</em> <bcp14>SHALL</bcp14> invoke the url it received using HTTP GET:</t>
          <ul spacing="normal">
            <li>
              <t>If the response is a redirect instruction (HTTP Code 3xx + Location header), <em>Client App</em> <bcp14>SHALL</bcp14> repeat the logic and proceed to call obtained urls until reaching its own redirect_uri (<strong>native_callback_uri</strong>).</t>
            </li>
            <li>
              <t><bcp14>SHALL</bcp14> handle any other HTTP code (2xx / 4xx / 5xx) as a failure.</t>
            </li>
          </ul>
        </section>
        <section anchor="client-app-obtains-response">
          <name>Client App obtains response</name>
          <t>Once <em>Client App's</em> own redirect_uri is returned in a redirect 3xx directive, the traversal of OAuth Brokers is complete.</t>
          <t><em>Client App</em> <bcp14>SHALL</bcp14> proceed according to OAuth to exchange code for tokens, or handle error responses.</t>
        </section>
      </section>
    </section>
    <section anchor="detecting-presence-of-native-apps-claiming-urls">
      <name>Detecting Presence of Native Apps claiming Urls</name>
      <t>Native Apps on iOS and Android <bcp14>MAY</bcp14> use OS SDK's to detect if an app owns a url.
The general method is the same - App calls an SDK to open the url as deep link and handles an exception thrown if no matching app is found.</t>
      <section anchor="android">
        <name>Android</name>
        <t>App <bcp14>SHALL</bcp14> invoke Android <xref target="android.method.intent"/> method with FLAG_ACTIVITY_REQUIRE_NON_BROWSER, which throws ActivityNotFoundException if no matching app is found.</t>
      </section>
      <section anchor="ios">
        <name>iOS</name>
        <t>App <bcp14>SHALL</bcp14> invoke iOS <xref target="iOS.method.openUrl"/> method with options <xref target="iOS.option.universalLinksOnly"/> which ensures URLs must be universal links and have an app configured to open them.
Otherwise the method returns false in completion.success.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="embedded-user-agents">
        <name>Embedded User Agents</name>
        <t><xref target="RFC8252"/> Security Considerations advises against using <em>embedded user agents</em>. The main concern is preventing theft through keystroke recording of end-user's credentials such as usernames and passwords.</t>
        <t>This risk does not apply to this draft as <em>Client App</em> acts as User Agent only for the purpose of flow redirection, and does not interact with end-user's credentials in any way.</t>
      </section>
      <section anchor="oauth-request-forgery-and-manipulation">
        <name>OAuth request forgery and manipulation</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that <em>Client App</em> acts as a confidential OAuth client.</t>
      </section>
      <section anchor="secure-native-application-communication">
        <name>Secure Native application communication</name>
        <t>If <em>Client App</em> uses a Backend it is <bcp14>RECOMMENDED</bcp14> to communicate with it securely:</t>
        <ul spacing="normal">
          <li>
            <t>Use TLS in up to date versions and ciphers.</t>
          </li>
          <li>
            <t>Use DNSSEC.</t>
          </li>
          <li>
            <t>Perform certificate pinning.</t>
          </li>
        </ul>
      </section>
      <section anchor="deep-link-hijacking">
        <name>Deep link hijacking</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that all apps in this specification shall use https-scheme deep links (Android App Links / iOS universal links). Apps <bcp14>SHOULD</bcp14> implement the most specific package identifiers mitigating deep link hijacking by malicious apps.</t>
      </section>
      <section anchor="open-redirection-by-client-app">
        <name>Open redirection by Client App</name>
        <t>Client App <bcp14>SHALL</bcp14> construct an Allowlist of DNS domains it traverses while processing the request, used to enforce all urls it later traverses during response processing.
This mitigates open redirection attacks as urls not in this Allowlist <bcp14>SHALL</bcp14> be rejected.</t>
        <t>In addition <em>Client App</em> <bcp14>MUST</bcp14> ignore any invocation for response processing which is not in the context of a request it initiated.
It is <bcp14>RECOMMENDED</bcp14> the Allowlist be managed as a single-use object, destructed after each protocol flow ends.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> <em>Client App</em> allows only one OAuth request processing at a time.</t>
      </section>
      <section anchor="open-redirection-by-user-interacting-authorization-servers-app">
        <name>Open redirection by User-Interacting Authorization Server's App</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that <em>User-Interacting Authorization Server's</em> App establishes trust in <strong>native_callback_uri</strong> to mitigate open redirection attacks and reject untrusted urls.</t>
      </section>
      <section anchor="authorization-code-theft-and-injection">
        <name>Authorization code theft and injection</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that PKCE is used and that the code_verifier is tied to the <em>Client App</em> instance, as mitigation to authorization code theft and injection attacks.</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="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="RFC7636">
          <front>
            <title>Proof Key for Code Exchange by OAuth Public Clients</title>
            <author fullname="N. Sakimura" initials="N." role="editor" surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Agarwal" initials="N." surname="Agarwal"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the authorization code interception attack. This specification describes the attack as well as a technique to mitigate against the threat through the use of Proof Key for Code Exchange (PKCE, pronounced "pixy").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7636"/>
          <seriesInfo name="DOI" value="10.17487/RFC7636"/>
        </reference>
        <reference anchor="RFC8252">
          <front>
            <title>OAuth 2.0 for Native Apps</title>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>OAuth 2.0 authorization requests from native apps should only be made through external user-agents, primarily the user's browser. This specification details the security and usability reasons why this is the case and how native apps and authorization servers can implement this best practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="212"/>
          <seriesInfo name="RFC" value="8252"/>
          <seriesInfo name="DOI" value="10.17487/RFC8252"/>
        </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="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="OpenID" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0</title>
            <author initials="N." surname="Sakimura">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="M. B." surname="Jones">
              <organization/>
            </author>
            <author initials="B." surname="de Medeiros">
              <organization/>
            </author>
            <author initials="C." surname="Mortimore">
              <organization/>
            </author>
            <date year="2014" month="November"/>
          </front>
        </reference>
        <reference anchor="OpenID.Federation" target="https://openid.net/specs/openid-federation-1_0.html">
          <front>
            <title>OpenID Federation 1.0</title>
            <author initials="R." surname="Hedberg, Ed">
              <organization/>
            </author>
            <author initials="M. B." surname="Jones">
              <organization/>
            </author>
            <author initials="A. A." surname="Solberg">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="G." surname="De Marco">
              <organization/>
            </author>
            <author initials="V." surname="Dzhuvinov">
              <organization/>
            </author>
            <date year="2025" month="March"/>
          </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="App2App" target="https://openid.net/guest-blog-implementing-app-to-app-authorisation-in-oauth2-openid-connect/">
          <front>
            <title>Guest Blog: Implementing App-to-App Authorisation in OAuth2/OpenID Connect</title>
            <author initials="J." surname="Heenan">
              <organization/>
            </author>
            <date year="2019" month="October"/>
          </front>
        </reference>
        <reference anchor="OpenID.Native-SSO" target="https://openid.net/specs/openid-connect-native-sso-1_0.html">
          <front>
            <title>OpenID Connect Native SSO for Mobile Apps</title>
            <author initials="G." surname="Fletcher">
              <organization/>
            </author>
            <date year="2022" month="November"/>
          </front>
        </reference>
        <reference anchor="iOS.method.openUrl" target="https://developer.apple.com/documentation/uikit/uiapplication/open(_:options:completionhandler:)">
          <front>
            <title>iOS open(_:options:completionHandler:) Method</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="iOS.option.universalLinksOnly" target="https://developer.apple.com/documentation/uikit/uiapplication/openexternalurloptionskey/universallinksonly">
          <front>
            <title>iOS method property universalLinksOnly</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="android.method.intent" target="https://developer.android.com/reference/android/content/Intent">
          <front>
            <title>Android Intent Method</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 467?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following individuals who contributed ideas, feedback, and wording that shaped and formed the final specification: George Fletcher, Arndt Schwenkschuster, Henrik Kroll, Grese Hyseni.
As well as the attendees of the OAuth Security Workshop 2025 session in which this topic was discussed for their ideas and feedback.</t>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from the final specification ]]</t>
      <t>-latest</t>
      <ul spacing="normal">
        <li>
          <t>Phrased the challenge in Trust Domain terminology</t>
        </li>
        <li>
          <t>Discussed interim Authorization Server interacting the end-user, which is not the User-Authenticating Authorization Server</t>
        </li>
        <li>
          <t>Moved Cookies topic to Protocol Flow</t>
        </li>
        <li>
          <t>Mentioned that Authorization Servers redirecting not through HTTP 3xx force the use of a browser</t>
        </li>
        <li>
          <t>Discussed Embedded user agents security consideration</t>
        </li>
        <li>
          <t>Starting to consider using a rich authorization details type as simpler container for native_callback_uri</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Defined parameters and values</t>
        </li>
        <li>
          <t>Added error native_callback_uri_not_claimed</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Clarified wording</t>
        </li>
        <li>
          <t>Improved figures</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Better defined terms</t>
        </li>
        <li>
          <t>Explained deep link claiming detection on iOS and android</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>initial working group version (previously draft-zehavi-oauth-app2app-browserless)</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1d/XLcNpL/n1X3DrjJH5HGMyNbsfOh2s2ubMm2ElvyWXJy
uWxWhSExM4g45BxBSp7YzrPcs9yTXX8AIMghpXHOW3VVt6o4miHx0Wg0un/d
aEDj8TgqdZmqAzE4O6zKhdif3BeHq9U+/BOPi/zGqCJVxoinaX4ziOR0Wqhr
KHwqS32tBNex5QdRLEs1z4v1gTBlEkVJHmdyCW0nhZyV49/UQl7rcS6hzlhC
Hfg3ntZ9jO8/jEw1XWpjdJ6V6xXUPDm+eBpl1XKqioMogeYPojjPjMpMZQ5E
WVQqAnK+iGShJJB1ruKq0OV6EN3kxdW8yKsVPP1RTQUSmhf6N6A7z8SrIi/z
OE8H0ZVaQ9HkIBJjkdGgkDSDX4lQ/GBpxY8BudG1yiqgR4ht+hGCBzT4EQjT
2Vw8w0r4fCl1Cs+pt79qVc4meTHHF7KIF/BiUZYrc7C3h+XwEZA4ccX28MEe
E7VHLexhzbkuF9UU6q5lkWeW8Xu9jMcqKfDWlEF3YdUJNzjReX8je9tN8mRR
LoEdkSQ+IduhcyFmVZqyrPyE/Yr/oGboFQxTZpahB+K11LOZ0iAB4rHMrsRJ
Vqoio5cypfKKGUr0T5icvxZTHZabxPkyirK8WNKM4xy+fvrky68efuM/Prpv
P3715Rdf2o9f7z/atx+/ebDvnn7zxTf08WylspOjA6LBril+JJ7kWabiEn4X
SjyY3OcispgrYLjjdw5ldTLJVLlnVio29sE45srwu1DjB5f3iYHUAi0HcZpf
K1we4uuR2L//4CG98tyln7HQGayW04k4l1d6WRWy+eK7CSx1maRq3Xz+cvJ4
Ir7LM2Waz+FposRLlShd5K13TybiZV6UegnkeqZMnkLZgmewgz/124/mzsxX
7eLNS1we4hEyZv9RP2NeT8RzlQAP5yNxnEy2Y8Lh5BD4madYbTt2PpuII0U0
5c0XP8CL3xbVtc7y60hns1AurW5tsG3wrIK1Kh6n+Rw05HKVqqXKSlQqUHJc
5mNU3lYRGearzlhX7+81ZXJwF7fn2NV4Cl2NddATLm3sCX/JsKexznjx74+b
ArzXz//vkP8qk1kwdWdxmaNU7z8gsf6mliU2PePz87Pb1po1UFBKAD9BJqc6
Vcgf84dWnzUNxuRNOescD0z001SV8UIVXQsVhHEfnuuz88lSQfVkgp29KdLG
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
BR4xtUUcaQmewvJ/h5Huba5s/tn5erdnpd8Tm/pgo2cyWt7ACdb/7VqbPbcs
oK/VZcl3HuyG7QTmxtWi5w4qCfG+g8ImNQFecVEB0Qo3vBc74XzsNms1h7az
fxcPPzpUYHn4d9vF3+nTtrXqf47anS/unuX6X88sd/CwrtUhk9+28FNHrfpn
56t6lrtlo6tWSFED+2xdq3NcO1/uUq2dh7tdtW7n4XVPX13dd8hGSzr6+toY
0fvNLzXQaUlv8CKQ+m/bMKautQlvdh7dNV+OoHqFNSncxI1/lBt/TB9uTsft
0a/w2MoGZOjX6lafEy4YkzJrbOfXWYpZK6PGbRfjBuityQgYfUnc1Fhq2Rhy
QKqVhNbMQRuT9rq9A7sVewuNaF3vyB1AKuO0osBPuJ3cDNORpe1JqBuTGmtw
L14ozEnSMxu8QTJV0kMkboI3EzQs7rGwxkI1Mu4zzGxcFXmsVOKDNphkLEyp
VhNxhgb+RiPWKUWa5yvjkzjvSkYaiZjykec2o6s7sZCjYkSBMXXh5xcXr8QX
b996rtWBzZGoYIWmQm7s9neNUiPjJfAvIcY+bDHW78Lznr3p2bCnuqAJerbz
m1lNDOEaqU1hpjC19WVvW5sUdcuJ2MmBy4VOWonILUmjBOH8motR6kKQ8blo
xv94IWNWmg8P+sKGyP6qxb6mRHSKAeci4icM+iW4QABmFzRgik1vUKFxsmMF
Q07qEj3zgmlayBdj89AKym0LFxrOQ7YG0D41yCBMJYPH+bSUlCkJLGmImY3O
XisnZkANF0bepbnNc1komRDy9QoJ2YbpBo2AKvLs6xbPlE1PNDanMUdgf6Vs
ikdXOJPj76eg3l756aDCP6CeM+LdZ/U0feDEEJ8J3vATmrkZfk9/2M3cZpqK
T+L2IfOWewhVRjQam48UdNDQg716Dwm3fkbZOimAWa2mma/MHCBNT/mYgbbn
nKKmNRhxyBpTcsLJoKQmm66UNY0Kb5zcnh4HzukdJivQbO0OZBzDgqDlm7eT
a8k95IWrbjcjHblMZErvSoOzRpMS8dms1Pm/7oRMBOBh0DNfAzxJciBcDsqE
GN6t4z2L/eRh8B2T9XtUG25C8NgT1BZFFWNSZWLn08/0QXdtl9aDsXrXzMQO
xdV819nzh55hbZDAAKM29KShagGE+ZXzMKMX3/tMyp5Rw0gVMqh0e3KwfPPM
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

-->

</rfc>
