Protecting Credentials with HTTP APIs
draft-ietf-httpapi-privacy-06
| Document | Type | Active Internet-Draft (httpapi WG) | |
|---|---|---|---|
| Authors | Rich Salz , Mike Bishop , Marius Kleidl | ||
| Last updated | 2026-06-09 (Latest revision 2026-05-11) | ||
| Replaces | draft-rsalz-httpapi-privacy | ||
| RFC stream | Internet Engineering Task Force (IETF) | ||
| Intended RFC status | Best Current Practice | ||
| Formats | |||
| Reviews |
HTTPDIR Early review
(of
-02)
by Mark Nottingham
On the right track
|
||
| Additional resources | Mailing list discussion | ||
| Stream | WG state | Submitted to IESG for Publication | |
| Document shepherd | Darrel Miller | ||
| Shepherd write-up | Show Last changed 2025-11-23 | ||
| IESG | IESG state | RFC Ed Queue | |
| Action Holders |
(None)
|
||
| Consensus boilerplate | Yes | ||
| Telechat date | (None) | ||
| Responsible AD | Gorry Fairhurst | ||
| Send notices to | darrel@tavis.ca | ||
| IANA | IANA review state | Version Changed - Review Needed | |
| IANA action state | No IANA Actions | ||
| RFC Editor | RFC Editor state | In Progress | |
| Details |
draft-ietf-httpapi-privacy-06
Building Blocks for HTTP APIs R. Salz
Internet-Draft M. Bishop
Intended status: Best Current Practice Akamai Technologies
Expires: 12 November 2026 M. Kleidl
Transloadit
11 May 2026
Protecting Credentials with HTTP APIs
draft-ietf-httpapi-privacy-06
Abstract
Redirecting HTTP requests to HTTPS is a common pattern for human-
facing web resources. When done for authenticated HTTP API traffic,
client credentials are exposed to the network. This document
discusses the pitfalls of the redirect approach and makes deployment
recommendations for authenticated HTTP APIs. It does not specify a
protocol.
About This Document
This note is to be removed before publishing as an RFC.
The latest revision of this draft can be found at https://ietf-wg-
httpapi.github.io/draft-ietf-httpapi-privacy/draft-ietf-httpapi-
privacy.html. Status information for this document may be found at
https://datatracker.ietf.org/doc/draft-ietf-httpapi-privacy/.
Discussion of this document takes place on the Building Blocks for
HTTP APIs Working Group mailing list (mailto:httpapi@ietf.org), which
is archived at https://mailarchive.ietf.org/arch/browse/httpapi/.
Subscribe at https://www.ietf.org/mailman/listinfo/httpapi/.
Source for this draft and an issue tracker can be found at
https://github.com/ietf-wg-httpapi/httpapi-privacy.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Salz, et al. Expires 12 November 2026 [Page 1]
Internet-Draft privacy May 2026
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 12 November 2026.
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Conventions and Definitions . . . . . . . . . . . . . . . 4
2. Server Recommendations . . . . . . . . . . . . . . . . . . . 4
2.1. Pre-Connection Redirects . . . . . . . . . . . . . . . . 4
2.2. Connection Blocking . . . . . . . . . . . . . . . . . . . 4
2.3. Credential Restriction . . . . . . . . . . . . . . . . . 5
2.4. Disclosure Response . . . . . . . . . . . . . . . . . . . 5
2.4.1. Credential Revocation . . . . . . . . . . . . . . . . 6
3. Client Recommendations . . . . . . . . . . . . . . . . . . . 6
3.1. Implement Relevant Protocols . . . . . . . . . . . . . . 6
3.2. Respect Credential Restrictions . . . . . . . . . . . . . 6
3.3. Disallow Insecure by Default . . . . . . . . . . . . . . 7
4. Security Considerations . . . . . . . . . . . . . . . . . . . 7
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 7
6.1. Normative References . . . . . . . . . . . . . . . . . . 7
6.2. Informative References . . . . . . . . . . . . . . . . . 8
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 8
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 8
Salz, et al. Expires 12 November 2026 [Page 2]
Internet-Draft privacy May 2026
1. Introduction
It is a common pattern for HTTP servers to prefer serving resources
over HTTPS. Because HTTPS uses TLS, clients receive authentication
of the server and confidentiality of the resource bodies supplied by
the server.
In order to implement this preference, HTTP servers often listen for
unencrypted requests and respond with a 3XX status code directing the
client to the equivalent resource over an encrypted connection. For
unauthenticated web browsing, this is a reasonable user experience
bridge. Users often type bare hostnames (not URIs) into a user
agent; if the user agent defaults to an unencrypted connection, the
server can correct this default and require the use of encryption.
This pattern is so well established that many HTTP server and
intermediary implementations have a prominently displayed option to
enable it automatically.
When client authentication is used, more care must be taken. The
client's initial request may include a Bearer token or other
credential (such as a Cookie); once the request has been sent on the
network, any passive attacker who can see the traffic can acquire
this credential and use it.
If the server performs a redirect in this situation, it does not
mitigate exposure of the credential. Further, because the request
will ultimately succeed if the client follows the redirect, an
application developer or user who accidentally configures an
unencrypted API endpoint will not necessarily notice the
misconfiguration.
This document describes actions API servers and clients should take
in order to safeguard credentials. These recommendations are not
directed at resources where no authentication is used. However,
[PERPASS] establishes broader reasons to use HTTPS regardless of
whether credentials are transmitted.
It has been established guidance not to send credentials in the clear
for decades. Nonetheless, a spot-check in May 2024 ([BLOG]) found
over two dozen websites that were vulnerable to the issues listed
here.
Salz, et al. Expires 12 November 2026 [Page 3]
Internet-Draft privacy May 2026
1.1. Conventions and Definitions
Although this document is not an IETF Standards Track publication, it
adopts the conventions for normative language to provide clarity of
instructions to the implementer. The key words "MUST", "MUST NOT",
"REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 [RFC2119]
[RFC8174] when, and only when, they appear in all capitals, as shown
here.
2. Server Recommendations
2.1. Pre-Connection Redirects
To inform clients that unencrypted requests to a server are never
appropriate, there are various mechanisms available, including:
* HTTP Strict Transport Security (HSTS) [RFC6797] informs clients
who make a successful connection over HTTPS that secure
connections are a requirement in the future.
* HTTPS DNS records [RFC9460] inform clients at connection time to
use only secure connections to the indicated server.
Neither mechanism is foolproof. An attacker with control of the
network or the DNS server could block resolution of HTTPS records on
a client connecting to a new server, while HSTS requires a successful
prior connection to the server and relies on the client to implement
persistent storage of the HSTS directive.
Used together, however, both approaches make clients less likely to
send any requests over an insecure channel. HTTP API servers with
authenticated endpoints SHOULD employ both mechanisms.
2.2. Connection Blocking
If an API request succeeds despite having an unencrypted endpoint
configured, the developer or user is less likely to notice the
misconfiguration. Where possible, it is advantageous for such a
misconfiguration to fail immediately so that the error can be noticed
and corrected.
Salz, et al. Expires 12 November 2026 [Page 4]
Internet-Draft privacy May 2026
HTTP API servers MAY induce such an early failure by not accepting
unencrypted connections, e.g. on port 80. This makes it impossible
for a client to send a credential over an insecure channel to the
authentic server, as no such channel can be opened. HTTP API servers
MAY alternatively restrict connections on port 80 to network sources
which are more trusted, such as a VPN or virtual network interface.
However, this mitigation is limited against active network attackers,
who can impersonate the HTTP API server and accept the client's
insecure connection attempt.
2.3. Credential Restriction
Whenever possible, credentials should include an indicator to clients
that the credential is restricted to secure contexts. For example,
Cookie-based authentication SHOULD include the Secure attribute
described in Section 4.1.2.5 of [RFC6265]. Bearer tokens MAY use the
format described in [RFC8959] to indicate the expected usage to the
client.
2.4. Disclosure Response
Some deployments might not find it feasible to completely block
unencrypted connections, whether because the hostname is shared with
unauthenticated endpoints or for infrastructure reasons. Therefore,
HTTP API servers need a response for when a credential has been
received over an insecure channel.
HTTP status code 403 (Forbidden) indicates that "the server
understood the request but refuses to fulfill it" [RFC9110]. While
this is generally understood to mean that "the server considers [the
credentials] insufficient to grant access," it also states that "a
request might be forbidden for reasons unrelated to the credentials."
HTTP API servers SHOULD return status code 403 to all requests
received over an insecure channel if they included any kind of
credential, regardless of the their validity.
Because a difference in behavior would enable attackers to guess and
check possible credentials, an HTTP API server MUST NOT return a
different client response between a valid or invalid credential
presented over an insecure connection. Differences in behavior MUST
only be visible on subsequent use of the credential over a secure
channel.
Salz, et al. Expires 12 November 2026 [Page 5]
Internet-Draft privacy May 2026
2.4.1. Credential Revocation
When a request is received over an unencrypted channel, the presented
credential is potentially compromised. HTTP API servers SHOULD
revoke such credentials immediately. When the credential is next
used over a secure channel, the server MAY return an error that
indicates why the credential was revoked.
Credentials in a request can take on different forms. API keys and
tokens are simple modes for authentication, but can be abused by
attackers to forge requests and hence should be revoked if
compromised. Requests can also be authenticated using derived
values, where they only include digital signatures or message
authentication codes (MACs) derived from credentials but not the
credentials themselves. Since an attacker cannot abuse the derived
values to forge requests, the server MAY choose to not revoke the
credentials in this case.
3. Client Recommendations
The following recommendations increase the success rate of the server
recommendations above.
3.1. Implement Relevant Protocols
Clients SHOULD support and query for HTTPS records [RFC9460] when
establishing a connection. This gives HTTP API servers an
opportunity to provide more complete information about capabilities,
some of which are security-relevant.
Clients SHOULD respect HSTS header fields [RFC6797] received from a
server. This includes implementing persistent storage of HSTS
indications received from the server.
Clients that do not follow either, or both, of these recommendations
might not understand the requirements of the server and could have
their traffic denied upon receipt, perhaps after having exposed
authentication material in cleartext on the Internet.
3.2. Respect Credential Restrictions
[RFC6265] prohibits sending a Cookie with the Secure attribute over
an insecure channel.
Clients MUST NOT send any header field that contains a secret token
over an insecure channel. Such header fields include Authorization
and Proxy-Authorization and are described in Sections 11.6.2 and
11.7.2 of [RFC9110], respectively.
Salz, et al. Expires 12 November 2026 [Page 6]
Internet-Draft privacy May 2026
3.3. Disallow Insecure by Default
When authentication is used, clients SHOULD require an explicit
indication, which is distinct from the provided URI, from the user or
caller that an insecure context is expected. Depending on the
interface, this might be a UI preference or an API flag.
Absent such an indication, clients of HTTP APIs MUST implement and
use HTTPS exclusively.
4. Security Considerations
This document describes how to mitigate exposting client credentials
to the network through plaintext HTTP requests.
The behavior recommended in Section 2.4.1 creates the potential for a
denial of service attack where an attacker guesses many possible
credentials over an unencrypted connection in hopes of discovering
and revoking a valid one.
HTTP API servers implementing this mitigation MUST also guard against
such attacks, such as by limiting the number of requests before
closing the connection and rate-limiting the establishment of
insecure connections.
This can also occur when a legitimate client misbehaves and routinely
sends credentials over HTTP. HTTP API servers may wish to consider
alternatives such as notification or grace period before revocation.
5. IANA Considerations
This document has no IANA actions.
6. References
6.1. Normative References
[PERPASS] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an
Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May
2014, <https://www.rfc-editor.org/rfc/rfc7258>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/rfc/rfc2119>.
Salz, et al. Expires 12 November 2026 [Page 7]
Internet-Draft privacy May 2026
[RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265,
DOI 10.17487/RFC6265, April 2011,
<https://www.rfc-editor.org/rfc/rfc6265>.
[RFC6797] Hodges, J., Jackson, C., and A. Barth, "HTTP Strict
Transport Security (HSTS)", RFC 6797,
DOI 10.17487/RFC6797, November 2012,
<https://www.rfc-editor.org/rfc/rfc6797>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Ed., "HTTP Semantics", STD 97, RFC 9110,
DOI 10.17487/RFC9110, June 2022,
<https://www.rfc-editor.org/rfc/rfc9110>.
[RFC9460] Schwartz, B., Bishop, M., and E. Nygren, "Service Binding
and Parameter Specification via the DNS (SVCB and HTTPS
Resource Records)", RFC 9460, DOI 10.17487/RFC9460,
November 2023, <https://www.rfc-editor.org/rfc/rfc9460>.
6.2. Informative References
[BLOG] Viide, J., "Your API Shouldn't Redirect HTTP to HTTPS",
May 2024, <https://jviide.iki.fi/http-redirects>.
[RFC8959] Nottingham, M., "The "secret-token" URI Scheme", RFC 8959,
DOI 10.17487/RFC8959, January 2021,
<https://www.rfc-editor.org/rfc/rfc8959>.
Acknowledgments
We are grateful to Joachim Viide for his [BLOG] blog posting that
brought up the issue.
Authors' Addresses
Rich Salz
Akamai Technologies
Email: rsalz@akamai.com
Mike Bishop
Akamai Technologies
Email: mbishop@evequefou.be
Salz, et al. Expires 12 November 2026 [Page 8]
Internet-Draft privacy May 2026
Marius Kleidl
Transloadit
Email: marius@transloadit.com
Salz, et al. Expires 12 November 2026 [Page 9]