<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version  -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY SELF "RFC nnnn">
]>

<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc ipr="trust200902" docName="draft-williams-http-bearer-extension-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>HTTP Bearer Auth Method Extensions</title>

    <author initials="N." surname="Williams" fullname="Nico Williams">
      <organization></organization>
      <address>
        <postal>
          <postalLine>Austin</postalLine>
          <postalLine>United States</postalLine>
        </postal>
        <email>nico@cryptonector.com</email>
      </address>
    </author>

    <date />

    <area>Web and Internet Transport</area>
    <workgroup>HTTP</workgroup>
    <keyword>HTTP, Bearer, Authentication, OAuth</keyword>

    <abstract>


<t>This document specifies an improved HTTP 401 and 407 flow for Bearer
authentication where user-agents (or client applications) can
automatically fetch requested tokens from a Security Token Service
(STS).  A fallback to an OpenID Connect (OIDC) redirect flow is
included.</t>

<t>This improved 401/407 Bearer flow, when used, elides the need for Proof
Key for Code Exchange (PKCE) and does not impose on application
Universal Resource Identifier (URI) query parameter design.  As well
this extension allows for user-agent caching of tokens.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-williams-http-bearer-extension/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        NETWORK Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/nicowilliams/http-bearer-ext"/>.</t>
    </note>


  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>HTTP <xref target="HTTP"/> has a number of authentication methods available,
including Bearer <xref target="BEARER"/> that uses OAuth 2.0 <xref target="OAUTH2"/>, which is the
subject of this document.  Some HTTP authentication methods, like
Negotiate <xref target="NEGOTIATE"/>, allow the user-agent to automatically respond
to a <spanx style="verb">401</spanx> or <spanx style="verb">407</spanx> status response when possible by creating a token
locally using the GSS-API <xref target="GSSAPI"/>, typically using Kerberos
<xref target="KERBEROS"/>.  However, the Bearer method effectively requires that the
client application respond to the <spanx style="verb">401</spanx>/<spanx style="verb">407</spanx> authentication request
rather than the HTTP user-agent, and it provides little metadata that
either can use to figure out how to obtain a Bearer token.  Today an
OAuth application just has to know how to obtain the Bearer token, and
has to be configured appropriately, and this greatly limits the
applicability of the <spanx style="verb">401</spanx>/<spanx style="verb">407</spanx> flows.</t>

<t>Note that we will mostly refer to <spanx style="verb">401</spanx> flows here, but everything that
applies to <spanx style="verb">401</spanx> flows also applies to <spanx style="verb">407</spanx> flows.</t>

<t>Here we specify extension auth-params to the <spanx style="verb">401</spanx> WWW-Authenticate:
Bearer HTTP response so that either the client application or the
user-agent can figure out how to obtain the requested token after
applying local policy.</t>

<t>As well we provide a way to improve the OIDC redirect flow to make use
of this extension where possible, and this provides a migration path to
a world where URI q-param camping and PKCE <xref target="PKCE"/> and code-to-token
conversions are no-longer needed just to use OAuth 2.x.</t>

<t>The extended Bearer <spanx style="verb">401</spanx> flow presented here is a glorified redirect
that avoids the need for camping on the application's URI q-params.</t>

<section anchor="motivation"><name>Motivation</name>

<section anchor="automation-of-bearer"><name>Automation of <spanx style="verb">Bearer</spanx></name>

<t>In general it would be better for user-agents to know how to execute
HTTP auth methods, and generally they do, except for <spanx style="verb">Bearer</spanx>, where
they often only know when the application has provided the user-agent
with a token ahead of it being needed.</t>

<t>Some user-agents, such as for example (at the time of this writing)
<spanx style="verb">curl</spanx>, do not support redirect flows quite well enough.  This causes
users to work around these limitations by, for example, scripting around
these user-agents' limitations.</t>

<t>In order to make such user-agents automatically fetch tokens we want
improve the <spanx style="verb">401</spanx> Bearer flow so that the user-agent can learn where and
how to acquire a token.  This necessitates <bcp14>OPTIONAL</bcp14> local policy, but
only because some such user-agents do not enable redirect following by
default, whereas browser-type user-agents chase redirects by default.</t>

</section>
<section anchor="making-oauth-oidc-and-saml-not-camp-on-uri-design"><name>Making OAuth, OIDC, and SAML not Camp on URI Design</name>

<t>Besides automatic Bearer token fetching in tools such as <spanx style="verb">curl</spanx> there is
also the desire to not impose on application URI design.</t>

</section>
<section anchor="reducing-load-on-token-issuers-by-facilitating-token-caching"><name>Reducing Load on Token Issuers by Facilitating Token Caching</name>

<t>By making auth requests a first-class operation (by using <spanx style="verb">401</spanx> where
possible instead of a redirect) and the user-agent responsible for
executing auth request we make it possible for the user-agent to cache
tokens during their remaining lifetime.  This allows for a significant
reduction in issuer load in some cases.</t>

<t>The token cache can be in-memory or stored in local storage (e.g., a
local filesystem) for sharing among the user's non-browser applications,
further reducing issuer load.</t>

</section>
<section anchor="enabling-the-use-of-bearer-for-proxy-auth"><name>Enabling the Use of <spanx style="verb">Bearer</spanx> for Proxy Auth</name>

<t>Currently <spanx style="verb">Bearer</spanx> cannot be used for proxy auth (<spanx style="verb">407</spanx>) in browsers as
browsers do not know how to fetch the required token.</t>

<t>For many users this means being stuck with the New Technology LAN
Manager (NTLM) mechanism via <spanx style="verb">Negotiate</spanx> <xref target="NEGOTIATE"/>, or Kerberos
<xref target="KERBEROS"/> via <spanx style="verb">Negotiate</spanx>, or SCRAM <xref target="SCRAM"/>.  But NTLM is weak and
dangerous, Kerberos is often seen as legacy that one should be able to
avoid, and SCRAM requires passwords and thus is not a single-sign-on
solution.</t>

<t>Maintaining infrastructure for many auth methods is a burden on
operators.  Operators would like to reduce that burden.  And many
operators want to be able to use OAuth as the primary or only auth
method.  But there is a long tail of work to do to make OAuth a
replacement for Kerberos.  Proxy auth is part of that long tail, thus by
eliminating that part of the long tail we make the tail shorter.</t>

</section>
</section>
<section anchor="notational-conventions"><name>Notational Conventions</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>
<section anchor="Section-2"><name>Extended <spanx style="verb">401</spanx> <spanx style="verb">WWW-Authenticate: Bearer</spanx> Flow</name>

<t>Currently the following auth-params are supported in a <spanx style="verb">401</spanx> response with
<spanx style="verb">WWW-Authenticate=Bearer</spanx>:</t>

<t><list style="symbols">
  <t><spanx style="verb">realm</spanx></t>
  <t><spanx style="verb">scope</spanx></t>
  <t><spanx style="verb">error</spanx></t>
  <t><spanx style="verb">error_description</spanx></t>
  <t><spanx style="verb">error_uri</spanx></t>
</list></t>

<t>We add the following additional, <bcp14>OPTIONAL</bcp14> auth-params:</t>

<t><list style="symbols">
  <t><spanx style="verb">issuer</spanx> with a URI as a value</t>
  <t><spanx style="verb">server_token_type</spanx> with a token type Universal Resource Name (URN)
as a value</t>
  <t><spanx style="verb">server_token</spanx> with a token to be forwarded to the <spanx style="verb">issuer</spanx> by the
user-agent or client application</t>
  <t><spanx style="verb">state</spanx> with a "state" value -- this corresponds to the OIDC <spanx style="verb">state</spanx>
q-param in a redirect to the OpenID provider</t>
</list></t>

<t>The <spanx style="verb">issuer</spanx> parameter allows the user-agent or client application to
discover the URI of a Security Token Service (STS) to visit to get a
token.  Though of course a user-agent or client application could map a
<spanx style="verb">realm</spanx> auth-param value to an STS URI, or even the realm could consist
of an issuer URI, however by having an auth-param intended to carry an
issuer URI we avoid ambiguities about the meaning of "realm".</t>

<t>The <spanx style="verb">server_token</spanx> auth-param allows the server to pass a cryptographic
token to the issuer via the user-agent's or client application's
subsequent request to the issuer.  The user-agent or client application
will set a new requested header <spanx style="verb">Token-Request-Pref</spanx> to the value in the
<spanx style="verb">401</spanx> response's <spanx style="verb">server_token</spanx> auth-param.</t>

<t>Essentially this functions like a redirect response, but with a <spanx style="verb">401</spanx>
status code and with the <spanx style="verb">Server-Token</spanx> and <spanx style="verb">Server-Token-Type</spanx> carrying
the token and token type from the <spanx style="verb">server_token</spanx> and <spanx style="verb">server_token_type</spanx>
auth-params respectively, if present.</t>

<t>The user-agent and/or client application <bcp14>MUST</bcp14> apply local policy, where
any is set, as to whether to execute a token request against the
requrested issuer.</t>

<t>When making the token request to the issuer the user-agent or client
application <bcp14>MUST</bcp14> also set the following fields:</t>

<t><list style="symbols">
  <t><spanx style="verb">Referer</spanx>, as if the <spanx style="verb">401</spanx> response had been a redirect</t>
  <t>a new <spanx style="verb">Token-Request</spanx> header to indicate that the request is in
response to an extended Bearer token request by the server</t>
  <t><spanx style="verb">Token-Request-Token</spanx>, set to the token from the
<spanx style="verb">server_token</spanx> auth-param, if present</t>
</list></t>

<t>When making the token request to the issuer the user-agent or client
application <bcp14>SHOULD</bcp14> also set the following fields:</t>

<t><list style="symbols">
  <t><spanx style="verb">Token-Request-Auth-Params</spanx>, with all auth-params other than the
<spanx style="verb">issuer</spanx> and <spanx style="verb">server_token</spanx> parameters.</t>
</list></t>

<t>When the STS supports this feature then a successful response <bcp14>MUST</bcp14> be a
<spanx style="verb">200</spanx> status code response if successful rather than a <spanx style="verb">3xx</spanx> redirect
response, with a field <spanx style="verb">Location</spanx> field set to the value of the
<spanx style="verb">Token-Request-URI</spanx> field (if present) from the request to the STS and
with the issued token in the response body.</t>

<t>The value forms of these headers are specified <xref target="New-fields">below</xref>.</t>

<section anchor="example-flow"><name>Example flow</name>

<t>Request to <spanx style="verb">https://some.origin.example/some/resource</spanx>:</t>

<figure><sourcecode type="http-message"><![CDATA[
GET /some/resource HTTP/1.1
Host: some.origin.example
]]></sourcecode></figure>

<t>Here the user-agent or client <bcp14>MAY</bcp14> use a new field, <spanx style="verb">Token-Request-Pref</spanx>,
to indicate a preference for <spanx style="verb">401</spanx> or <spanx style="verb">3xx</spanx> flows.  Not specifying a
preference allows the server to honor that preference instead of having
to guess it from fingerprinting the user-agent.</t>

<t>The server may not support this feature, in which case it will either
use an unextended <spanx style="verb">401</spanx> <spanx style="verb">WWW-Authenticate: bearer</spanx> or a <spanx style="verb">3xx</spanx> OIDC
redirect flow.  Here we show the server responding with an extended
<spanx style="verb">401</spanx> <spanx style="verb">WWW-Authenticate: Bearer</spanx>:</t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 401 Authentication required
WWW-Authenticate: Negotiate
WWW-Authenticate: Bearer issuer=https://iam.foo.example/v1/token
        scope=read:some/resource
        server_token=Bearer:<some-JWT>
]]></sourcecode></figure>

<t>Token request to STS:</t>

<figure><sourcecode type="http-message"><![CDATA[
POST /v1/token
Host: iam.foo.example
Token-Request-Auth-Params: scope=read:some/resource
Token-Request-Token: Bearer:<some-JWT>
Token-Request-URI: https://some.origin.example/some/resource

grant_type=urn:ietf:params:oauth:grant-type:token-exchange&
audience=some.origin.example&
scope=read:some/resource&
...
]]></sourcecode></figure>

<t>The token request to the STS may elicit a <spanx style="verb">401</spanx> response instructing the
user-agent or client application to authenticate in some manner.  For
example, an STS might use <spanx style="verb">Bearer</spanx> with a "token granting token" that
the user-agent just has to have a priori (how such a
token-granting-token is acquired and refreshed is out of scope for this
document), and/or it might use <spanx style="verb">Negotiate</spanx>, <spanx style="verb">Basic</spanx>, or other
authentication methods.  The user-agent or client application might also
be configured to know which authentication methods a given issuer might
require and thus "pre-flight" an <spanx style="verb">Authorization</spanx> field in the token
request to the STS.  We elide the <spanx style="verb">401</spanx> and retry here for brevity.</t>

<t>It is also possible that an STS might issue a redirect or extended <spanx style="verb">401</spanx>
flow to another STS.  This too is elided here, but the user-agent <bcp14>MUST</bcp14>
save the state from the first token request, process the second, return
to the first STS, and retry the first request with the newly acquired
credential.</t>

<t>Thus after any authentication exchanges, a successful response from the
STS if it supports this feature is a <spanx style="verb">200</spanx> <spanx style="verb">Ok</spanx> response with a
<spanx style="verb">Location</spanx> field to remind the user-agent or client its state (but the
user-agent or client <bcp14>MUST</bcp14> recall this metadata anyways):</t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 Ok
Location: https://some.origin.example/some/resource

<token>
]]></sourcecode></figure>

<t>XXX Well, perhaps we should dispense with the <spanx style="verb">Location</spanx> field here
given that we require the user-agent/client to know that anyways.</t>

<t>XXX It might be desirable to allow the STS to tell the user-agent to set
some select fields in its return request to the origin, perhaps headers
named <spanx style="verb">Token-Response*</spanx> or specifically <spanx style="verb">Authorization</spanx>.</t>

<t>Otherwise if the STS does not support this feature but it would issue
the token then it should issue a code and respond with a redirect as in
an OIDC redirect flow:</t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 302 Found
Location: https://some.origin.example/some/resource?code=..&state=..
]]></sourcecode></figure>

<t>The user-agent or client <bcp14>MUST</bcp14> remember the URI in case the STS responds
with <spanx style="verb">200</spanx> <spanx style="verb">Ok</spanx> with the token as the response body and without a
<spanx style="verb">Location</spanx> field.</t>

<t>Armed with the requisite token (if it was issued), the user-agent/client
<bcp14>SHOULD</bcp14> retry the original request with the <spanx style="verb">Authorization</spanx> field set to
<spanx style="verb">Bearer &lt;token&gt;</spanx> with the token returned by the STS.</t>

<t>Note that the extended <spanx style="verb">Bearer</spanx> <spanx style="verb">401</spanx> flow <bcp14>MUST NOT</bcp14> change the browser's
window location when the user-agent is a browser.  Instead the
user-agent <bcp14>MUST</bcp14> execute the STS request and then retry the original
request (if the STS response is successful) in the same sort of way that
it would perform any Kerberos KDC exchanges had the selected HTTP
authentication method been Negotiate <xref target="NEGOTIATE"/>, that is: the STS
interaction <bcp14>MUST NOT</bcp14> be visible to any scripts on the web page that
produced the <spanx style="verb">401</spanx> response.</t>

</section>
<section anchor="server-response-type-selection"><name>Server Response Type Selection</name>

<t>When a server needs the client to authenticate or obtain a new access
token (with different scopes), it can respond with a <spanx style="verb">3xx</spanx> redirect or a
<spanx style="verb">401</spanx>.  The server needs to be able to decide which to use.</t>

<t>When the client includes a <spanx style="verb">Token-Request-Pref</spanx> field in its request,
the server that supports extended <spanx style="verb">401</spanx> flows <bcp14>SHOULD</bcp14> use the client's
preference.</t>

<t>Otherwise the server should use local configuration, possibly including
user-agent fingerprinting (such as by user-agent substring matching), to
pick a response type.  When the user-agent is interactive the server can
return a <spanx style="verb">401</spanx> with a body with a script that will load a page that will
trigger an OIDC redirect flow, possibly after a few seconds, or with a
link that the user can click on.  Or the server can expose a way for the
user to choose the flow to use, though this presumably will not usually
be done except for debugging or demonstration purposes.</t>

</section>
<section anchor="user-agent-use"><name>User-Agent Use</name>

<t>Ideally user-agents will implement the <spanx style="verb">401</spanx> flow, but typically they
will not include the <spanx style="verb">Token-Request-Pref</spanx> field in their requests,
either at all or unless configured to do so (possibly only for some
sites).</t>

<t>Reasons for not including the <spanx style="verb">Token-Request-Pref</spanx> field include:</t>

<t><list style="symbols">
  <t>avoiding request bloat</t>
  <t>avoiding fingerprinting</t>
</list></t>

<t>User-agents <bcp14>SHOULD</bcp14> be configurable, possibly using a list of sites and
domainname stems for selecting when to include this header.</t>

</section>
<section anchor="client-application-use"><name>Client Application Use</name>

<t>Client applications can also implement the extended <spanx style="verb">401</spanx> flow as they
would a regular unextended <spanx style="verb">401</spanx> flow.</t>

<t>As with user-agents, when it is the client application that implements
the extended <spanx style="verb">401</spanx> flow the application <bcp14>SHOULD</bcp14> have local policy and
configuration.</t>

</section>
<section anchor="mapping-realm-to-issuer"><name>Mapping <spanx style="verb">realm</spanx> to <spanx style="verb">issuer</spanx></name>

<t>For the non-extended <spanx style="verb">401</spanx> case, user-agents and clients can be
configured to map the <spanx style="verb">realm</spanx> auth-param to an <spanx style="verb">issuer</spanx>, and engage in
the extended <spanx style="verb">401</spanx> flow anyways.</t>

</section>
<section anchor="token-caching"><name>Token Caching</name>

<t>Where a user-agent or client application implements this extended Bearer
<spanx style="verb">401</spanx> flow it can and <bcp14>SHOULD</bcp14> also implement some sort of token cache to
alleviate load on STSes and to improve availability.  Proxies, however,
should never cache token request responses, and the STS <bcp14>SHOULD</bcp14> set the
<spanx style="verb">Cache-Control</spanx> field accordingly to include the the following
directives:</t>

<t><list style="symbols">
  <t><spanx style="verb">no-cache</spanx>, unqualified</t>
  <t><spanx style="verb">max-age</spanx> set to the number of seconds after which the token should
not be used due to impending expiration</t>
  <t><spanx style="verb">s-maxage=0</spanx> so as to reinforce that shared caches must not cache
this token</t>
</list></t>

<t>If the <spanx style="verb">Cache-Control</spanx> is absent then the user-agent or client <bcp14>MAY</bcp14>
infer:</t>

<t><list style="symbols">
  <t><spanx style="verb">no-cache</spanx>, unqualified</t>
  <t><spanx style="verb">max-age</spanx> with any lifetime it can glean from the token if that
metadata is unencrypted in the token</t>
</list></t>

<t>Similarly, if <spanx style="verb">Cache-Control</spanx> but <spanx style="verb">no-cache</spanx> is absent then the
user-agent or client <bcp14>MAY</bcp14> infer it, and if <spanx style="verb">max-age</spanx> is absent then the
user-agent or client <bcp14>MAY</bcp14> infer it as well.</t>

</section>
</section>
<section anchor="extended-redirect-flow"><name>Extended Redirect Flow</name>

<t>The extended redirect flow has a normal <spanx style="verb">3xx</spanx> response from the server
but with the <spanx style="verb">WWW-Authenticate</spanx> field present, possibly including new
auth-params.</t>

<t>Note well that some user-agents terminate <spanx style="verb">3xx</spanx> response processing as
soon as they see the expected <spanx style="verb">Location</spanx> field, and thus may not see a
<spanx style="verb">WWW-Authenticate</spanx> field if it comes after, and note that proxies are
allowed to reorder fields (but not field values for multi-valued
fields), therefore it is not possible for a server to reliably count on
the <spanx style="verb">WWW-Authenticate</spanx> field being seen by the client.</t>

<t>Still, when a client sees the <spanx style="verb">WWW-Authenticate</spanx> field then it <bcp14>SHOULD</bcp14>
act as though the response was a <spanx style="verb">401</spanx> response engaging in an extended
OAuth <spanx style="verb">401</spanx> flow.</t>

</section>
<section anchor="negotiation-of-401-vs-redirect-flows"><name>Negotiation of 401 vs Redirect Flows</name>

<t>A server may only support redirect flows, only <spanx style="verb">401</spanx> flows, or it may
support negotiation as described here.  Ideally all servers will
eventually support negotiation, and/or all user-agents will support the
extended Bearer <spanx style="verb">401</spanx> flow.</t>

<t>The <spanx style="verb">Token-Request-Pref</spanx> field has two values: <spanx style="verb">401</spanx> and <spanx style="verb">redirect</spanx>.
When present the server <bcp14>SHOULD</bcp14> use the expressed preference if it needs
a new token.</t>

<t>When this field is absent the server must choose a response type using
configuration and user-agent fingerprinting.</t>

</section>
<section anchor="local-policy"><name>Local Policy</name>

<t>Local policy is <bcp14>OPTIONAL</bcp14>.  When present, local policy expresses:</t>

<t><list style="symbols">
  <t>whether to enable automatic token request handling when using the
extended Bearer <spanx style="verb">401</spanx> flow</t>
  <t>allow lists for issuers and/or realms</t>
  <t>mappings of realms to issuers</t>
  <t>authentication methods to allow at each issuer, if any</t>
  <t>global and site-specific flow type preferences, and whether to
express those flow type preferences via the <spanx style="verb">Token-Request-Pref</spanx>
field</t>
  <t>for each allowed issuer optionally record its authentication method
preferences so that the user-agent or client application may
pre-flight an <spanx style="verb">Authorization</spanx> field in the token requests to that
issuer</t>
</list></t>

</section>
<section anchor="New-fields"><name>New fields</name>

<t><list style="symbols">
  <t><spanx style="verb">Token-Request-Pref</spanx> is a structured field of kind Item with a value
of "401" or "redirect"</t>
  <t><spanx style="verb">Token-Request</spanx> is a structured field of kind Item with a value of
"true" if present</t>
  <t><spanx style="verb">Token-Request-Token</spanx> is a structured field of kind Item with a token
as its value</t>
  <t><spanx style="verb">Token-Request-Auth-Params</spanx> is a structured field of kind List with
the <spanx style="verb">401</spanx> response's auth-params from the <spanx style="verb">WWW-Authenticate: Bearer</spanx>
field</t>
  <t><spanx style="verb">Token-Request-URI</spanx> is a field of kind Item containing the URI that
requested the token</t>
</list></t>

</section>
<section anchor="new-auth-params"><name>New auth-params</name>

<t><list style="symbols">
  <t><spanx style="verb">issuer</spanx></t>
  <t><spanx style="verb">server_token_type</spanx></t>
  <t><spanx style="verb">server_token</spanx></t>
  <t><spanx style="verb">state</spanx></t>
</list></t>

<t>See <xref target="Section-2">section 2</xref> for details.</t>

</section>
<section anchor="wider-applicability-negotiate-auth-wo-gss-or-kerberos-implementations"><name>Wider Applicability: Negotiate Auth w/o GSS or Kerberos Implementations!</name>

<t>This section is INFORMATIONAL.</t>

<t>A similar extension design can be applied to the <spanx style="verb">Negotiate</spanx> HTTP auth
method that would allow user-agents to support <spanx style="verb">Negotiate</spanx> without
having a local implementation of the GSS-API <xref target="GSSAPI"/>, Kerberos
<xref target="KERBEROS"/>, or other GSS mechanisms.  All that would be needed is an
STS-like service that itself can issue Kerberos tickets or can
impersonate users to a Kerberos Key Distribution Center (KDC) and thus
obtain tickets on their behalf, then the STS can mint GSS-API tokens for
the Kerberos mechanism <xref target="GSSKRB5"/>.  The rest of the flow would be
remarkably similar to the extended Bearer <spanx style="verb">401</spanx> flow.</t>

<t>An implementation of such an Negotiate token issuer could have a
certification authority credential to mint user certificates for use
with PKINIT <xref target="PKINIT"/> to impersonate users to a Kerberos KDC.  Thus
such a service would not need intimate access to the KDC's key database,
and can be interoperate with any KDC implementation that supports
PKINIT.  In all cases such a service would be as security-sensitive as a
KDC, and would best be seen as part of the KDC, and for discovery
purposes should probably be co-located with the KDC.</t>

<t>As in the case of <spanx style="verb">Bearer</spanx> an <spanx style="verb">issuer</spanx> URI auth-param for <spanx style="verb">Negotiate</spanx>
might be useful, though perhaps the user will have to have selected an
issuer from a server-provided list of choices.  In the case of Kerberos,
for example, the choice of token issuer will be dependent on the user's
credentials' issuer, thus local configuration at the user-agent will be
the best source of an <spanx style="verb">issuer</spanx> value for a <spanx style="verb">Negotiate</spanx> <spanx style="verb">401</spanx> flow that
resembles the extended <spanx style="verb">Bearer</spanx> <spanx style="verb">401</spanx> flow.  But even in the case of
Kerberos if the user-agent can help the server include the correct
<spanx style="verb">issuer</spanx> auth-param value then the flow can work in spite of the lack of
local configuration.</t>

</section>
<section anchor="single-sign-on"><name>Single Sign-On</name>

<t>This section is INFORMATIVE.</t>

<t>When engaging in an OIDC or SAML redirect flow, or an extended
<spanx style="verb">401</spanx>/<spanx style="verb">407</spanx> flow as in this document, ultimately the user-agent, the
client, and/or the user will have to authenticate the user to an issuer.
How that is done initially (e.g., with passwords, smartcards and PINs,
etc.) is out of scope here, but for Single Sign-On (SSO) one will want
to distinguish between "initial authentication" and non-initial
authentication (i.e., <em>not</em> passwords, smartcards, PINs, etc.), much
like Kerberos <xref target="KERBEROS"/> does.  A user-agent could use cookies, or a
"token-granting token" (similar to a Kerbero ticket-granting ticket,
both sharing the same acronym of 'TGT') to repeatedly authenticate to an
issuer for a limited time after which the user has to once again engage
in "initial authentication".</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>As there is no registry of HTTP auth method auth-params, we do not
register any of the new auth-params created here.  However, it might be
desirable to create such a registry before this document's publication
as an RFC.</t>

<t>This document registers several new HTTP fields listed below.</t>

<section anchor="http-field-registrations"><name>HTTP Field Registrations</name>

<t><list style="symbols">
  <t>Field Name: <spanx style="verb">Token-Request-Pref</spanx>  <vspace blankLines='1'/>
Status: permanent  <vspace blankLines='1'/>
Structured Type: Item  <vspace blankLines='1'/>
Reference: this document</t>
  <t>Field Name: <spanx style="verb">Token-Request</spanx>  <vspace blankLines='1'/>
Status: permanent  <vspace blankLines='1'/>
Structured Type: Item  <vspace blankLines='1'/>
Reference: this document</t>
  <t>Field Name: <spanx style="verb">Token-Request-Token</spanx>  <vspace blankLines='1'/>
Status: permanent  <vspace blankLines='1'/>
Structured Type: Item  <vspace blankLines='1'/>
Reference: this document</t>
  <t>Field Name: <spanx style="verb">Token-Request-Auth-Params</spanx>  <vspace blankLines='1'/>
Status: permanent  <vspace blankLines='1'/>
Structured Type: Item  <vspace blankLines='1'/>
Reference: this document</t>
  <t>Field Name: <spanx style="verb">Token-Request-URI</spanx>  <vspace blankLines='1'/>
Status: permanent  <vspace blankLines='1'/>
Structured Type: Item  <vspace blankLines='1'/>
Reference: this document</t>
</list></t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Existing user-agents that support redirect flows usually trust all
redirects.  As a result we make local policy <bcp14>OPTIONAL</bcp14> for use in the
automatic the extended Bearer <spanx style="verb">401</spanx> flow.  The specification of an
"abstract schema" for local policy is an improvement.</t>

<t>User-agents such as browsers <bcp14>MUST NOT</bcp14> allow scripts embedded or injected
into web pages to access to the STS responses from extended Bearer <spanx style="verb">401</spanx>
flow.  This is already the case, thus this requirement is not a new
requirement and does not impose on other working groups or standards
development organizations.</t>

<t>Apart from the above this document does not add new security
considerations beyond those of OAuth and OIDC, but it does remove the
need for "codes" and PKCE <xref target="PKCE"/> by not abusing URI q-params to carry
tokens or token-like "codes", instead carrying tokens only in the
<spanx style="verb">Authorization</spanx> field and in the STS response body invisible to scripts
on web pages.  As well by not abusing URI q-params no sensitive
cryptographic material such as "codes" and tokens can end up in
user-agent history nor in client- or server-side logs.</t>

<t>Thus this extended <spanx style="verb">Bearer</spanx> <spanx style="verb">401</spanx> flow is strictly an improvement in
security for OAuth.</t>

<t>But note that when the server does not implement the extended Bearer
<spanx style="verb">401</spanx> flow then a fallback to a redirect flow may happen, thus
user-agents and/or clients still need to implement PKCE <xref target="PKCE"/>.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>



<reference anchor='BEARER' target='https://www.rfc-editor.org/info/rfc6750'>
  <front>
    <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
    <author fullname='M. Jones' initials='M.' surname='Jones'/>
    <author fullname='D. Hardt' initials='D.' surname='Hardt'/>
    <date month='October' year='2012'/>
    <abstract>
      <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6750'/>
  <seriesInfo name='DOI' value='10.17487/RFC6750'/>
</reference>

<reference anchor='OAUTH2' target='https://www.rfc-editor.org/info/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='HTTP' target='https://www.rfc-editor.org/info/rfc9110'>
  <front>
    <title>HTTP Semantics</title>
    <author fullname='R. Fielding' initials='R.' role='editor' surname='Fielding'/>
    <author fullname='M. Nottingham' initials='M.' role='editor' surname='Nottingham'/>
    <author fullname='J. Reschke' initials='J.' role='editor' surname='Reschke'/>
    <date month='June' year='2022'/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='97'/>
  <seriesInfo name='RFC' value='9110'/>
  <seriesInfo name='DOI' value='10.17487/RFC9110'/>
</reference>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/rfc8174'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <date month='May' year='2017'/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='8174'/>
  <seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>




    </references>

    <references title='Informative References'>



<reference anchor='GSSAPI' target='https://www.rfc-editor.org/info/rfc2743'>
  <front>
    <title>Generic Security Service Application Program Interface Version 2, Update 1</title>
    <author fullname='J. Linn' initials='J.' surname='Linn'/>
    <date month='January' year='2000'/>
    <abstract>
      <t>This memo obsoletes [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='2743'/>
  <seriesInfo name='DOI' value='10.17487/RFC2743'/>
</reference>

<reference anchor='NEGOTIATE' target='https://www.rfc-editor.org/info/rfc4559'>
  <front>
    <title>SPNEGO-based Kerberos and NTLM HTTP Authentication in Microsoft Windows</title>
    <author fullname='K. Jaganathan' initials='K.' surname='Jaganathan'/>
    <author fullname='L. Zhu' initials='L.' surname='Zhu'/>
    <author fullname='J. Brezak' initials='J.' surname='Brezak'/>
    <date month='June' year='2006'/>
    <abstract>
      <t>This document describes how the Microsoft Internet Explorer (MSIE) and Internet Information Services (IIS) incorporated in Microsoft Windows 2000 use Kerberos for security enhancements of web transactions. The Hypertext Transport Protocol (HTTP) auth-scheme of "negotiate" is defined here; when the negotiation results in the selection of Kerberos, the security services of authentication and, optionally, impersonation (the IIS server assumes the windows identity of the principal that has been authenticated) are performed. This document explains how HTTP authentication utilizes the Simple and Protected GSS-API Negotiation mechanism. Details of Simple And Protected Negotiate (SPNEGO) implementation are not provided in this document. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4559'/>
  <seriesInfo name='DOI' value='10.17487/RFC4559'/>
</reference>

<reference anchor='KERBEROS' target='https://www.rfc-editor.org/info/rfc4120'>
  <front>
    <title>The Kerberos Network Authentication Service (V5)</title>
    <author fullname='C. Neuman' initials='C.' surname='Neuman'/>
    <author fullname='T. Yu' initials='T.' surname='Yu'/>
    <author fullname='S. Hartman' initials='S.' surname='Hartman'/>
    <author fullname='K. Raeburn' initials='K.' surname='Raeburn'/>
    <date month='July' year='2005'/>
    <abstract>
      <t>This document provides an overview and specification of Version 5 of the Kerberos protocol, and it obsoletes RFC 1510 to clarify aspects of the protocol and its intended use that require more detailed or clearer explanation than was provided in RFC 1510. This document is intended to provide a detailed description of the protocol, suitable for implementation, together with descriptions of the appropriate use of protocol messages and fields within those messages. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4120'/>
  <seriesInfo name='DOI' value='10.17487/RFC4120'/>
</reference>

<reference anchor='GSSKRB5' target='https://www.rfc-editor.org/info/rfc4121'>
  <front>
    <title>The Kerberos Version 5 Generic Security Service Application Program Interface (GSS-API) Mechanism: Version 2</title>
    <author fullname='L. Zhu' initials='L.' surname='Zhu'/>
    <author fullname='K. Jaganathan' initials='K.' surname='Jaganathan'/>
    <author fullname='S. Hartman' initials='S.' surname='Hartman'/>
    <date month='July' year='2005'/>
    <abstract>
      <t>This document defines protocols, procedures, and conventions to be employed by peers implementing the Generic Security Service Application Program Interface (GSS-API) when using the Kerberos Version 5 mechanism.</t>
      <t>RFC 1964 is updated and incremental changes are proposed in response to recent developments such as the introduction of Kerberos cryptosystem framework. These changes support the inclusion of new cryptosystems, by defining new per-message tokens along with their encryption and checksum algorithms based on the cryptosystem profiles. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4121'/>
  <seriesInfo name='DOI' value='10.17487/RFC4121'/>
</reference>

<reference anchor='SCRAM' target='https://www.rfc-editor.org/info/rfc7804'>
  <front>
    <title>Salted Challenge Response HTTP Authentication Mechanism</title>
    <author fullname='A. Melnikov' initials='A.' surname='Melnikov'/>
    <date month='March' year='2016'/>
    <abstract>
      <t>This specification describes a family of HTTP authentication mechanisms called the Salted Challenge Response Authentication Mechanism (SCRAM), which provides a more robust authentication mechanism than a plaintext password protected by Transport Layer Security (TLS) and avoids the deployment obstacles presented by earlier TLS-protected challenge response authentication mechanisms.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7804'/>
  <seriesInfo name='DOI' value='10.17487/RFC7804'/>
</reference>

<reference anchor='PKCE' target='https://www.rfc-editor.org/info/rfc7636'>
  <front>
    <title>Proof Key for Code Exchange by OAuth Public Clients</title>
    <author fullname='N. Sakimura' initials='N.' role='editor' surname='Sakimura'/>
    <author fullname='J. Bradley' initials='J.' surname='Bradley'/>
    <author fullname='N. Agarwal' initials='N.' surname='Agarwal'/>
    <date month='September' year='2015'/>
    <abstract>
      <t>OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the authorization code interception attack. This specification describes the attack as well as a technique to mitigate against the threat through the use of Proof Key for Code Exchange (PKCE, pronounced "pixy").</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7636'/>
  <seriesInfo name='DOI' value='10.17487/RFC7636'/>
</reference>

<reference anchor='PKINIT' target='https://www.rfc-editor.org/info/rfc4556'>
  <front>
    <title>Public Key Cryptography for Initial Authentication in Kerberos (PKINIT)</title>
    <author fullname='L. Zhu' initials='L.' surname='Zhu'/>
    <author fullname='B. Tung' initials='B.' surname='Tung'/>
    <date month='June' year='2006'/>
    <abstract>
      <t>This document describes protocol extensions (hereafter called PKINIT) to the Kerberos protocol specification. These extensions provide a method for integrating public key cryptography into the initial authentication exchange, by using asymmetric-key signature and/or encryption algorithms in pre-authentication data fields. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4556'/>
  <seriesInfo name='DOI' value='10.17487/RFC4556'/>
</reference>




    </references>


<section anchor="acknowledgements"><name>Acknowledgements</name>

</section>


  </back>

<!-- ##markdown-source:
H4sIAGiMMGkAA71c/XLbRpL/f55iVq6KpS1Skh0n2ajWeyvLcqyzLfkk+bxb
qVQEgkMSEQgwGFA0z+V9lnuWe7LrX3cPMAApO9m62/wRUwBmpqe/v2aGw6Gp
szp3R/bl9fVb+8wllavs8bKe2TeunpVje/qhdoXPysKbZDSq3N2RGZdpkcxp
zLhKJvVwleV5lsz9cFbXi+GIpxi6MGx4eGjGSU1ff3x+fH36yaT0x7Ss1kfW
12NjskV1ZOtq6evHh4ffHz42t269KquxQDRQkAYMkyvqjIbTrAN7gQeGvryd
VuVyIZ8b+jY5su/dyCbF2J4VtasKV9vrKin8oqxqY3xNb35O8rIgkNbOGz9P
qvrnX5dl7fyRLUqzyI7sj3WZDiz9LyvGtOrAehpcuYmnX+u5/qirLKVXaTlf
JPpjTh/Tq6zIs8L9ZMydK5buyFirQJ6fXr+/uHxFD+r1ggB4T/BnxdT+gNf0
dJ5k+ZHNXD0RbK6mf119vV9WU3qXVOnsyOKxPzo4yDNf+315eXBMr7I75w/e
Lkd5lh7EExzQ0MotynboNKtny9E+gXtQZGkZ6HfQo58xCaG4rAj8Ic1haVeE
oPN9+14H8EPhhHOap/ucwEqK7L+YWkf8ZFES7nP5be2QKOrrrOA/03JZ1GCJ
d0VWu7G9qolJZB4nKAGgf02r9aImwqV1WQF8Y4qymtMSd4zjZ6fHl6eXR/by
xcm3331zSE8ujt9dv3ysT558T0/AJfz3948eHRL3FZN2Bnr9w9XV8dsz/uDx
d0++pifnpz9cXJ8R5/LDJ998g1lenV4+O728uJJnjx4fytBXl8++CY8e0aOr
k8vjN/zguz8dPqEHb1+dyDzfffv1t/z32fnZdZj5W2PA4fUam7k6ff3iyO7Q
G1vQfzvGDIdDm4yI64jZjLmeZd6SJC7BctYvXJpNMueJ7202X1TlHaGRZfrJ
4SMWhieH39lJXq4s7ViligncCpVdzVzl7NIT/ZMpONnu0rdpnmGJZLHI9UO/
Z9OkwOgSuEuTPF/biavTGXHar0vnQcO6vCUNYCdVObeJvXLpsqKt2Ws8pj+r
uyx1Zvfq+mpv39pjO6FJRkl6S+Owh4uFK86e25OyALnt7sXZ85M9mn2cVfib
N5J5ol+aL8duvK8IabZOuz7AjlWj4fsB9ldge+OBdXk2JmzR9m3h6Hsg5W1V
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
Ih+bbGRRZk6Sok16qtGPgU2SaYLYkomGZ5XQW9mGrAKSThrJtojZymT3aiSz
uQlE5uCzrrWZZC4fB5tyibQ058RoM1mU125t4yyBB+9iZYqhwrxdXr0JLIx8
bDFmI9qmZ8J+UKPjmm+zhOilfi6ziwWxJSrkDHtXTITxBrLhMkJjYCiseK+A
xNzy/0APdap+C0W6u4I7MnzL3I28JYsiaY+Y6ctOsYZ3GczZhsxEFs4HvgMs
MAnqIWmkOnEJR1HwhhCBLVOkxybLvKUaMxmCHXPz+PCwKZqxbmg+IrTGY6PK
EqmUrz98uGmZqlU7qnIYL/bmdSlYvNEHEYVFHUqAYnqoI3sTRuy2xN1rFUyP
nsABIt1GpTEWg25q6hW6r1E5XqtaESDQROAVFEgNC4L6nlqZH9sfR45o/tPu
A4r2h0L2PYmaTjUBjKSmMZctaDehZQOZm/2yyqZZsa85WX52UKkbBz/1H//4
B/d4DOeEceJI88Ppte1+xqWdg0f7j8zL0tdHdsu8mEbLSfc6QOTcc3greoD3
MthqugYm1gYJCAGdU6QSoreVV+YGqWVZRJGhjsVuhomGbbX5s7LgzBqi1vbT
KKUnDguAmRJwHkk5ZoVJhswGBeZFnUWpKtmwkliXmSfrTuI9lhR0/GiFG+k1
Lm7A0EvJzDCqCrss3BejnZFGO5zXE6zAxTWdND+KxKHcN9Nqt0Kp/jE2I4LU
qlbzpRBrGwsFfuE2kuPNkjGyXmZzxibPtOWdanjRU08Dh2fkqEzKsuHuu0cH
UiKz+h+HXU/JMxwfdVi6/SDSdRq9Hf0Znw7//f31X4Str/vKnAR/27bfXpB6
a2EQYemBaO7V1kf3A7vFbgWMxMBuaLO2e+uLqsAY8nqLml2kp8uqOEI32JFG
kyWsxxF/wNWGI97g0Gmfy1fkUo0zSM/TLet8Ze7b11dmf39fUXyfzYSOhRA5
soxZvRmHQ1yRv1NBNL8h9IqbGFyT4Z4nRcEe+QvOzmsFS4OfeTadcaNKmxgO
MadAzbhhGPDnjpTke5ow7kMg1SKaLSNk2V3Io5RLJOgYhvmGakt8KEKN2UST
uiIMzNgj5Do5aSvGshYLMm9CgmpvEFxXQl+0jzipe/Ms8Vkq2V12Dvo9XpoL
/Y3xii4D38V0GyhCcVa03n29Q3aa3bkmjOTJjKqNNtW7Qzp7OMnxcgdkujnm
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
0f6eu/FUu2jM/wKfyI/cF10AAA==

-->

</rfc>

