HTTPAuth Working Group | J. Reschke |
Internet-Draft | greenbytes |
Updates: 2617 (if approved) | March 4, 2014 |
Intended status: Experimental | |
Expires: September 5, 2014 |
The "Basic" authentication scheme defined in RFC 2617 does not properly define how to treat non-ASCII characters. This has led to a situation where user agent implementations disagree, and servers make different assumptions based on the locales they are running in. There is little interoperability for the non-ASCII characters in the ISO-8859-1 character repertoire, and even less interoperability for any characters beyond that.¶
This document defines a backwards-compatible extension to "Basic", specifying the server's character encoding scheme expectation, using a new authentication scheme parameter.¶
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 http://datatracker.ietf.org/drafts/current/.¶
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 September 5, 2014.¶
Copyright (c) 2014 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 (http://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 Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
Discussion of this draft takes place on the HTTPAuth working group mailing list (http-auth@ietf.org), which is archived at <http://www.ietf.org/mail-archive/web/http-auth/current/maillist.html>.¶
XML versions, latest edits and the issues list for this document are available from <http://greenbytes.de/tech/webdav/#draft-ietf-httpauth-basicauth-enc>.¶
The changes in this draft are summarized in Appendix C.12.¶
The contents of this document will likely be included into the new specification of the "Basic" scheme, see <http://tools.ietf.org/html/draft-ietf-httpauth-basicauth-update>.¶
I edit (type: edit, status: open) | ||
julian.reschke@greenbytes.de | 2010-08-11 | Umbrella issue for editorial fixes/enhancements. |
I unorm (type: edit, status: closed) | ||
julian.reschke@greenbytes.de | 2012-02-02 | We need a statement about unicode normalization forms. |
Resolution: State that the expected normalization form is NFC. |
The "Basic" authentication scheme defined in Section 2 of [RFC2617] does not properly define how to treat non-ASCII characters ([USASCII]): it uses the Base64 ([RFC4648], Section 4) encoding of the concatenation of username, separator character, and password without stating which character encoding scheme to use.¶
This has led to a situation where user agent implementations disagree, and servers make different assumptions based on the locales they are running in. There is little interoperability for the non-ASCII characters in the ISO-8859-1 character repertoire ([USASCII], [ISO-8859-1]), and even less interoperability for any characters beyond that.¶
This document defines a backwards-compatible extension to "Basic", specifying the server's character encoding scheme expectation, using a new auth-param for use in the Proxy-Authenticate and WWW-Authenticate header fields, as defined in [draft-ietf-httpbis-p7-auth].¶
In challenges, servers MAY use the "charset" authentication parameter (case-insensitive) to indicate the character encoding scheme they expect the user agent to use when generating "user-pass" (a sequence of octets) from "userid" and "password" ([RFC2617], Section 2).¶
The only allowed value is "UTF-8", to be matched case-insensitively (see [RFC2978], Section 2.3). It indicates that the server expects user name and password to be converted to Unicode Normalization Form C ("NFC", see Section 3 of [RFC5198]) and to be encoded into octets using the UTF-8 character encoding scheme ([RFC3629]).¶
Other values are reserved for future use.¶
In the example below, the server prompts for authentication in the "foo" realm, using Basic authentication, with a preference for the UTF-8 character encoding scheme:
WWW-Authenticate: Basic realm="foo", charset="UTF-8"
Note that the parameter value can be either a token or a quoted string; in this case the server chose to use the quoted-string notation.
The user's name is "test", and his password is the string "123" followed by the Unicode character U+00A3 (POUND SIGN). Following Section 1.2 of [RFC2617], but using the character encoding scheme UTF-8, the user-pass, converted to a sequence of octets, is:¶
't' 'e' 's' 't' ':' '1' '2' '3' pound 74 65 73 74 3A 31 32 33 C2 A3
dGVzdDoxMjPCow==
Thus the Authorization header field would be:¶
Authorization: Basic dGVzdDoxMjPCow==
Or, for proxy authentication:¶
Proxy-Authorization: Basic dGVzdDoxMjPCow==
This document does not introduce any new security considerations beyond those defined for the "Basic" authentication scheme ([RFC2617], Section 4), and those applicable to the handling of UTF-8 ([RFC3629], Section 10).¶
There are no IANA Considerations related to this specification.¶
The internationalisation problem has been reported as a Mozilla bug back in the year 2000 (see <https://bugzilla.mozilla.org/show_bug.cgi?id=41489> and also the more recent <https://bugzilla.mozilla.org/show_bug.cgi?id=656213>). It was Andrew Clover's idea to address it using a new auth-param.¶
Thanks to Stephen Farrell, Bjoern Hoehrmann, Amos Jeffries, James Manger, Yaron Sheffer, Michael Sweet, and Martin Thomson for providing feedback on this document.¶
User agents not implementing this specification should continue to work as before, ignoring the new parameter.¶
User agents which already default to the UTF-8 encoding implement this specification by definition. Note that some user agents also have different defaults depending on whether the request originates from page navigation as opposed to a script-driven request using XMLHttpRequest [XHR].¶
Other user agents can keep their default behavior, and switch to UTF-8 when seeing the new parameter.¶
On the other hand, the strategy below may already improve the user-visible behavior today: ¶
Note that there's a risk if the site blocks an account after multiple login failures (for instance, when it doesn't reset the counter after a successful login).¶
Origin servers that do not support non-ASCII characters in credentials do not require any changes.¶
Origin servers that need to support non-ASCII characters, but can't use the UTF-8 encoding will not be affected; they will continue to function as well or as badly as before.¶
Finally, origin servers that need to support non-ASCII characters and can use the UTF-8 encoding can opt in as described above. In the worst case, they'll continue to see either broken credentials or no credentials at all (depending on how legacy clients handle characters they can not encode).¶
There are sites in use today that default to a locale encoding, such as ISO-8859-1, and expect user agents to use that encoding. These sites will break if the user agent uses a different encoding, such as UTF-8.¶
The Digest scheme has similar issues with respect to internationalization. The HTTPAuth Working Group is chartered to address this problem as well, and the solution might be very similar.¶
It appears they will. See <http://greenbytes.de/tech/tc/httpauth/#simplebasicnewparam1> and <http://greenbytes.de/tech/tc/httpauth/#simplebasicnewparam2>.¶
Add and close issues "credparam" and "paramcase". Rewrite the deployment considerations.¶
Note more recent Mozilla bugzilla entry; add behavior of existing UAs to FAQ (with pointer to test cases).¶
Add and resolve issue "xhrutf8".¶
Add and resolve issue "proxy".¶
Add and resolve issues "paramname" and "sentparam". Add issues "terminology" and "unorm". Update HTTPbis reference.¶
Update HTTPbis reference.¶
Update HTTPbis and XHR references.¶
"b64token" -> "token68" (ABNF term changed in HTTPbis P7). Change contact information from HTTPbis WG to HTTPAUTH WG. Add issue parmname2831. Changed intended status to "experimental".¶
Made it a draft of the IETF HTTPauth Working Group.¶
Clarify what encoding step the charset selection applies to.¶
Use RFC 6365 terminology.¶
Rename the parameter to "charset" for consistency with RFC 2831.¶
Update httpbis and XHR references. Add a note about draft-ietf-httpauth-basicauth-update.¶
Update httpbis reference. Close issue "unorm".¶