<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-zehavi-oauth-native-clients-federation-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="OAuth native clients with federation">OAuth 2.0 direct interaction for native clients using federation</title>
    <seriesInfo name="Internet-Draft" value="draft-zehavi-oauth-native-clients-federation-01"/>
    <author fullname="Yaron Zehavi">
      <organization>Raiffeisen Bank International</organization>
      <address>
        <email>yaron.zehavi@rbinternational.com</email>
      </address>
    </author>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="17"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>native apps</keyword>
    <keyword>first-party</keyword>
    <keyword>oauth</keyword>
    <abstract>
      <?line 58?>

<t>OAuth 2.0 for First-Party Applications (FiPA) <xref target="I-D.ietf-oauth-first-party-apps"/> defined a native
OAuth 2.0 <strong>direct interaction</strong>, whereby clients call authorization server's <em>Native Authorization
Endpoint</em> as an HTTP REST API, whose response instructs client what information
to collect from end-user to satisfy authorization server's policies and requirements.</t>
      <t>While FiPA <xref target="I-D.ietf-oauth-first-party-apps"/> focused on a one-to-one relationship between
client and authorization server, this document is an <strong>extension profile</strong> adding support
for authorization servers to federate the interaction to a downstream authorization server,
instruct collection of additional information from users to guide request routing or instruct
the usage of another native app for user interaction.</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-native-clients-federation/draft-zehavi-oauth-native-clients-federation.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-zehavi-oauth-native-clients-federation/"/>.
      </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-native-clients-federation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document, OAuth 2.0 direct interaction for native clients using federation,
extends FiPA <xref target="I-D.ietf-oauth-first-party-apps"/> to enable federation based flows,
while retaining client's direct interaction with end-user.</t>
      <t>The client calls the <em>Native Authorization Endpoint</em> as an HTTP REST API, and receives
instructions via the protocol established by FiPA, guiding client to interact with
downstream authorization servers. This establishes a multi authorization server
federated flow, whose user interactions are driven by the client app.</t>
      <t>This document extends FiPA <xref target="I-D.ietf-oauth-first-party-apps"/> with new error responses:
<tt>federate</tt>, <tt>redirect_to_app</tt>, <tt>insufficient_information</tt> and
<tt>native_authorization_federate_unsupported</tt>.</t>
      <t>It also adds additional response parameters:
<tt>federation_uri</tt>, <tt>federation_body</tt>, <tt>response_uri</tt>, <tt>deep_link</tt>.</t>
      <t>And adds the <tt>native_callback_uri</tt> request parameter.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>There are three primary ways this specification extends FiPA:</t>
      <ul spacing="normal">
        <li>
          <t><tt>federate</tt> response: Sends the client to interact with a downstream authorization server.</t>
        </li>
        <li>
          <t><tt>insufficient_information</tt> response: Instructs the client to collect information from end-user required to decide where to federate to. For example this could be an email address which identifies the trust domain.</t>
        </li>
        <li>
          <t><tt>redirect_to_app</tt>: Instructs the client to natively invoke an app to interact with end user.</t>
        </li>
      </ul>
      <section anchor="representative-flow-native-client-federated-and-redirected-to-app">
        <name>Representative flow: Native client federated and redirected to app</name>
        <artwork type="ascii-art"><![CDATA[
                                                +--------------------+
                                                |   Authorization    |
                          (B)Native             |      Server 1      |
             +----------+ Authorization Request |+------------------+|
(A)User  +---|          |---------------------->||     Native       ||
   Starts|   |          |                       ||  Authorization   ||
   Flow  +-->|  Client  |<----------------------||    Endpoint      ||
             |          | (C)Federate Error     |+------------------+|
             |          |        Response       +--------------------+
             |          |         :
             |          |         :             +--------------------+
             |          |         :             |   Authorization    |
             |          | (D)Native             |      Server 2      |
             |          | Authorization Request |+------------------+|
             |          |---------------------->||     Native       ||
             |          |                       ||  Authorization   ||
             |          |<----------------------||    Endpoint      ||
             |          | (E) Redirect to       |+------------------+|
             |          |     App Response      +--------------------+
             |          |         :
             |          |         :             +--------------------+
             |          | (F) Invoke App        |                    |
             |          |---------------------->|   Native App of    |
             |          |                       |   Auth Server 2    |
             |          |<----------------------|                    |
             |          | (G)Authorization code +--------------------+
             |          |   For Auth Server 1
             |          |         :             +--------------------+
             |          |         :             |   Authorization    |
             |          | (H)Authorization Code |      Server 1      |
             |          |    For Auth Server 1  |+------------------+|
             |          |---------------------->||    Response      ||
             |          |                       ||       Uri        ||
             |          |<----------------------||    Endpoint      ||
             |          | (I) Authorization     |+------------------+|
             |          |     Code Response     |                    |
             |          |         :             |                    |
             |          |         :             |                    |
             |          | (J) Token Request     |+------------------+|
             |          |---------------------->||      Token       ||
             |          |                       ||     Endpoint     ||
             |          |<----------------------||                  ||
             |          | (K) Access Token      |+------------------+|
             |          |                       +--------------------+
             |          |
             +----------+
]]></artwork>
        <t>Figure: Native client federated, then redirected to app</t>
        <ul spacing="normal">
          <li>
            <t>(A) The client starts the flow.</t>
          </li>
          <li>
            <t>(B) The client initiates the authorization request by making a POST request to the Native Authorization Endpoint of Authorization Server 1.</t>
          </li>
          <li>
            <t>(C) Authorization Server 1 decides to federate the user to Authorization Server 2. To do so it contacts Authorization Server 2's PAR <xref target="RFC9126"/> endpoint, then returns the <tt>federate</tt> error code together with the <em>federation_uri</em>, <em>federation_body</em>, <em>response_uri</em> and <em>auth_session</em> response attributes.</t>
          </li>
          <li>
            <t>(D) The client calls Authorization Server 2's Native Authorization Endpoint, as instructed by Authorization Server 1.</t>
          </li>
          <li>
            <t>(E) Authorization Server 2 decides to use a native app, and therefore responds with the <tt>redirect_to_app</tt> error code together with the <em>deep_link</em> response attribute.</t>
          </li>
          <li>
            <t>(F) The client invokes the app using the deep_link.</t>
          </li>
          <li>
            <t>(G) The app interacts with user and if satisifed, returns an authorization code, regarded as Authorization Server 2's response to Authorization Server 1's federation to it.</t>
          </li>
          <li>
            <t>(H) The client provides the authorization code to Authorization Server 1.</t>
          </li>
          <li>
            <t>(I) Authorization Server 1 returns an authorization code.</t>
          </li>
          <li>
            <t>(J) The client sends the authorization code received in step (I) to obtain a token from the Token Endpoint.</t>
          </li>
          <li>
            <t>(K) Authorization Server 1 returns an Access Token from the Token Endpoint.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="protocol-endpoints">
      <name>Protocol Endpoints</name>
      <section anchor="native-authorization-endpoint">
        <name>Native Authorization Endpoint</name>
        <t>The native authorization endpoint defined by FiPA <xref target="I-D.ietf-oauth-first-party-apps"/> is used by this document.</t>
        <t>This document adds the <em>native_callback_uri</em> parameter to the native authorization endpoint, to support
native user navigation across apps.</t>
        <t>Before an authorization server instructs a client to federate to a downstream authorization server, it <bcp14>SHALL</bcp14> ensure the federated authorization server offers a <em>native_authorization_endpoint</em>, otherwise return the error <em>native_authorization_federate_unsupported</em>.</t>
        <t>When federating to downstream authorization servers, the usage of PAR <xref target="RFC9126"/> with client authentication is <bcp14>REQUIRED</bcp14>, because when the client interacting with end-user calls the federated authorization server, it is not <strong>its</strong> OAuth client and therefore has no other means of authenticating.
When using PAR with client authentication, the request_uri provided to the Native Authorization Endpoint attests that client authentication (by the federating authorization server) took place.</t>
      </section>
      <section anchor="native-auth-request">
        <name>Native Authorization Request</name>
        <t>The native authorization endpoint is called as defined by FiPA <xref target="I-D.ietf-oauth-first-party-apps"/>.
This document adds the following request parameter:</t>
        <dl>
          <dt>"native_callback_uri":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. Native client app's <strong>redirect_uri</strong>, claimed as deep link. <em>native_callback_uri</em> <bcp14>SHALL</bcp14> be natively invoked by authorization server's user-interacting app to provide its response to the client app. If native_callback_uri is included in a native authorization request, authorization server <bcp14>MUST</bcp14> include the native_callback_uri when federating to another authorization server.</t>
          </dd>
        </dl>
      </section>
      <section anchor="native-response">
        <name>Native Authorization Response</name>
        <t>This document extends FiPA's <xref target="I-D.ietf-oauth-first-party-apps"/> error response,
by adding the following error codes:</t>
        <dl>
          <dt>"error":</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>.  A single ASCII <xref target="USASCII"/> error code from the following:
</t>
            <dl>
              <dt>"insufficient_information":</dt>
              <dd>
                <t>the Authorization Server requires additional user input,
other than an authentication challenge, to determine the
target authorization server to federate to.
See <xref target="insufficient-information"/> for details.</t>
              </dd>
              <dt>"federate":</dt>
              <dd>
                <t>The Authorization Server wishes to federate to another
authorization server, which it is a client of. This
response <bcp14>MUST</bcp14> include the <em>federation_uri</em> response parameter.
See <xref target="federating-response"/> for details.</t>
              </dd>
              <dt>"redirect_to_app":</dt>
              <dd>
                <t>The Authorization Server wishes to fulfill the user interaction
using another native app. This response <bcp14>MUST</bcp14> include the
<em>federation_uri</em> response parameter.
See <xref target="redirect-to-app-response"/> for details.</t>
              </dd>
              <dt>"native_authorization_federate_unsupported":</dt>
              <dd>
                <t>The authorization server intended to federate to
a downstream authorization server, but it does not
support the native authorization endpoint.</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>And adds the following response attributes:</t>
        <dl>
          <dt>"federation_uri":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>.  The Native Authorization Endpoint of a downstream
authorization server to federate to.</t>
          </dd>
          <dt>"deep_link":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>.  A URI of native app to be invoked to handle the request.</t>
          </dd>
          <dt>"federation_body":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>.  A string of application/x-www-form-urlencoded
request parameters according to this specification for the
downstream authorization server's Native Authorization Endpoint.</t>
          </dd>
          <dt>"response_uri":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>.  A URI of an endpoint of federating authorization server
which shall receive the response from the federated authorization server.</t>
          </dd>
        </dl>
        <section anchor="federating-response">
          <name>Federating Response</name>
          <t>If the authorization server decides to federate to another authorization server, it
responds with error code <em>federate</em> and <bcp14>MUST</bcp14> return the <em>federation_uri</em>,
<em>federation_body</em>, <em>response_uri</em> and <em>auth_session</em> response attributes.</t>
          <t>When federating to another authorization server:</t>
          <ul spacing="normal">
            <li>
              <t>Federating authorization server <bcp14>MUST</bcp14> use PAR <xref target="RFC9126"/> and include <em>request_uri</em> in federation_body.</t>
            </li>
            <li>
              <t>If <em>native_callback_uri</em> was included in the native authorization request, it <bcp14>MUST</bcp14> be included when calling federated authorization server's Native Authorization Endpoint.</t>
            </li>
          </ul>
          <t>Example <strong>federating</strong> response:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "federate",
    "auth_session": "ce6772f5e07bc8361572f",
    "response_uri": "https://prev-as.com/native-authorization",
    "federation_uri": "https://next-as.com/native-authorization",
    "federation_body": "client_id=s6BhdRkqt3&request_uri=
      urn:ietf:params:oauth:request_uri:R3p_hzwsR7outNQSKfoX"
}
]]></artwork>
          <t>Client <bcp14>MUST</bcp14> call the <em>federation_uri</em> using HTTP POST, and provide it <em>federation_body</em>
as application/x-www-form-urlencoded request body. Example:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: next-as.com
Content-Type: application/x-www-form-urlencoded

client_id=s6BhdRkqt3&request_uri=
urn:ietf:params:oauth:request_uri:R3p_hzwsR7outNQSKfoX
]]></artwork>
          <t>The client <bcp14>MUST</bcp14> provide any response obtained from the <strong>federated</strong> authorization server,
as application/x-www-form-urlencoded request body for the <em>response_uri</em> of the respective
<strong>federating</strong> authorization server which <bcp14>SHALL</bcp14> be invoked using HTTP POST.</t>
          <t>However, when <strong>federated</strong> authorization server returns the following error codes:
<em>federate</em>, <em>insufficient_authorization</em>, <em>insufficient_information</em>, <em>redirect_to_app</em>,
<em>redirect_to_web</em>, client <bcp14>MUST</bcp14> handle these errors according to FiPA <xref target="I-D.ietf-oauth-first-party-apps"/> and this specification.</t>
          <t>Example client calling receiving an authorization code response from the federated
authorization server:</t>
          <artwork><![CDATA[
HTTP/1.1 200 OK
Server: next-as.com
Content-Type: application/json
Cache-Control: no-store

{
  "authorization_code": "uY29tL2F1dGhlbnRpY"
}
]]></artwork>
          <t>And providing it to the federating authorization server's response_uri,
adding previously obtained auth_session:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: prev-as.com
Content-Type: application/x-www-form-urlencoded

authorization_code=uY29tL2F1dGhlbnRpY
&auth_session=ce6772f5e07bc8361572f
]]></artwork>
        </section>
        <section anchor="redirect-to-app-response">
          <name>Redirect to app response</name>
          <t>If the authorization server decides to nominate another native app to interact with
end user, it responds with error code <em>redirect_to_app</em> and <bcp14>MUST</bcp14> return the
<em>deep_link</em> response attribute.</t>
          <t>Example <strong>redirect_to_app</strong> response:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "redirect_to_app",
    "deep_link": "https://next-as.com/native-authorization?
      client_id=s6BhdRkqt3&request_uri=
      urn:ietf:params:oauth:request_uri:R3p_hzwsR7outNQSKfoX"
}
]]></artwork>
          <t>Client <bcp14>MUST</bcp14> use OS mechanisms to invoke the obtained deep_link.
If no app claiming deep_link is found on the device, client <bcp14>MUST</bcp14> terminate the
flow and <bcp14>MAY</bcp14> attempt a normal non-native OAuth flow.</t>
          <t>The invoked app handles the native authorization request:</t>
          <ul spacing="normal">
            <li>
              <t>Validates the request and ensures it contains a <em>native_callback_uri</em>, Otherwise terminates the flow.</t>
            </li>
            <li>
              <t>Establishes trust in <em>native_callback_uri</em> and validates that an app claiming it is on the device. Otherwise terminates the flow.</t>
            </li>
            <li>
              <t>Authenticates end-user and authorizes the request.</t>
            </li>
            <li>
              <t>Uses OS mechanisms to natively invoke <em>native_callback_uri</em> and return to the client, providing it a response according to this specification's response from a Native Authorization Endpoint, as url-encoded query parameters.</t>
            </li>
          </ul>
          <t>Note - trust establishment mechanisms in <em>native_callback_uri</em> are out of scope of this specification.
However we assume closed ecosystems could employ an allowList, and open ecosystems could leverage
<xref target="OpenID.Federation"/>:</t>
          <ul spacing="normal">
            <li>
              <t>Extract native_callback_uri's DNS domain.</t>
            </li>
            <li>
              <t>Add the 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 among them.</t>
            </li>
          </ul>
          <t>When the client is invoked on its native_callback_uri, it shall regard the invocation as a
response from the authorization server which instructed <em>redirect_to_app</em>.
Therefore, obtained response's audience is the authorization server which federated
the client to the authorization server which redirected the client to the app.
See <xref target="federating-response"/> for details.</t>
          <t>Example URI used to invoke of client app on its claimed native_callback_uri:</t>
          <artwork><![CDATA[
https://client.example.com/cb?authorization_code=uY29tL2F1dGhlbnRpY
]]></artwork>
          <t>Example client invoking the response_uri <strong>of the authorization server which federated it</strong>
to the authorization server, which redirected it to the app:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: prev-as.com
Content-Type: application/x-www-form-urlencoded

authorization_code=uY29tL2F1dGhlbnRpY
&auth_session=ce6772f5e07bc8361572f
]]></artwork>
        </section>
        <section anchor="insufficient-information">
          <name>Additional Information Required Response</name>
          <t>If additional user input is required, for example to determine where to federate to,
the response body shall contain the following additional properties:</t>
          <dl>
            <dt>logo:</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>. URL or base64-encoded logo of <em>Authorization Server</em>, for branding purposes.</t>
            </dd>
            <dt>userPrompt:</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14>. A JSON object containing the prompt definition. The following parameters <bcp14>MAY</bcp14> be used:</t>
            </dd>
          </dl>
          <ul spacing="normal">
            <li>
              <t>options: <bcp14>OPTIONAL</bcp14>. A JSON object that defines a dropdown/select input with various options to choose from. Each key is the parameter name to be sent in the response and each value defines the option:  </t>
              <ul spacing="normal">
                <li>
                  <t>title: <bcp14>OPTIONAL</bcp14>. A string holding the input's title.</t>
                </li>
                <li>
                  <t>description: <bcp14>OPTIONAL</bcp14>. A string holding the input's description.</t>
                </li>
                <li>
                  <t>values: <bcp14>REQUIRED</bcp14>. A JSON object where each key is the selection value and each value holds display data for that value:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>name: <bcp14>REQUIRED</bcp14>. A string holding the display name of the selection value.</t>
                    </li>
                    <li>
                      <t>logo: <bcp14>OPTIONAL</bcp14>. A string holding a URL or base64-encoded image for that selection value.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>inputs: <bcp14>OPTIONAL</bcp14>. A JSON object that defines an input field. Each key is the parameter name to be sent in the response and each value defines the input field:  </t>
              <ul spacing="normal">
                <li>
                  <t>title: <bcp14>OPTIONAL</bcp14>. A string holding the input's title.</t>
                </li>
                <li>
                  <t>hint: <bcp14>OPTIONAL</bcp14>. A string holding the input's hint that is displayed if the input is empty.</t>
                </li>
                <li>
                  <t>description: <bcp14>OPTIONAL</bcp14>. A string holding the input's description.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Example of requesting end-user for 2 multiple-choice inputs:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "insufficient_information",
    "auth_session": "ce6772f5e07bc8361572f",
    "logo": "uri or base64-encoded logo of Authorization Server",
    "userPrompt": {
        "options": {
            "bank": {
                "title": "Bank",
                "description": "Choose your Bank",
                "values": {
                    "bankOfSomething": {
                        "name": "Bank of Something",
                        "logo": "uri or base64-encoded logo"
                    },
                    "firstBankOfCountry": {
                        "name": "First Bank of Country",
                        "logo": "uri or base64-encoded logo"
                    }
                }
            },
            "segment": {
                "title": "Customer Segment",
                "description": "Choose your Customer Segment",
                "values": {
                    "retail": "Retail",
                    "smb": "Small & Medium Businesses",
                    "corporate": "Corporate",
                    "ic": "Institutional Clients"
                }
            }
        }
    }
}
]]></artwork>
          <t>Example of requesting end-user for text input entry (email):</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "insufficient_information",
    "auth_session": "ce6772f5e07bc8361572f",
    "action": "prompt",
    "id": "request-identifier-2",
    "logo": "uri or base64-encoded logo of Authorization Server",
    "userPrompt": {
        "inputs": {
            "email": {
                "hint": "Enter your email address",
                "title": "E-Mail",
                "description": "Lorem Ipsum"
            }
        }
    }
}
]]></artwork>
          <t>The client gathers the required additional information and makes a POST request to the Native Authorization Endpoint. Example of response following end-user multiple-choice:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: example.as.com
Content-Type: application/x-www-form-urlencoded

auth_session=ce6772f5e07bc8361572f
&bank=bankOfSomething
&segment=retail
]]></artwork>
          <t>Example of <em>Client App</em> response following end-user input entry:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: example.as.com
Content-Type: application/x-www-form-urlencoded

auth_session=ce6772f5e07bc8361572f
&email=end_user@example.as.com
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="first-party-applications">
        <name>Non First-Party applications of federated authorization servers</name>
        <t>A federated authorization server should consider end-user's privacy and security
to determine if it should present authorization challenges in federation scenarios.
For example, it can label <strong>federating</strong> clients as such and avoid serving them
(i.e: client's interacting on their behalf) authorization challenges involving
sensitive data, as these are not first party clients.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-parameters-registration">
        <name>OAuth Parameters Registration</name>
        <t>IANA has (TBD) registered the following values in the IANA "OAuth Parameters" registry of <xref target="IANA.oauth-parameters"/> established by <xref target="RFC6749"/>.</t>
        <t><strong>Parameter name</strong>: <tt>native_callback_uri</tt></t>
        <t><strong>Parameter usage location</strong>: Native Authorization Endpoint</t>
        <t><strong>Change Controller</strong>: IETF</t>
        <t><strong>Specification Document</strong>: Section 5.4 of this specification</t>
      </section>
    </section>
  </middle>
  <back>
    <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="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="I-D.ietf-oauth-first-party-apps">
        <front>
          <title>OAuth 2.0 for First-Party Applications</title>
          <author fullname="Aaron Parecki" initials="A." surname="Parecki">
            <organization>Okta</organization>
          </author>
          <author fullname="George Fletcher" initials="G." surname="Fletcher">
            <organization>Capital One Financial</organization>
          </author>
          <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
            <organization>Defakto Security</organization>
          </author>
          <date day="20" month="October" year="2025"/>
          <abstract>
            <t>   This document defines the Authorization Challenge Endpoint, which
   supports a first-party client that wants to control the process of
   obtaining authorization from the user using a native experience.

   In many cases, this can provide an entirely browserless OAuth 2.0
   experience suited for native applications, only delegating to the
   browser in unexpected, high risk, or error conditions.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-first-party-apps-02"/>
      </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="IANA.oauth-parameters" target="https://www.iana.org/assignments/oauth-parameters">
        <front>
          <title>OAuth Parameters</title>
          <author>
            <organization>IANA</organization>
          </author>
        </front>
      </reference>
      <reference anchor="USASCII">
        <front>
          <title>Coded Character Set -- 7-bit American Standard Code for Information Interchange, ANSI X3.4</title>
          <author initials="A. N. S." surname="Institute" fullname="American National Standards Institute">
            <organization/>
          </author>
          <date year="1986"/>
        </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>
    <?line 509?>

<section anchor="example-user-experiences">
      <name>Example User Experiences</name>
      <t>This section provides non-normative examples of how this specification may be used to support specific use cases.</t>
      <section anchor="native-client-federated-and-redirected-to-app">
        <name>Native client federated and redirected to app</name>
        <section anchor="diagram">
          <name>Diagram</name>
          <artwork type="ascii-art"><![CDATA[
                                                +--------------------+
                                                |   Authorization    |
                          (B)Native             |      Server 1      |
             +----------+ Authorization Request |+------------------+|
(A)User  +---|          |---------------------->||     Native       ||
   Starts|   |          |                       ||  Authorization   ||
   Flow  +-->|  Client  |<----------------------||    Endpoint      ||
             |          | (C)Federate Error     |+------------------+|
             |          |        Response       +--------------------+
             |          |         :
             |          |         :             +--------------------+
             |          |         :             |   Authorization    |
             |          | (D)Native             |      Server 2      |
             |          | Authorization Request |+------------------+|
             |          |---------------------->||     Native       ||
             |          |                       ||  Authorization   ||
             |          |<----------------------||    Endpoint      ||
             |          | (E) Redirect to       |+------------------+|
             |          |     App Response      +--------------------+
             |          |         :
             |          |         :             +--------------------+
             |          | (F) Invoke App        |                    |
             |          |---------------------->|   Native App of    |
             |          |                       |   Auth Server 2    |
             |          |<----------------------|                    |
             |          | (G)Authorization code +--------------------+
             |          |   For Auth Server 1
             |          |         :             +--------------------+
             |          |         :             |   Authorization    |
             |          | (H)Authorization Code |      Server 1      |
             |          |    For Auth Server 1  |+------------------+|
             |          |---------------------->||    Response      ||
             |          |                       ||       Uri        ||
             |          |<----------------------||    Endpoint      ||
             |          | (I) Authorization     |+------------------+|
             |          |     Code Response     |                    |
             |          |         :             |                    |
             |          |         :             |                    |
             |          | (J) Token Request     |+------------------+|
             |          |---------------------->||      Token       ||
             |          |                       ||     Endpoint     ||
             |          |<----------------------||                  ||
             |          | (K) Access Token      |+------------------+|
             |          |                       +--------------------+
             |          |
             +----------+
]]></artwork>
          <t>Figure: Native client federated, then redirected to app</t>
        </section>
        <section anchor="client-makes-initial-request-and-receives-federate-error">
          <name>Client makes initial request and receives "federate" error</name>
          <t>Client calls the native authorization endpoint and includes the <em>native_callback_uri</em> parameter:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: as-1.com
Content-Type: application/x-www-form-urlencoded

client_id=t7CieSlru4&native_callback_uri=
https://client.example.com/cb
]]></artwork>
          <t>The first authorization server, as-1.com, decides to federate to as-2.com after validating
it supports the native authorization endpoint. If it does not, as-1.com returns:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "native_authorization_federate_unsupported"
}
]]></artwork>
          <t>If native authorization endpoint is supported by the federated authorization server,
as-1.com performs a PAR <xref target="RFC9126"/> request to as-2.com's pushed authorization endpoint,
including the original <em>native_callback_uri</em>:</t>
          <artwork><![CDATA[
POST /par HTTP/1.1
Host: as-2.com
Content-Type: application/x-www-form-urlencoded

client_id=s6BhdRkqt3&native_callback_uri=
https://client.example.com/cb
]]></artwork>
          <t>as-1.com receives a request_uri from as-2.com's PAR endpoint, which it
includes in its response to client, in the <em>federation_body</em> attribute:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "federate",
    "auth_session": "ce6772f5e07bc8361572f",
    "response_uri": "https://as-1.com/native-authorization",
    "federation_uri": "https://as-2.com/native-authorization",
    "federation_body": "client_id=s6BhdRkqt3&request_uri=
      urn:ietf:params:oauth:request_uri:R3p_hzwsR7outNQSKfoX"
}
]]></artwork>
          <t>See <xref target="federating-response"/> for more details.</t>
        </section>
        <section anchor="client-calls-federated-authorization-server-and-is-redirected-to-app">
          <name>Client calls federated authorization server and is redirected to app</name>
          <t>Client calls the <em>federation_uri</em> it got from as-1.com using HTTP POST with
<em>federation_body</em> as application/x-www-form-urlencoded request body:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: as-2.com
Content-Type: application/x-www-form-urlencoded

client_id=s6BhdRkqt3&request_uri=
urn:ietf:params:oauth:request_uri:R3p_hzwsR7outNQSKfoX
]]></artwork>
          <t>as-2.com decides to use its native app to interact with end-user and responds:</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json

{
    "error": "redirect_to_app",
    "deep_link": "https://as-2.com/native-authorization?
      client_id=s6BhdRkqt3&request_uri=
      urn:ietf:params:oauth:request_uri:R3p_hzwsR7outNQSKfoX"
}
]]></artwork>
          <t>Client locates an app claiming the obtained deep_link and invokes it.
See <xref target="redirect-to-app-response"/> for more details.
The invoked app handles the native authorization request and then natively invokes native_callback_uri:</t>
          <artwork><![CDATA[
https://client.example.com/cb?authorization_code=uY29tL2F1dGhlbnRpY
]]></artwork>
        </section>
        <section anchor="client-calls-federating-authorization-server">
          <name>Client calls federating authorization server</name>
          <t>Client invokes the response_uri of as-1.com as it is the authorization server which federated
it to as-2.com and the app's response is regarded as the response of as-2.com:</t>
          <artwork><![CDATA[
POST /native-authorization HTTP/1.1
Host: as-1.com
Content-Type: application/x-www-form-urlencoded

authorization_code=uY29tL2F1dGhlbnRpY
&auth_session=ce6772f5e07bc8361572f
]]></artwork>
          <t>And receives in response an authorization code, which it is the audience of (no further federations) to resolve:</t>
          <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json

{
  "authorization_code": "vZ3:uM3G2eHimcoSqjZ"
}
]]></artwork>
          <t>Client proceeds to exchange code for tokens.</t>
        </section>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Document creation</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the attendees of IETFs 123 &amp; 124 in which this was discussed, as well as the following individuals who contributed ideas, feedback, and wording that shaped and formed the final specification: George Fletcher, Arndt Schwenkshuster, Filip Skokan.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
