draft-ietf-httpbis-p7-auth-26.txt | draft-ietf-httpbis-p7-auth-latest.txt | |||
---|---|---|---|---|
HTTPbis Working Group R. Fielding, Ed. | HTTPbis Working Group R. Fielding, Ed. | |||
Internet-Draft Adobe | Internet-Draft Adobe | |||
Obsoletes: 2616 (if approved) J. Reschke, Ed. | Obsoletes: 2616 (if approved) J. Reschke, Ed. | |||
Updates: 2617 (if approved) greenbytes | Updates: 2617 (if approved) greenbytes | |||
Intended status: Standards Track February 6, 2014 | Intended status: Standards Track June 2014 | |||
Expires: August 10, 2014 | Expires: December 3, 2014 | |||
Hypertext Transfer Protocol (HTTP/1.1): Authentication | Hypertext Transfer Protocol (HTTP/1.1): Authentication | |||
draft-ietf-httpbis-p7-auth-26 | draft-ietf-httpbis-p7-auth-latest | |||
Abstract | Abstract | |||
The Hypertext Transfer Protocol (HTTP) is a stateless application- | The Hypertext Transfer Protocol (HTTP) is a stateless application- | |||
level protocol for distributed, collaborative, hypermedia information | level protocol for distributed, collaborative, hypermedia information | |||
systems. This document defines the HTTP Authentication framework. | systems. This document defines the HTTP Authentication framework. | |||
Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
Discussion of this draft takes place on the HTTPBIS working group | Discussion of this draft takes place on the HTTPBIS working group | |||
mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at | |||
<http://lists.w3.org/Archives/Public/ietf-http-wg/>. | <http://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
The current issues list is at | The current issues list is at | |||
<http://tools.ietf.org/wg/httpbis/trac/report/3> and related | <http://tools.ietf.org/wg/httpbis/trac/report/3> and related | |||
documents (including fancy diffs) can be found at | documents (including fancy diffs) can be found at | |||
<http://tools.ietf.org/wg/httpbis/>. | <http://tools.ietf.org/wg/httpbis/>. | |||
The changes in this draft are summarized in Appendix D.2. | _This is a temporary document for the purpose of tracking the | |||
editorial changes made during the AUTH48 (RFC publication) phase._ | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on August 10, 2014. | This Internet-Draft will expire on December 3, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
skipping to change at page 3, line 16 ¶ | skipping to change at page 3, line 16 ¶ | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. Conformance and Error Handling . . . . . . . . . . . . . . 4 | 1.1. Conformance and Error Handling . . . . . . . . . . . . . . 4 | |||
1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Access Authentication Framework . . . . . . . . . . . . . . . 4 | 2. Access Authentication Framework . . . . . . . . . . . . . . . 4 | |||
2.1. Challenge and Response . . . . . . . . . . . . . . . . . . 4 | 2.1. Challenge and Response . . . . . . . . . . . . . . . . . . 4 | |||
2.2. Protection Space (Realm) . . . . . . . . . . . . . . . . . 6 | 2.2. Protection Space (Realm) . . . . . . . . . . . . . . . . . 6 | |||
3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7 | 3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7 | |||
3.1. 401 Unauthorized . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. 401 Unauthorized . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.2. 407 Proxy Authentication Required . . . . . . . . . . . . 7 | 3.2. 407 Proxy Authentication Required . . . . . . . . . . . . 7 | |||
4. Header Field Definitions . . . . . . . . . . . . . . . . . . . 7 | 4. Header Field Definitions . . . . . . . . . . . . . . . . . . . 8 | |||
4.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . . . . 8 | 4.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.2. Authorization . . . . . . . . . . . . . . . . . . . . . . 8 | 4.2. Authorization . . . . . . . . . . . . . . . . . . . . . . 9 | |||
4.3. Proxy-Authenticate . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Proxy-Authenticate . . . . . . . . . . . . . . . . . . . . 9 | |||
4.4. Proxy-Authorization . . . . . . . . . . . . . . . . . . . 9 | 4.4. Proxy-Authorization . . . . . . . . . . . . . . . . . . . 10 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
5.1. Authentication Scheme Registry . . . . . . . . . . . . . . 10 | 5.1. Authentication Scheme Registry . . . . . . . . . . . . . . 10 | |||
5.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 10 | 5.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 10 | |||
5.1.2. Considerations for New Authentication Schemes . . . . 10 | 5.1.2. Considerations for New Authentication Schemes . . . . 10 | |||
5.2. Status Code Registration . . . . . . . . . . . . . . . . . 12 | 5.2. Status Code Registration . . . . . . . . . . . . . . . . . 12 | |||
5.3. Header Field Registration . . . . . . . . . . . . . . . . 12 | 5.3. Header Field Registration . . . . . . . . . . . . . . . . 12 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
6.1. Confidentiality of Credentials . . . . . . . . . . . . . . 13 | 6.1. Confidentiality of Credentials . . . . . . . . . . . . . . 13 | |||
6.2. Authentication Credentials and Idle Clients . . . . . . . 13 | 6.2. Authentication Credentials and Idle Clients . . . . . . . 13 | |||
6.3. Protection Spaces . . . . . . . . . . . . . . . . . . . . 14 | 6.3. Protection Spaces . . . . . . . . . . . . . . . . . . . . 14 | |||
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 14 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 15 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 15 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 15 | |||
Appendix A. Changes from RFCs 2616 and 2617 . . . . . . . . . . . 16 | Appendix A. Changes from RFCs 2616 and 2617 . . . . . . . . . . . 16 | |||
Appendix B. Imported ABNF . . . . . . . . . . . . . . . . . . . . 16 | Appendix B. Imported ABNF . . . . . . . . . . . . . . . . . . . . 16 | |||
Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 16 | Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 16 | |||
Appendix D. Change Log (to be removed by RFC Editor before | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
publication) . . . . . . . . . . . . . . . . . . . . 17 | ||||
D.1. Since draft-ietf-httpbis-p7-auth-24 . . . . . . . . . . . 17 | ||||
D.2. Since draft-ietf-httpbis-p7-auth-25 . . . . . . . . . . . 18 | ||||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
1. Introduction | 1. Introduction | |||
HTTP provides a general framework for access control and | HTTP provides a general framework for access control and | |||
authentication, via an extensible set of challenge-response | authentication, via an extensible set of challenge-response | |||
authentication schemes, which can be used by a server to challenge a | authentication schemes, which can be used by a server to challenge a | |||
client request and by a client to provide authentication information. | client request and by a client to provide authentication information. | |||
This document defines HTTP/1.1 authentication in terms of the | This document defines HTTP/1.1 authentication in terms of the | |||
architecture defined in [Part1], including the general framework | architecture defined in "Hypertext Transfer Protocol (HTTP/1.1): | |||
previously described in RFC 2617 and the related fields and status | Message Syntax and Routing" [RFC7230], including the general | |||
codes previously defined in RFC 2616. | framework previously described in "HTTP Authentication: Basic and | |||
Digest Access Authentication" [RFC2617] and the related fields and | ||||
status codes previously defined in "Hypertext Transfer Protocol -- | ||||
HTTP/1.1" [RFC2616]. | ||||
The IANA Authentication Scheme Registry (Section 5.1) lists | The IANA Authentication Scheme Registry (Section 5.1) lists | |||
registered authentication schemes and their corresponding | registered authentication schemes and their corresponding | |||
specifications, including the "basic" and "digest" authentication | specifications, including the "basic" and "digest" authentication | |||
schemes previously defined by RFC 2617. | schemes previously defined by RFC 2617. | |||
1.1. Conformance and Error Handling | 1.1. Conformance and Error Handling | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
Conformance criteria and considerations regarding error handling are | Conformance criteria and considerations regarding error handling are | |||
defined in Section 2.5 of [Part1]. | defined in Section 2.5 of [RFC7230]. | |||
1.2. Syntax Notation | 1.2. Syntax Notation | |||
This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
notation of [RFC5234] with a list extension, defined in Section 7 of | notation of [RFC5234] with a list extension, defined in Section 7 of | |||
[Part1], that allows for compact definition of comma-separated lists | [RFC7230], that allows for compact definition of comma-separated | |||
using a '#' operator (similar to how the '*' operator indicates | lists using a '#' operator (similar to how the '*' operator indicates | |||
repetition). Appendix B describes rules imported from other | repetition). Appendix B describes rules imported from other | |||
documents. Appendix C shows the collected grammar with all list | documents. Appendix C shows the collected grammar with all list | |||
operators expanded to standard ABNF notation. | operators expanded to standard ABNF notation. | |||
2. Access Authentication Framework | 2. Access Authentication Framework | |||
2.1. Challenge and Response | 2.1. Challenge and Response | |||
HTTP provides a simple challenge-response authentication framework | HTTP provides a simple challenge-response authentication framework | |||
that can be used by a server to challenge a client request and by a | that can be used by a server to challenge a client request and by a | |||
client to provide authentication information. It uses a case- | client to provide authentication information. It uses a case- | |||
insensitive token as a means to identify the authentication scheme, | insensitive token as a means to identify the authentication scheme, | |||
followed by additional information necessary for achieving | followed by additional information necessary for achieving | |||
authentication via that scheme. The latter can either be a comma- | authentication via that scheme. The latter can be either a comma- | |||
separated list of parameters or a single sequence of characters | separated list of parameters or a single sequence of characters | |||
capable of holding base64-encoded information. | capable of holding base64-encoded information. | |||
Authentication parameters are name=value pairs, where the name token | Authentication parameters are name=value pairs, where the name token | |||
is matched case-insensitively, and each parameter name MUST only | is matched case-insensitively, and each parameter name MUST only | |||
occur once per challenge. | occur once per challenge. | |||
auth-scheme = token | auth-scheme = token | |||
auth-param = token BWS "=" BWS ( token / quoted-string ) | auth-param = token BWS "=" BWS ( token / quoted-string ) | |||
token68 = 1*( ALPHA / DIGIT / | token68 = 1*( ALPHA / DIGIT / | |||
"-" / "." / "_" / "~" / "+" / "/" ) *"=" | "-" / "." / "_" / "~" / "+" / "/" ) *"=" | |||
The "token68" syntax allows the 66 unreserved URI characters | The token68 syntax allows the 66 unreserved URI characters | |||
([RFC3986]), plus a few others, so that it can hold a base64, | ([RFC3986]), plus a few others, so that it can hold a base64, | |||
base64url (URL and filename safe alphabet), base32, or base16 (hex) | base64url (URL and filename safe alphabet), base32, or base16 (hex) | |||
encoding, with or without padding, but excluding whitespace | encoding, with or without padding, but excluding whitespace | |||
([RFC4648]). | ([RFC4648]). | |||
A 401 (Unauthorized) response message is used by an origin server to | A 401 (Unauthorized) response message is used by an origin server to | |||
challenge the authorization of a user agent, including a WWW- | challenge the authorization of a user agent, including a WWW- | |||
Authenticate header field containing at least one challenge | Authenticate header field containing at least one challenge | |||
applicable to the requested resource. | applicable to the requested resource. | |||
skipping to change at page 6, line 26 ¶ | skipping to change at page 6, line 29 ¶ | |||
(Unauthorized) response that contains a WWW-Authenticate header field | (Unauthorized) response that contains a WWW-Authenticate header field | |||
with at least one (possibly new) challenge applicable to the | with at least one (possibly new) challenge applicable to the | |||
requested resource. | requested resource. | |||
Likewise, upon receipt of a request that omits proxy credentials or | Likewise, upon receipt of a request that omits proxy credentials or | |||
contains invalid or partial proxy credentials, a proxy that requires | contains invalid or partial proxy credentials, a proxy that requires | |||
authentication SHOULD generate a 407 (Proxy Authentication Required) | authentication SHOULD generate a 407 (Proxy Authentication Required) | |||
response that contains a Proxy-Authenticate header field with at | response that contains a Proxy-Authenticate header field with at | |||
least one (possibly new) challenge applicable to the proxy. | least one (possibly new) challenge applicable to the proxy. | |||
A server that receives valid credentials which are not adequate to | A server that receives valid credentials that are not adequate to | |||
gain access ought to respond with the 403 (Forbidden) status code | gain access ought to respond with the 403 (Forbidden) status code | |||
(Section 6.5.3 of [Part2]). | (Section 6.5.3 of [RFC7231]). | |||
HTTP does not restrict applications to this simple challenge-response | HTTP does not restrict applications to this simple challenge-response | |||
framework for access authentication. Additional mechanisms can be | framework for access authentication. Additional mechanisms can be | |||
used, such as authentication at the transport level or via message | used, such as authentication at the transport level or via message | |||
encapsulation, and with additional header fields specifying | encapsulation, and with additional header fields specifying | |||
authentication information. However, such additional mechanisms are | authentication information. However, such additional mechanisms are | |||
not defined by this specification. | not defined by this specification. | |||
2.2. Protection Space (Realm) | 2.2. Protection Space (Realm) | |||
The ""realm"" authentication parameter is reserved for use by | The ""realm"" authentication parameter is reserved for use by | |||
authentication schemes that wish to indicate a scope of protection. | authentication schemes that wish to indicate a scope of protection. | |||
A "protection space" is defined by the canonical root URI (the scheme | A "protection space" is defined by the canonical root URI (the scheme | |||
and authority components of the effective request URI; see Section | and authority components of the effective request URI; see Section | |||
5.5 of [Part1]) of the server being accessed, in combination with the | 5.5 of [RFC7230]) of the server being accessed, in combination with | |||
realm value if present. These realms allow the protected resources | the realm value if present. These realms allow the protected | |||
on a server to be partitioned into a set of protection spaces, each | resources on a server to be partitioned into a set of protection | |||
with its own authentication scheme and/or authorization database. | spaces, each with its own authentication scheme and/or authorization | |||
The realm value is a string, generally assigned by the origin server, | database. The realm value is a string, generally assigned by the | |||
which can have additional semantics specific to the authentication | origin server, that can have additional semantics specific to the | |||
scheme. Note that a response can have multiple challenges with the | authentication scheme. Note that a response can have multiple | |||
same auth-scheme but different realms. | challenges with the same auth-scheme but with different realms. | |||
The protection space determines the domain over which credentials can | The protection space determines the domain over which credentials can | |||
be automatically applied. If a prior request has been authorized, | be automatically applied. If a prior request has been authorized, | |||
the user agent MAY reuse the same credentials for all other requests | the user agent MAY reuse the same credentials for all other requests | |||
within that protection space for a period of time determined by the | within that protection space for a period of time determined by the | |||
authentication scheme, parameters, and/or user preferences (such as a | authentication scheme, parameters, and/or user preferences (such as a | |||
configurable inactivity timeout). Unless specifically allowed by the | configurable inactivity timeout). Unless specifically allowed by the | |||
authentication scheme, a single protection space cannot extend | authentication scheme, a single protection space cannot extend | |||
outside the scope of its server. | outside the scope of its server. | |||
skipping to change at page 7, line 41 ¶ | skipping to change at page 7, line 44 ¶ | |||
credentials. The user agent MAY repeat the request with a new or | credentials. The user agent MAY repeat the request with a new or | |||
replaced Authorization header field (Section 4.2). If the 401 | replaced Authorization header field (Section 4.2). If the 401 | |||
response contains the same challenge as the prior response, and the | response contains the same challenge as the prior response, and the | |||
user agent has already attempted authentication at least once, then | user agent has already attempted authentication at least once, then | |||
the user agent SHOULD present the enclosed representation to the | the user agent SHOULD present the enclosed representation to the | |||
user, since it usually contains relevant diagnostic information. | user, since it usually contains relevant diagnostic information. | |||
3.2. 407 Proxy Authentication Required | 3.2. 407 Proxy Authentication Required | |||
The "407 (Proxy Authentication Required)" status code is similar to | The "407 (Proxy Authentication Required)" status code is similar to | |||
401 (Unauthorized), but indicates that the client needs to | 401 (Unauthorized), but it indicates that the client needs to | |||
authenticate itself in order to use a proxy. The proxy MUST send a | authenticate itself in order to use a proxy. The proxy MUST send a | |||
Proxy-Authenticate header field (Section 4.3) containing a challenge | Proxy-Authenticate header field (Section 4.3) containing a challenge | |||
applicable to that proxy for the target resource. The client MAY | applicable to that proxy for the target resource. The client MAY | |||
repeat the request with a new or replaced Proxy-Authorization header | repeat the request with a new or replaced Proxy-Authorization header | |||
field (Section 4.4). | field (Section 4.4). | |||
4. Header Field Definitions | 4. Header Field Definitions | |||
This section defines the syntax and semantics of header fields | This section defines the syntax and semantics of header fields | |||
related to the HTTP authentication framework. | related to the HTTP authentication framework. | |||
skipping to change at page 9, line 12 ¶ | skipping to change at page 9, line 22 ¶ | |||
Authorization = credentials | Authorization = credentials | |||
If a request is authenticated and a realm specified, the same | If a request is authenticated and a realm specified, the same | |||
credentials are presumed to be valid for all other requests within | credentials are presumed to be valid for all other requests within | |||
this realm (assuming that the authentication scheme itself does not | this realm (assuming that the authentication scheme itself does not | |||
require otherwise, such as credentials that vary according to a | require otherwise, such as credentials that vary according to a | |||
challenge value or using synchronized clocks). | challenge value or using synchronized clocks). | |||
A proxy forwarding a request MUST NOT modify any Authorization fields | A proxy forwarding a request MUST NOT modify any Authorization fields | |||
in that request. See Section 3.2 of [Part6] for details of and | in that request. See Section 3.2 of [RFC7234] for details of and | |||
requirements pertaining to handling of the Authorization field by | requirements pertaining to handling of the Authorization field by | |||
HTTP caches. | HTTP caches. | |||
4.3. Proxy-Authenticate | 4.3. Proxy-Authenticate | |||
The "Proxy-Authenticate" header field consists of at least one | The "Proxy-Authenticate" header field consists of at least one | |||
challenge that indicates the authentication scheme(s) and parameters | challenge that indicates the authentication scheme(s) and parameters | |||
applicable to the proxy for this effective request URI (Section 5.5 | applicable to the proxy for this effective request URI (Section 5.5 | |||
of [Part1]). A proxy MUST send at least one Proxy-Authenticate | of [RFC7230]). A proxy MUST send at least one Proxy-Authenticate | |||
header field in each 407 (Proxy Authentication Required) response | header field in each 407 (Proxy Authentication Required) response | |||
that it generates. | that it generates. | |||
Proxy-Authenticate = 1#challenge | Proxy-Authenticate = 1#challenge | |||
Unlike WWW-Authenticate, the Proxy-Authenticate header field applies | Unlike WWW-Authenticate, the Proxy-Authenticate header field applies | |||
only to the next outbound client on the response chain. This is | only to the next outbound client on the response chain. This is | |||
because only the client that chose a given proxy is likely to have | because only the client that chose a given proxy is likely to have | |||
the credentials necessary for authentication. However, when multiple | the credentials necessary for authentication. However, when multiple | |||
proxies are used within the same administrative domain, such as | proxies are used within the same administrative domain, such as | |||
skipping to change at page 10, line 15 ¶ | skipping to change at page 10, line 28 ¶ | |||
the Proxy-Authorization header field is consumed by the first inbound | the Proxy-Authorization header field is consumed by the first inbound | |||
proxy that was expecting to receive credentials. A proxy MAY relay | proxy that was expecting to receive credentials. A proxy MAY relay | |||
the credentials from the client request to the next proxy if that is | the credentials from the client request to the next proxy if that is | |||
the mechanism by which the proxies cooperatively authenticate a given | the mechanism by which the proxies cooperatively authenticate a given | |||
request. | request. | |||
5. IANA Considerations | 5. IANA Considerations | |||
5.1. Authentication Scheme Registry | 5.1. Authentication Scheme Registry | |||
The HTTP Authentication Scheme Registry defines the name space for | The "Hypertext Transfer Protocol (HTTP) Authentication Scheme | |||
the authentication schemes in challenges and credentials. It will be | Registry" defines the namespace for the authentication schemes in | |||
created and maintained at (the suggested URI) | challenges and credentials. It has been created and is now | |||
<http://www.iana.org/assignments/http-authschemes>. | maintained at <http://www.iana.org/assignments/http-authschemes>. | |||
5.1.1. Procedure | 5.1.1. Procedure | |||
Registrations MUST include the following fields: | Registrations MUST include the following fields: | |||
o Authentication Scheme Name | o Authentication Scheme Name | |||
o Pointer to specification text | o Pointer to specification text | |||
o Notes (optional) | o Notes (optional) | |||
Values to be added to this name space require IETF Review (see | Values to be added to this namespace require IETF Review (see | |||
[RFC5226], Section 4.1). | [RFC5226], Section 4.1). | |||
5.1.2. Considerations for New Authentication Schemes | 5.1.2. Considerations for New Authentication Schemes | |||
There are certain aspects of the HTTP Authentication Framework that | There are certain aspects of the HTTP Authentication Framework that | |||
put constraints on how new authentication schemes can work: | put constraints on how new authentication schemes can work: | |||
o HTTP authentication is presumed to be stateless: all of the | o HTTP authentication is presumed to be stateless: all of the | |||
information necessary to authenticate a request MUST be provided | information necessary to authenticate a request MUST be provided | |||
in the request, rather than be dependent on the server remembering | in the request, rather than be dependent on the server remembering | |||
prior requests. Authentication based on, or bound to, the | prior requests. Authentication based on, or bound to, the | |||
underlying connection is outside the scope of this specification | underlying connection is outside the scope of this specification | |||
and inherently flawed unless steps are taken to ensure that the | and inherently flawed unless steps are taken to ensure that the | |||
connection cannot be used by any party other than the | connection cannot be used by any party other than the | |||
authenticated user (see Section 2.3 of [Part1]). | authenticated user (see Section 2.3 of [RFC7230]). | |||
o The authentication parameter "realm" is reserved for defining | o The authentication parameter "realm" is reserved for defining | |||
Protection Spaces as defined in Section 2.2. New schemes MUST NOT | protection spaces as described in Section 2.2. New schemes MUST | |||
use it in a way incompatible with that definition. | NOT use it in a way incompatible with that definition. | |||
o The "token68" notation was introduced for compatibility with | o The "token68" notation was introduced for compatibility with | |||
existing authentication schemes and can only be used once per | existing authentication schemes and can only be used once per | |||
challenge or credential. New schemes thus ought to use the "auth- | challenge or credential. Thus, new schemes ought to use the auth- | |||
param" syntax instead, because otherwise future extensions will be | param syntax instead, because otherwise future extensions will be | |||
impossible. | impossible. | |||
o The parsing of challenges and credentials is defined by this | o The parsing of challenges and credentials is defined by this | |||
specification, and cannot be modified by new authentication | specification and cannot be modified by new authentication | |||
schemes. When the auth-param syntax is used, all parameters ought | schemes. When the auth-param syntax is used, all parameters ought | |||
to support both token and quoted-string syntax, and syntactical | to support both token and quoted-string syntax, and syntactical | |||
constraints ought to be defined on the field value after parsing | constraints ought to be defined on the field value after parsing | |||
(i.e., quoted-string processing). This is necessary so that | (i.e., quoted-string processing). This is necessary so that | |||
recipients can use a generic parser that applies to all | recipients can use a generic parser that applies to all | |||
authentication schemes. | authentication schemes. | |||
Note: The fact that the value syntax for the "realm" parameter is | Note: The fact that the value syntax for the "realm" parameter is | |||
restricted to quoted-string was a bad design choice not to be | restricted to quoted-string was a bad design choice not to be | |||
repeated for new parameters. | repeated for new parameters. | |||
o Definitions of new schemes ought to define the treatment of | o Definitions of new schemes ought to define the treatment of | |||
unknown extension parameters. In general, a "must-ignore" rule is | unknown extension parameters. In general, a "must-ignore" rule is | |||
preferable over "must-understand", because otherwise it will be | preferable to a "must-understand" rule, because otherwise it will | |||
hard to introduce new parameters in the presence of legacy | be hard to introduce new parameters in the presence of legacy | |||
recipients. Furthermore, it's good to describe the policy for | recipients. Furthermore, it's good to describe the policy for | |||
defining new parameters (such as "update the specification", or | defining new parameters (such as "update the specification" or | |||
"use this registry"). | "use this registry"). | |||
o Authentication schemes need to document whether they are usable in | o Authentication schemes need to document whether they are usable in | |||
origin-server authentication (i.e., using WWW-Authenticate), | origin-server authentication (i.e., using WWW-Authenticate), | |||
and/or proxy authentication (i.e., using Proxy-Authenticate). | and/or proxy authentication (i.e., using Proxy-Authenticate). | |||
o The credentials carried in an Authorization header field are | o The credentials carried in an Authorization header field are | |||
specific to the User Agent, and therefore have the same effect on | specific to the user agent and, therefore, have the same effect on | |||
HTTP caches as the "private" Cache-Control response directive | HTTP caches as the "private" Cache-Control response directive | |||
(Section 5.2.2.6 of [Part6]), within the scope of the request they | (Section 5.2.2.6 of [RFC7234]), within the scope of the request in | |||
appear in. | which they appear. | |||
Therefore, new authentication schemes that choose not to carry | Therefore, new authentication schemes that choose not to carry | |||
credentials in the Authorization header field (e.g., using a newly | credentials in the Authorization header field (e.g., using a newly | |||
defined header field) will need to explicitly disallow caching, by | defined header field) will need to explicitly disallow caching, by | |||
mandating the use of either Cache-Control request directives | mandating the use of either Cache-Control request directives | |||
(e.g., "no-store", Section 5.2.1.5 of [Part6]) or response | (e.g., "no-store", Section 5.2.1.5 of [RFC7234]) or response | |||
directives (e.g., "private"). | directives (e.g., "private"). | |||
5.2. Status Code Registration | 5.2. Status Code Registration | |||
The HTTP Status Code Registry located at | The "Hypertext Transfer Protocol (HTTP) Status Code Registry" located | |||
<http://www.iana.org/assignments/http-status-codes> shall be updated | at <http://www.iana.org/assignments/http-status-codes> has been | |||
with the registrations below: | updated with the registrations below: | |||
+-------+-------------------------------+-------------+ | +-------+-------------------------------+-------------+ | |||
| Value | Description | Reference | | | Value | Description | Reference | | |||
+-------+-------------------------------+-------------+ | +-------+-------------------------------+-------------+ | |||
| 401 | Unauthorized | Section 3.1 | | | 401 | Unauthorized | Section 3.1 | | |||
| 407 | Proxy Authentication Required | Section 3.2 | | | 407 | Proxy Authentication Required | Section 3.2 | | |||
+-------+-------------------------------+-------------+ | +-------+-------------------------------+-------------+ | |||
5.3. Header Field Registration | 5.3. Header Field Registration | |||
HTTP header fields are registered within the Message Header Field | HTTP header fields are registered within the "Message Headers" | |||
Registry maintained at <http://www.iana.org/assignments/ | registry maintained at | |||
message-headers/message-header-index.html>. | <http://www.iana.org/assignments/message-headers/>. | |||
This document defines the following HTTP header fields, so their | This document defines the following HTTP header fields, so the | |||
associated registry entries shall be updated according to the | "Permanent Message Header Field Names" registry has been updated | |||
permanent registrations below (see [BCP90]): | accordingly (see [BCP90]). | |||
+---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
| Header Field Name | Protocol | Status | Reference | | | Header Field Name | Protocol | Status | Reference | | |||
+---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
| Authorization | http | standard | Section 4.2 | | | Authorization | http | standard | Section 4.2 | | |||
| Proxy-Authenticate | http | standard | Section 4.3 | | | Proxy-Authenticate | http | standard | Section 4.3 | | |||
| Proxy-Authorization | http | standard | Section 4.4 | | | Proxy-Authorization | http | standard | Section 4.4 | | |||
| WWW-Authenticate | http | standard | Section 4.1 | | | WWW-Authenticate | http | standard | Section 4.1 | | |||
+---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
skipping to change at page 12, line 44 ¶ | skipping to change at page 13, line 4 ¶ | |||
| WWW-Authenticate | http | standard | Section 4.1 | | | WWW-Authenticate | http | standard | Section 4.1 | | |||
+---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
The change controller is: "IETF (iesg@ietf.org) - Internet | The change controller is: "IETF (iesg@ietf.org) - Internet | |||
Engineering Task Force". | Engineering Task Force". | |||
6. Security Considerations | 6. Security Considerations | |||
This section is meant to inform developers, information providers, | This section is meant to inform developers, information providers, | |||
and users of known security concerns specific to HTTP authentication. | and users of known security concerns specific to HTTP authentication. | |||
More general security considerations are addressed in HTTP messaging | More general security considerations are addressed in HTTP messaging | |||
[Part1] and semantics [Part2]. | [RFC7230] and semantics [RFC7231]. | |||
Everything about the topic of HTTP authentication is a security | Everything about the topic of HTTP authentication is a security | |||
consideration, so the list of considerations below is not exhaustive. | consideration, so the list of considerations below is not exhaustive. | |||
Furthermore, it is limited to security considerations regarding the | Furthermore, it is limited to security considerations regarding the | |||
authentication framework, in general, rather than discussing all of | authentication framework, in general, rather than discussing all of | |||
the potential considerations for specific authentication schemes | the potential considerations for specific authentication schemes | |||
(which ought to be documented in the specifications that define those | (which ought to be documented in the specifications that define those | |||
schemes). Various organizations maintain topical information and | schemes). Various organizations maintain topical information and | |||
links to current research on Web application security (e.g., | links to current research on Web application security (e.g., | |||
[OWASP]), including common pitfalls for implementing and using the | [OWASP]), including common pitfalls for implementing and using the | |||
skipping to change at page 13, line 23 ¶ | skipping to change at page 13, line 33 ¶ | |||
authentication scheme defines how the credentials are encoded prior | authentication scheme defines how the credentials are encoded prior | |||
to transmission. While this provides flexibility for the development | to transmission. While this provides flexibility for the development | |||
of future authentication schemes, it is inadequate for the protection | of future authentication schemes, it is inadequate for the protection | |||
of existing schemes that provide no confidentiality on their own, or | of existing schemes that provide no confidentiality on their own, or | |||
that do not sufficiently protect against replay attacks. | that do not sufficiently protect against replay attacks. | |||
Furthermore, if the server expects credentials that are specific to | Furthermore, if the server expects credentials that are specific to | |||
each individual user, the exchange of those credentials will have the | each individual user, the exchange of those credentials will have the | |||
effect of identifying that user even if the content within | effect of identifying that user even if the content within | |||
credentials remains confidential. | credentials remains confidential. | |||
HTTP depends on the security properties of the underlying transport | HTTP depends on the security properties of the underlying transport- | |||
or session-level connection to provide confidential transmission of | or session-level connection to provide confidential transmission of | |||
header fields. In other words, if a server limits access to | header fields. In other words, if a server limits access to | |||
authenticated users using this framework, the server needs to ensure | authenticated users using this framework, the server needs to ensure | |||
that the connection is properly secured in accordance with the nature | that the connection is properly secured in accordance with the nature | |||
of the authentication scheme used. For example, services that depend | of the authentication scheme used. For example, services that depend | |||
on individual user authentication often require a connection to be | on individual user authentication often require a connection to be | |||
secured with TLS ("Transport Layer Security", [RFC5246]) prior to | secured with TLS ("Transport Layer Security", [RFC5246]) prior to | |||
exchanging any credentials. | exchanging any credentials. | |||
6.2. Authentication Credentials and Idle Clients | 6.2. Authentication Credentials and Idle Clients | |||
skipping to change at page 14, line 38 ¶ | skipping to change at page 14, line 48 ¶ | |||
7. Acknowledgments | 7. Acknowledgments | |||
This specification takes over the definition of the HTTP | This specification takes over the definition of the HTTP | |||
Authentication Framework, previously defined in RFC 2617. We thank | Authentication Framework, previously defined in RFC 2617. We thank | |||
John Franks, Phillip M. Hallam-Baker, Jeffery L. Hostetler, Scott D. | John Franks, Phillip M. Hallam-Baker, Jeffery L. Hostetler, Scott D. | |||
Lawrence, Paul J. Leach, Ari Luotonen, and Lawrence C. Stewart for | Lawrence, Paul J. Leach, Ari Luotonen, and Lawrence C. Stewart for | |||
their work on that specification. See Section 6 of [RFC2617] for | their work on that specification. See Section 6 of [RFC2617] for | |||
further acknowledgements. | further acknowledgements. | |||
See Section 10 of [Part1] for the Acknowledgments related to this | See Section 10 of [RFC7230] for the Acknowledgments related to this | |||
document revision. | document revision. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[Part1] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
draft-ietf-httpbis-p1-messaging-26 (work in progress), | ||||
February 2014. | ||||
[Part2] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Semantics and Content", | ||||
draft-ietf-httpbis-p2-semantics-26 (work in progress), | ||||
February 2014. | ||||
[Part6] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
draft-ietf-httpbis-p6-cache-26 (work in progress), | ||||
February 2014. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
draft-ietf-httpbis-p1-messaging-latest (work in progress), | ||||
June 2014. | ||||
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Semantics and Content", | ||||
draft-ietf-httpbis-p2-semantics-latest (work in progress), | ||||
June 2014. | ||||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
draft-ietf-httpbis-p6-cache-latest (work in progress), | ||||
June 2014. | ||||
8.2. Informative References | 8.2. Informative References | |||
[BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
September 2004. | September 2004. | |||
[OWASP] van der Stock, A., Ed., "A Guide to Building Secure Web | [OWASP] van der Stock, A., Ed., "A Guide to Building Secure Web | |||
Applications and Web Services", The Open Web Application | Applications and Web Services", The Open Web Application | |||
Security Project (OWASP) 2.0.1, July 2005, | Security Project (OWASP) 2.0.1, July 2005, | |||
<https://www.owasp.org/>. | <https://www.owasp.org/>. | |||
skipping to change at page 16, line 31 ¶ | skipping to change at page 16, line 39 ¶ | |||
Appendix B. Imported ABNF | Appendix B. Imported ABNF | |||
The following core rules are included by reference, as defined in | The following core rules are included by reference, as defined in | |||
Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), | Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), | |||
CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double | CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double | |||
quote), HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any | quote), HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any | |||
8-bit sequence of data), SP (space), and VCHAR (any visible US-ASCII | 8-bit sequence of data), SP (space), and VCHAR (any visible US-ASCII | |||
character). | character). | |||
The rules below are defined in [Part1]: | The rules below are defined in [RFC7230]: | |||
BWS = <BWS, defined in [Part1], Section 3.2.3> | BWS = <BWS, see [RFC7230], Section 3.2.3> | |||
OWS = <OWS, defined in [Part1], Section 3.2.3> | OWS = <OWS, see [RFC7230], Section 3.2.3> | |||
quoted-string = <quoted-string, defined in [Part1], Section 3.2.6> | quoted-string = <quoted-string, see [RFC7230], Section 3.2.6> | |||
token = <token, defined in [Part1], Section 3.2.6> | token = <token, see [RFC7230], Section 3.2.6> | |||
Appendix C. Collected ABNF | Appendix C. Collected ABNF | |||
In the collected ABNF below, list rules are expanded as per Section | In the collected ABNF below, list rules are expanded as per Section | |||
1.2 of [Part1]. | 1.2 of [RFC7230]. | |||
Authorization = credentials | Authorization = credentials | |||
BWS = <BWS, defined in [Part1], Section 3.2.3> | BWS = <BWS, see [RFC7230], Section 3.2.3> | |||
OWS = <OWS, defined in [Part1], Section 3.2.3> | OWS = <OWS, see [RFC7230], Section 3.2.3> | |||
Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS | Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS | |||
challenge ] ) | challenge ] ) | |||
Proxy-Authorization = credentials | Proxy-Authorization = credentials | |||
WWW-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS challenge | WWW-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS challenge | |||
] ) | ] ) | |||
auth-param = token BWS "=" BWS ( token / quoted-string ) | auth-param = token BWS "=" BWS ( token / quoted-string ) | |||
auth-scheme = token | auth-scheme = token | |||
challenge = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) *( | challenge = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) *( | |||
OWS "," [ OWS auth-param ] ) ] ) ] | OWS "," [ OWS auth-param ] ) ] ) ] | |||
credentials = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) | credentials = auth-scheme [ 1*SP ( token68 / [ ( "," / auth-param ) | |||
*( OWS "," [ OWS auth-param ] ) ] ) ] | *( OWS "," [ OWS auth-param ] ) ] ) ] | |||
quoted-string = <quoted-string, defined in [Part1], Section 3.2.6> | quoted-string = <quoted-string, see [RFC7230], Section 3.2.6> | |||
token = <token, defined in [Part1], Section 3.2.6> | token = <token, see [RFC7230], Section 3.2.6> | |||
token68 = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) | token68 = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) | |||
*"=" | *"=" | |||
Appendix D. Change Log (to be removed by RFC Editor before publication) | ||||
Changes up to the IETF Last Call draft are summarized in <http:// | ||||
trac.tools.ietf.org/html/draft-ietf-httpbis-p7-auth-24#appendix-D>. | ||||
D.1. Since draft-ietf-httpbis-p7-auth-24 | ||||
Closed issues: | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/510>: "SECDIR review | ||||
of draft-ietf-httpbis-p7-auth-24" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/513>: "APPSDIR | ||||
review of draft-ietf-httpbis-p7-auth-24" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/516>: "note about | ||||
WWW-A parsing potentially misleading" | ||||
D.2. Since draft-ietf-httpbis-p7-auth-25 | ||||
Closed issues: | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/522>: "Gen-art | ||||
review of draft-ietf-httpbis-p7-auth-25" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/536>: "IESG ballot | ||||
on draft-ietf-httpbis-p7-auth-25" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/538>: "add | ||||
'stateless' to Abstract" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/539>: "mention TLS | ||||
vs plain text passwords or dict attacks?" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/542>: "improve | ||||
introduction of list rule" | ||||
o <http://tools.ietf.org/wg/httpbis/trac/ticket/549>: "augment | ||||
security considerations with pointers to current research" | ||||
Index | Index | |||
4 | 4 | |||
401 Unauthorized (status code) 7 | 401 Unauthorized (status code) 7 | |||
407 Proxy Authentication Required (status code) 7 | 407 Proxy Authentication Required (status code) 7 | |||
A | A | |||
Authorization header field 8 | Authorization header field 9 | |||
C | C | |||
Canonical Root URI 6 | Canonical Root URI 6 | |||
G | G | |||
Grammar | Grammar | |||
auth-param 5 | auth-param 5 | |||
auth-scheme 5 | auth-scheme 5 | |||
Authorization 8 | Authorization 9 | |||
challenge 5 | challenge 5 | |||
credentials 6 | credentials 6 | |||
Proxy-Authenticate 9 | Proxy-Authenticate 9 | |||
Proxy-Authorization 9 | Proxy-Authorization 10 | |||
token68 5 | token68 5 | |||
WWW-Authenticate 8 | WWW-Authenticate 8 | |||
P | P | |||
Protection Space 6 | Protection Space 6 | |||
Proxy-Authenticate header field 9 | Proxy-Authenticate header field 9 | |||
Proxy-Authorization header field 9 | Proxy-Authorization header field 10 | |||
R | R | |||
Realm 6 | Realm 6 | |||
W | W | |||
WWW-Authenticate header field 8 | WWW-Authenticate header field 8 | |||
Authors' Addresses | Authors' Addresses | |||
Roy T. Fielding (editor) | Roy T. Fielding (editor) | |||
End of changes. 54 change blocks. | ||||
136 lines changed or deleted | 97 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |