<?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-00" 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 interation for native clients using federation</title>
    <seriesInfo name="Internet-Draft" value="draft-zehavi-oauth-native-clients-federation-00"/>
    <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 interation 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>
