<?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.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-httpapi-popup-authentication-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.0 -->
  <front>
    <title abbrev="Popup Authentication">Interactive Authentication of Non-Interactive HTTP Requests</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-httpapi-popup-authentication-00"/>
    <author fullname="Benjamin M. Schwartz">
      <organization>Google LLC</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <date year="2022" month="October" day="17"/>
    <workgroup>httpapi</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>On the World Wide Web, a rich ecosystem of authentication options has been developed to support access control for HTTP resources.  However, non-interactive usage of HTTP remains limited to the simple authentication mechanisms defined in the HTTP standards.  This specification allows non-interactive HTTP contexts to open a browser-like authentication context when necessary, and close it when authentication is complete.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-schwartz-httpapi-popup-authentication/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bemasc/access-services"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="background">
      <name>Background</name>
      <t>In technical systems today, we can divide usage of HTTP into two categories.  The first category is represented by the World Wide Web, where browsers load HTML files and their subresources for display to the user, in response to user actions.  We call this category of usage "interactive".</t>
      <t>The second category of usage consists of requests whose results are not presented interactively to the user ("non-interactive").  Instead these HTTP requests are used to perform operations needed by a software system such as a browser, application, or operating system.  These requests are generally not for HTML content, and are often entirely invisible to the user.  Even if the request is user-initiated, it does not normally present the user with a browser window.</t>
      <t>In interactive usage, HTTP offers a variety of authentication options.  A simple option is to use HTTP's built-in password challenge capabilities (carried in Basic or Digest authentication headers), but this pattern is generally regarded as obsolete on the web today.  Instead, user authentication relies on account information entered via HTML forms, session cookies to retain login state, and new device attestation systems like WebAuthn.  Third-party account providers and server-to-server OAuth2 are also widely used to simplify account management.</t>
      <t>In non-interactive usage, the only available generic HTTP authentication mechanism is the built-in password challenge.  In this mode, the HTTP server responds with a WWW-Authenticate header requesting Basic or Digest authentication.  If the client already knows a username and password, it can provide those; otherwise, it might display a login prompt, with an explanation of what subsystem is requesting these credentials and why.</t>
      <t>Client-to-server OAuth2 is commonly used for authentication of non-interactive HTTP clients, but it is concerned exclusively with client software that is already registered with a specific service.  This specification aims to define an authentication pattern that allows interactive authentication of non-interactive HTTP requests between any participating client and server, without any private arrangement.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This specification enables a new mode of authentication for non-interactive HTTP requests.  In this mode, the non-interactive request temporarily becomes interactive, enabling web-like authentication patterns.  The process is as follows:</t>
      <ol spacing="normal" type="1"><li>The user enters a URL into a configuration field in their system.  This could be a field for specifying the URL of a proxy configuration file, software update server, or any other remote resource that is understood by the system.</li>
        <li>Either immediately or at a later time, the system attempts to access this resource.</li>
        <li>The server sends a response that means "interactive authentication required".</li>
        <li>The system opens a browser-like window, showing HTML content provided by the server.</li>
        <li>The user interacts with the HTML content in that window, potentially navigating between origins.</li>
        <li>Eventually, a response from the server indicates that interactive authentication is complete.</li>
        <li>The system closes the browser window and repeats the initial request with additional authentication headers.  The request is authorized and succeeds.</li>
        <li>Subsequent requests retain the authentication state, and succeed as non-interactive requests.</li>
        <li>Eventually, the authentication state may expire, in which case the server requests interactive authentication again.</li>
      </ol>
    </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>
    </section>
    <section anchor="specification">
      <name>Specification</name>
      <t>We presume the existence of a desired resource, identified by the "initial URL".  This resource <bcp14>MAY</bcp14> require client authentication.  If client authentication is not required, this specification is not relevant, and access to the resource proceeds as usual.</t>
      <section anchor="server-requirements">
        <name>Server requirements</name>
        <t>If the request requires authentication, the server <bcp14>SHALL</bcp14> return HTTP 401 "Unauthorized" with a "WWW-Authenticate" header whose auth-scheme is "interactive" (registered in <xref target="iana"/>). This header field value <bcp14>MUST</bcp14> also contain a parameter named "location" whose value is a URL path (the "authentication path").  The server <bcp14>MAY</bcp14> also include other "WWW-Authenticate" headers indicating other supported authentication schemes.</t>
        <t>Any GET request to the authentication path (on the same origin as the initial URL) <bcp14>MUST</bcp14> be subject to the same authentication requirements as the rejected request to the initial URL.  Note: the rejected request may have used a different method, such as POST, that might have different authentication requirements than a GET request to the initial URL.</t>
        <t>A GET request to the authentication path that fails authentication <bcp14>MUST</bcp14> return a webpage that guides the user through the authentication process.  This process <bcp14>MUST</bcp14> conclude by causing the client to repeat the GET request to the authentication path, returning a 2XX response code (as the client is now including the necessary authentication headers).</t>
      </section>
      <section anchor="client">
        <name>Client requirements</name>
        <t>If the client receives an HTTP 401 "Unauthorized" error with a "WWW-Authenticate" header whose auth-scheme is "interactive", it <bcp14>SHOULD</bcp14> notify the user that the initial URL's origin is requesting interactive authentication, including a reminder of the role for which this origin is being used noninteractively.  With the user's approval, it <bcp14>SHOULD</bcp14> load the authentication path from the "location" parameter as a webpage in a browser context.  This context <bcp14>SHOULD</bcp14> have access to the user's credential assistance functions (e.g. password manager) but <bcp14>MAY</bcp14> otherwise be a blank context.</t>
        <t>This browser <bcp14>MUST</bcp14> behave similarly to a normal browser, including support for navigation between origins.  It <bcp14>SHOULD</bcp14> display the current origin to the user, to reduce the risk of impersonation attacks.</t>
        <t>The client <bcp14>MUST</bcp14> monitor any requests made by the browser to the authentication path (whether as navigation, subresource, or javascript-initiated fetch).  If any such request succeeds (i.e. receives a 2XX status code), the client <bcp14>MUST</bcp14> (1) store any "Authorization" and "Cookie" headers used in this request and (2) close this browser instance.  The client <bcp14>SHOULD</bcp14> also display a notification that interactive authentication has concluded.</t>
        <t>After learning the authorization headers, the client <bcp14>SHOULD</bcp14> retry the failed request if it is still relevant.  For this and all subsequent requests to the initial URL, the client <bcp14>MUST</bcp14> add the stored "Authorization" and "Cookie" headers.</t>
        <t>If the user closes the browser instance without successfully retrieving the resource at the authentication path, the system <bcp14>SHOULD</bcp14> warn the user that authentication has failed.  The system <bcp14>SHOULD</bcp14> avoid spamming the user with repeated authentication requests, but <bcp14>SHOULD NOT</bcp14> permanently abandon authentication.</t>
        <t>Web browsers <bcp14>MUST NOT</bcp14> implement support for the "interactive" auth-scheme in ordinary usage.  This auth-scheme is not meaningful in an interactive context.</t>
      </section>
      <section anchor="use-with-proxy-servers">
        <name>Use with proxy servers</name>
        <t>If the "initial URL" indicates a proxy server, this procedure applies with the following modifications:</t>
        <ul spacing="normal">
          <li>
            <t>When authenticating requests to the proxy:
            </t>
            <ul spacing="normal">
              <li>The "Proxy-Authorization" header field is used instead of "Authorization".</li>
              <li>The "Cookie" header field is not added.</li>
            </ul>
          </li>
          <li>
            <t>In replies from the proxy:
            </t>
            <ul spacing="normal">
              <li>The HTTP 407 "Proxy Authentication Required" status code is used instead of HTTP 401.</li>
              <li>The "Proxy-Authenticate" header field is used instead of "WWW-Authenticate".</li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>Suppose that the user has entered an initial URL of "https://corp.example.com/scan" into a settings panel on their system labeled "Executable Security Scanner URL".  Later, when the user is installing a new executable, the system attempts to upload it to the security scanner service:</t>
      <sourcecode type="HTTP"><![CDATA[
POST /scan HTTP/1.1
Host: corp.example.com
Accept: application/json
Content-Type: application/x-msdownload
Content-Length: 123456
...
]]></sourcecode>
      <t>The security scanner is access-controlled by interactive authentication, so it sends the following reply:</t>
      <sourcecode type="HTTP"><![CDATA[
HTTP/1.1 401 Unauthorized
WWW-Authenticate: interactive location=/scanner-login
...
]]></sourcecode>
      <t>The client displays a notification to the user:</t>
      <artwork><![CDATA[
+-----------------------------------+
| Your security scanner service,    |
| "corp.example.com", has requested |
| interactive authentication.       |
|                                   |
|      CONTINUE       CANCEL        |
+-----------------------------------+
]]></artwork>
      <t>The user approves, and the client loads "https://corp.example.com/scanner-login" in a browser context:</t>
      <sourcecode type="HTTP"><![CDATA[
GET /scanner-login HTTP/1.1
Host: corp.example.com
Accept: text/html,...
Accept-Language: en-US,...
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
...
]]></sourcecode>
      <t>This request is still unauthorized, so the server replies with HTTP 401 again:</t>
      <sourcecode type="HTTP"><![CDATA[
HTTP/1.1 401 Unauthorized
Content-Type: text/html
...
]]></sourcecode>
      <t>The content of the HTTP 401 response is a login page.  The user logs in, perhaps via third-party OAuth or using WebAuthn.  Once login is complete, the final step navigates back to the authorization path.  This time, the request includes an additional Cookie header:</t>
      <sourcecode type="HTTP"><![CDATA[
GET /scanner-login HTTP/1.1
Host: corp.example.com
Accept: text/html,...
Accept-Language: en-US,...
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Cookie: login=6bb0e2c8-874e-44c8-b8e0-25e12f339b46
...
]]></sourcecode>
      <sourcecode type="HTTP"><![CDATA[
HTTP/1.1 200 OK
Content-Type: text/html
...
]]></sourcecode>
      <t>The client detects this response and closes the browser context.  Instead, it displays a notification:</t>
      <artwork><![CDATA[
+---------------------------------+
| You have successfully logged in |
| to "corp.example.com".          |
|                                 |
|               OK                |
+---------------------------------+
]]></artwork>
      <t>The client then retries the initial request, with the additional Cookie header:</t>
      <sourcecode type="HTTP"><![CDATA[
POST /scan HTTP/1.1
Host: corp.example.com
Accept: application/json
Content-Type: application/x-msdownload
Content-Length: 123456
Cookie: login=6bb0e2c8-874e-44c8-b8e0-25e12f339b46
...
]]></sourcecode>
      <t>The server accepts the cookie as authorization and replies with its scan results:</t>
      <sourcecode type="HTTP"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
...

{"scan_result": "safe"}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification grants noninteractive HTTP origins the ability to become interactive, surfacing arbitrary content to the user.  This raises a number of security concerns.</t>
      <t>One important concern is "domain impersonation", in which the initial URL's origin poses as a different origin, in order to trick the user into revealing their password or taking some other harmful action.  This is mitigated by displaying the current origin's hostname to the user in the browser context (as normally done by browsers and recommended in <xref target="client"/>).</t>
      <t>Another concern is related to "clickjacking" attacks, in which a hostile origin causes a user to interact with the wrong user interface.  For example, if the hostile origin places an "OK" button at the expected location of a system security setting, the origin might be able to close the browser window just before the user clicks, causing them to change the security setting instead.  Clickjacking is prevented by the interstitial notifications when entering and exiting interactive mode (recommended in <xref target="client"/>).</t>
      <t>Web browsers also offer an expanded attack surface related to software vulnerabilities.  If the "initial URL" has significant potential to be malicious, and an up-to-date web browser is not available, this specification may not be appropriate to implement.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Authenticating noninteractive requests also makes them more identifiable and linkable.  Standards developers should consider whether authentication is necessary and appropriate before incorporating this procedure into their standard.</t>
      <ul empty="true">
        <li>
          <t>TODO: Language on clearing cookies.  If the authentication is allowed to use an ephemeral browser context, what does it mean to clear cookies?</t>
        </li>
      </ul>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IF APPROVED, IANA is requested to add the following entry to the "HTTP Authentication Schemes" registry:</t>
      <ul spacing="normal">
        <li>Authentication Scheme Name: "interactive"</li>
        <li>Reference: (This document)</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <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>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/Fqc8qkFkTA6opdn+F3IL++Bg0PR3rcjUoQ9BSwYE5cbuzVVvIlmUzRdkPb0
fUHuegXKGRsvipxO5ryd6H1OKM+Sc1KF3BnEFwRd2Pirdze38UT+Va+v+ee3
l3959/Lt5XP6+ebF+dVV+0PkV9y8uH539bz7qfvy4vrVq8vXz+VjPFWDR1H8
6vynWKQYX7+5fXn9+vwqFvOFttIiaTYcDSrO5RdGGEYyXrO8o9S4pLILn9xe
vPnv/zp7pj59+qe3P1w8PTv7w+fP/pdvz755hl+oopXTOFjLr5DaPkKBYjSZ
NUU3yp9tjeA/IZ2Sl5JJVVTxfvXvJJn/mKt/WSTl2bM/+gfE8OBhkNngIcvs
8MnBxyLEI4+OHNNKc/B8JOkhvec/DX4Pcu89JKu56YfQKHpvuAaCPtgQzUdK
NJCoSDSAHgj+WlyF7XICtbQdkMXBiRFD4hBz2gAAqgKKtjnAkTzy6CvybKrW
AgpPxHyGSUC7JjNb3VaPPiYUvij0xHCwNSmH2sbBZcmPIJLO+3AMWSYc6OWw
oPQv3YjESd99Resw4gYpFecYz56cqfhd3sFTHBK4eJyAxyEDl24AfUJdRJBD
LA6aDOqklxDCtD99ssiDP38+nYnw/UYS7Lc6a6AGMmauZSiWEPZpStCQnlN8
pTQdnpoVvrnpaZBPbcg8kLms1Qmr/DCnWXPnoRdySfF8oM2R7VJqxkH+Xr5d
iD0UwWStb+sRJIwgleUC9I3OkXn8+fK2y8+KYxAslPtC1lFNIqGR7KAfhsDl
qYgKkIRS4oNJ2i35s+PpAVtM2Ksy9BX7zICk3hkQ1GtE7vnx9RQp1nrr2zTw
QUv9BfIOKGtdwAtCI+bN9c3txKcyXDHxZ936L1GLr8gGjsiuTygE/FDxMhlL
1LVjFxGBeq/QlBeX1Anj9asGeOK67ku9ropmtT56iCTKAWBC3sybU2nFNgZI
SjRKK5/VelThXgIlHfzwYfxMPMW0lVZP//rXLmdKqNA48er2RzAK7byth+Pb
Bux9/RiBH6k/h+r59Eg2/twCURJWJQYYQBH/XogxVVVU/xtAw8W4D1EAWWp5
9FTl5dmzl9+44FjD6vv+dGbSExmlpRtLhQIFH/aNIjNcrUi6xOjfHbAw9BV7
CfKzQZOUurYhgyZqQRgyAWTgOuvzxH3j+wy6TY17uNhBJvdBgy3bXl8+9OC7
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
nhIuNQAA

-->

</rfc>
