| draft-ietf-httpbis-p7-auth-22.txt | draft-ietf-httpbis-p7-auth-23.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 23, 2013 | Intended status: Standards Track July 15, 2013 | |||
| Expires: August 27, 2013 | Expires: January 16, 2014 | |||
| Hypertext Transfer Protocol (HTTP/1.1): Authentication | Hypertext Transfer Protocol (HTTP/1.1): Authentication | |||
| draft-ietf-httpbis-p7-auth-22 | draft-ietf-httpbis-p7-auth-23 | |||
| Abstract | Abstract | |||
| The Hypertext Transfer Protocol (HTTP) is an application-level | The Hypertext Transfer Protocol (HTTP) is an application-level | |||
| protocol for distributed, collaborative, hypermedia information | 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.3. | The changes in this draft are summarized in Appendix D.4. | |||
| 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 27, 2013. | This Internet-Draft will expire on January 16, 2014. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 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 | |||
| skipping to change at page 3, line 13 | skipping to change at page 3, line 13 | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 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 | |||
| 2.3. Authentication Scheme Registry . . . . . . . . . . . . . . 7 | 3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.3.1. Considerations for New Authentication Schemes . . . . 7 | 3.1. 401 Unauthorized . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 9 | 3.2. 407 Proxy Authentication Required . . . . . . . . . . . . 7 | |||
| 3.1. 401 Unauthorized . . . . . . . . . . . . . . . . . . . . . 9 | 4. Header Field Definitions . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2. 407 Proxy Authentication Required . . . . . . . . . . . . 9 | 4.1. Authorization . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4. Header Field Definitions . . . . . . . . . . . . . . . . . . . 9 | 4.2. Proxy-Authenticate . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.1. Authorization . . . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Proxy-Authorization . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Proxy-Authenticate . . . . . . . . . . . . . . . . . . . . 10 | 4.4. WWW-Authenticate . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Proxy-Authorization . . . . . . . . . . . . . . . . . . . 10 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.4. WWW-Authenticate . . . . . . . . . . . . . . . . . . . . . 10 | 5.1. Authentication Scheme Registry . . . . . . . . . . . . . . 10 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 5.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.1. Authentication Scheme Registry . . . . . . . . . . . . . . 11 | 5.1.2. Considerations for New Authentication Schemes . . . . 10 | |||
| 5.2. Status Code Registration . . . . . . . . . . . . . . . . . 11 | 5.2. Status Code Registration . . . . . . . . . . . . . . . . . 11 | |||
| 5.3. Header Field Registration . . . . . . . . . . . . . . . . 12 | 5.3. Header Field Registration . . . . . . . . . . . . . . . . 12 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.1. Authentication Credentials and Idle Clients . . . . . . . 12 | 6.1. Authentication Credentials and Idle Clients . . . . . . . 12 | |||
| 6.2. Protection Spaces . . . . . . . . . . . . . . . . . . . . 13 | 6.2. Protection Spaces . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . . 13 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . . 14 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 14 | |||
| Appendix A. Changes from RFCs 2616 and 2617 . . . . . . . . . . . 14 | Appendix A. Changes from RFCs 2616 and 2617 . . . . . . . . . . . 15 | |||
| Appendix B. Imported ABNF . . . . . . . . . . . . . . . . . . . . 15 | Appendix B. Imported ABNF . . . . . . . . . . . . . . . . . . . . 15 | |||
| Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 16 | Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 15 | |||
| Appendix D. Change Log (to be removed by RFC Editor before | Appendix D. Change Log (to be removed by RFC Editor before | |||
| publication) . . . . . . . . . . . . . . . . . . . . 16 | publication) . . . . . . . . . . . . . . . . . . . . 16 | |||
| D.1. Since draft-ietf-httpbis-p7-auth-19 . . . . . . . . . . . 16 | D.1. Since draft-ietf-httpbis-p7-auth-19 . . . . . . . . . . . 16 | |||
| D.2. Since draft-ietf-httpbis-p7-auth-20 . . . . . . . . . . . 17 | D.2. Since draft-ietf-httpbis-p7-auth-20 . . . . . . . . . . . 17 | |||
| D.3. Since draft-ietf-httpbis-p7-auth-21 . . . . . . . . . . . 17 | D.3. Since draft-ietf-httpbis-p7-auth-21 . . . . . . . . . . . 17 | |||
| D.4. Since draft-ietf-httpbis-p7-auth-22 . . . . . . . . . . . 17 | ||||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines HTTP/1.1 access control and authentication. It | This document defines HTTP/1.1 access control and authentication. It | |||
| includes the relevant parts of RFC 2616 with only minor changes | includes the relevant parts of RFC 2616 with only minor changes | |||
| ([RFC2616]), plus the general framework for HTTP authentication, as | ([RFC2616]), plus the general framework for HTTP authentication, as | |||
| previously defined in "HTTP Authentication: Basic and Digest Access | previously defined in "HTTP Authentication: Basic and Digest Access | |||
| Authentication" ([RFC2617]). | Authentication" ([RFC2617]). | |||
| HTTP provides several OPTIONAL challenge-response authentication | HTTP provides several OPTIONAL challenge-response authentication | |||
| mechanisms that can be used by a server to challenge a client request | schemes that can be used by a server to challenge a client request | |||
| and by a client to provide authentication information. The "basic" | and by a client to provide authentication information. The "basic" | |||
| and "digest" authentication schemes continue to be specified in RFC | and "digest" authentication schemes continue to be specified in RFC | |||
| 2617. | 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]. | |||
| skipping to change at page 4, line 40 | skipping to change at page 4, line 40 | |||
| This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
| notation of [RFC5234] with the list rule extension defined in Section | notation of [RFC5234] with the list rule extension defined in Section | |||
| 1.2 of [Part1]. Appendix B describes rules imported from other | 1.2 of [Part1]. Appendix B describes rules imported from other | |||
| documents. Appendix C shows the collected ABNF with the list rule | documents. Appendix C shows the collected ABNF with the list rule | |||
| expanded. | expanded. | |||
| 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 mechanism | 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 an extensible, | client to provide authentication information. It uses a case- | |||
| case-insensitive token 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 either be 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. | |||
| Parameters are name-value pairs where the name is matched case- | Parameters are name-value pairs where the name is matched case- | |||
| insensitively, and each parameter name MUST only occur once per | insensitively, and each parameter name MUST only occur once per | |||
| challenge. | challenge. | |||
| auth-scheme = token | auth-scheme = token | |||
| skipping to change at page 6, line 4 | skipping to change at page 6, line 4 | |||
| -- can do so by including an Authorization header field with the | -- can do so by including an Authorization header field with the | |||
| request. | request. | |||
| A client that wishes to authenticate itself with a proxy -- usually, | A client that wishes to authenticate itself with a proxy -- usually, | |||
| but not necessarily, after receiving a 407 (Proxy Authentication | but not necessarily, after receiving a 407 (Proxy Authentication | |||
| Required) -- can do so by including a Proxy-Authorization header | Required) -- can do so by including a Proxy-Authorization header | |||
| field with the request. | field with the request. | |||
| Both the Authorization field value and the Proxy-Authorization field | Both the Authorization field value and the Proxy-Authorization field | |||
| value contain the client's credentials for the realm of the resource | value contain the client's credentials for the realm of the resource | |||
| being requested, based upon a challenge received from the server | being requested, based upon a challenge received in a response | |||
| (possibly at some point in the past). When creating their values, | (possibly at some point in the past). When creating their values, | |||
| the user agent ought to do so by selecting the challenge with what it | the user agent ought to do so by selecting the challenge with what it | |||
| considers to be the most secure auth-scheme that it understands, | considers to be the most secure auth-scheme that it understands, | |||
| obtaining credentials from the user as appropriate. | obtaining credentials from the user as appropriate. | |||
| credentials = auth-scheme [ 1*SP ( token68 / #auth-param ) ] | credentials = auth-scheme [ 1*SP ( token68 / #auth-param ) ] | |||
| Upon a request for a protected resource that omits credentials, | Upon a request for a protected resource that omits credentials, | |||
| contains invalid credentials (e.g., a bad password) or partial | contains invalid credentials (e.g., a bad password) or partial | |||
| credentials (e.g., when the authentication scheme requires more than | credentials (e.g., when the authentication scheme requires more than | |||
| skipping to change at page 6, line 30 | skipping to change at page 6, line 30 | |||
| omit credentials or contain invalid or partial credentials, a proxy | omit credentials or contain invalid or partial credentials, a proxy | |||
| SHOULD send a 407 (Proxy Authentication Required) response that | SHOULD send a 407 (Proxy Authentication Required) response that | |||
| contains a Proxy-Authenticate header field with a (possibly new) | contains a Proxy-Authenticate header field with a (possibly new) | |||
| challenge applicable to the proxy. | challenge applicable to the proxy. | |||
| A server receiving credentials that are valid, but not adequate to | A server receiving credentials that are valid, but 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 [Part2]). | |||
| The HTTP protocol does not restrict applications to this simple | The HTTP protocol does not restrict applications to this simple | |||
| challenge-response mechanism for access authentication. Additional | challenge-response framework for access authentication. Additional | |||
| mechanisms MAY be used, such as encryption at the transport level or | mechanisms MAY be used, such as encryption at the transport level or | |||
| via message encapsulation, and with additional header fields | via message encapsulation, and with additional header fields | |||
| specifying authentication information. However, such additional | specifying authentication information. However, such additional | |||
| mechanisms are not defined by this specification. | mechanisms are not defined by this specification. | |||
| Proxies MUST forward the WWW-Authenticate and Authorization header | Proxies MUST forward the WWW-Authenticate and Authorization header | |||
| fields unmodified and follow the rules found in Section 4.1. | fields unmodified and follow the rules found in Section 4.1. | |||
| 2.2. Protection Space (Realm) | 2.2. Protection Space (Realm) | |||
| skipping to change at page 7, line 4 | skipping to change at page 7, line 4 | |||
| authentication schemes that wish to indicate the scope of protection. | authentication schemes that wish to indicate the 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 [Part1]) of the server being accessed, in combination with the | |||
| realm value if present. These realms allow the protected resources | realm value if present. These realms allow the protected resources | |||
| on a server to be partitioned into a set of protection spaces, each | on a server to be partitioned into a set of protection spaces, each | |||
| with its own authentication scheme and/or authorization database. | with its own authentication scheme and/or authorization database. | |||
| The realm value is a string, generally assigned by the origin server, | The realm value is a string, generally assigned by the origin server, | |||
| that can have additional semantics specific to the authentication | that can have additional semantics specific to the authentication | |||
| scheme. Note that there can be multiple challenges with the same | scheme. Note that a response can have multiple challenges with the | |||
| auth-scheme but different realms. | same auth-scheme but 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 same credentials MAY be reused for all other requests within that | the same credentials MAY be reused for all other requests within that | |||
| protection space for a period of time determined by the | protection space for a period of time determined by the | |||
| authentication scheme, parameters, and/or user preference. Unless | authentication scheme, parameters, and/or user preference. Unless | |||
| otherwise defined by the authentication scheme, a single protection | specifically allowed by the authentication scheme, a single | |||
| space cannot extend outside the scope of its server. | protection space cannot extend outside the scope of its server. | |||
| For historical reasons, senders MUST only use the quoted-string | For historical reasons, senders MUST only generate the quoted-string | |||
| syntax. Recipients might have to support both token and quoted- | syntax. Recipients might have to support both token and quoted- | |||
| string syntax for maximum interoperability with existing clients that | string syntax for maximum interoperability with existing clients that | |||
| have been accepting both notations for a long time. | have been accepting both notations for a long time. | |||
| 2.3. Authentication Scheme Registry | ||||
| The HTTP Authentication Scheme Registry defines the name space for | ||||
| the authentication schemes in challenges and credentials. | ||||
| Registrations MUST include the following fields: | ||||
| o Authentication Scheme Name | ||||
| o Pointer to specification text | ||||
| o Notes (optional) | ||||
| Values to be added to this name space require IETF Review (see | ||||
| [RFC5226], Section 4.1). | ||||
| The registry itself is maintained at | ||||
| <http://www.iana.org/assignments/http-authschemes>. | ||||
| 2.3.1. Considerations for New Authentication Schemes | ||||
| There are certain aspects of the HTTP Authentication Framework that | ||||
| put constraints on how new authentication schemes can work: | ||||
| o HTTP authentication is presumed to be stateless: all of the | ||||
| information necessary to authenticate a request MUST be provided | ||||
| in the request, rather than be dependent on the server remembering | ||||
| prior requests. Authentication based on, or bound to, the | ||||
| underlying connection is outside the scope of this specification | ||||
| and inherently flawed unless steps are taken to ensure that the | ||||
| connection cannot be used by any party other than the | ||||
| authenticated user (see Section 2.3 of [Part1]). | ||||
| o The authentication parameter "realm" is reserved for defining | ||||
| Protection Spaces as defined in Section 2.2. New schemes MUST NOT | ||||
| use it in a way incompatible with that definition. | ||||
| o The "token68" notation was introduced for compatibility with | ||||
| existing authentication schemes and can only be used once per | ||||
| challenge/credentials. New schemes thus ought to use the "auth- | ||||
| param" syntax instead, because otherwise future extensions will be | ||||
| impossible. | ||||
| o The parsing of challenges and credentials is defined by this | ||||
| specification, and cannot be modified by new authentication | ||||
| schemes. When the auth-param syntax is used, all parameters ought | ||||
| to support both token and quoted-string syntax, and syntactical | ||||
| constraints ought to be defined on the field value after parsing | ||||
| (i.e., quoted-string processing). This is necessary so that | ||||
| recipients can use a generic parser that applies to all | ||||
| authentication schemes. | ||||
| Note: The fact that the value syntax for the "realm" parameter is | ||||
| restricted to quoted-string was a bad design choice not to be | ||||
| repeated for new parameters. | ||||
| o Definitions of new schemes ought to define the treatment of | ||||
| unknown extension parameters. In general, a "must-ignore" rule is | ||||
| preferable over "must-understand", because otherwise it will be | ||||
| hard to introduce new parameters in the presence of legacy | ||||
| recipients. Furthermore, it's good to describe the policy for | ||||
| defining new parameters (such as "update the specification", or | ||||
| "use this registry"). | ||||
| o Authentication schemes need to document whether they are usable in | ||||
| origin-server authentication (i.e., using WWW-Authenticate), | ||||
| and/or proxy authentication (i.e., using Proxy-Authenticate). | ||||
| o The credentials carried in an Authorization header field are | ||||
| specific to the User Agent, and therefore have the same effect on | ||||
| HTTP caches as the "private" Cache-Control response directive, | ||||
| within the scope of the request they appear in. | ||||
| Therefore, new authentication schemes that choose not to carry | ||||
| credentials in the Authorization header field (e.g., using a newly | ||||
| defined header field) will need to explicitly disallow caching, by | ||||
| mandating the use of either Cache-Control request directives | ||||
| (e.g., "no-store") or response directives (e.g., "private"). | ||||
| 3. Status Code Definitions | 3. Status Code Definitions | |||
| 3.1. 401 Unauthorized | 3.1. 401 Unauthorized | |||
| The 401 (Unauthorized) status code indicates that the request has not | The 401 (Unauthorized) status code indicates that the request has not | |||
| been applied because it lacks valid authentication credentials for | been applied because it lacks valid authentication credentials for | |||
| the target resource. The origin server MUST send a WWW-Authenticate | the target resource. The origin server MUST send a WWW-Authenticate | |||
| header field (Section 4.4) containing at least one challenge | header field (Section 4.4) containing at least one challenge | |||
| applicable to the target resource. If the request included | applicable to the target resource. If the request included | |||
| authentication credentials, then the 401 response indicates that | authentication credentials, then the 401 response indicates that | |||
| authorization has been refused for those credentials. The client MAY | authorization has been refused for those credentials. The user agent | |||
| repeat the request with a new or replaced Authorization header field | MAY repeat the request with a new or replaced Authorization header | |||
| (Section 4.1). If the 401 response contains the same challenge as | field (Section 4.1). If the 401 response contains the same challenge | |||
| the prior response, and the user agent has already attempted | as the prior response, and the user agent has already attempted | |||
| authentication at least once, then the user agent SHOULD present the | authentication at least once, then the user agent SHOULD present the | |||
| enclosed representation to the user, since it usually contains | enclosed representation to the user, since it usually contains | |||
| relevant diagnostic information. | 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 401 | The 407 (Proxy Authentication Required) status code is similar to 401 | |||
| (Unauthorized), but indicates that the client needs to authenticate | (Unauthorized), but indicates that the client needs to authenticate | |||
| itself in order to use a proxy. The proxy MUST send a Proxy- | itself in order to use a proxy. The proxy MUST send a Proxy- | |||
| Authenticate header field (Section 4.2) containing a challenge | Authenticate header field (Section 4.2) containing a challenge | |||
| skipping to change at page 9, line 41 | skipping to change at page 8, line 8 | |||
| field (Section 4.3). | field (Section 4.3). | |||
| 4. Header Field Definitions | 4. Header Field Definitions | |||
| This section defines the syntax and semantics of HTTP/1.1 header | This section defines the syntax and semantics of HTTP/1.1 header | |||
| fields related to authentication. | fields related to authentication. | |||
| 4.1. Authorization | 4.1. Authorization | |||
| The "Authorization" header field allows a user agent to authenticate | The "Authorization" header field allows a user agent to authenticate | |||
| itself with a server -- usually, but not necessarily, after receiving | itself with an origin server -- usually, but not necessarily, after | |||
| a 401 (Unauthorized) response. Its value consists of credentials | receiving a 401 (Unauthorized) response. Its value consists of | |||
| containing information of the user agent for the realm of the | credentials containing information of the user agent for the realm of | |||
| resource being requested. | the resource being requested. | |||
| 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 SHOULD be valid for all other requests within this realm | credentials SHOULD be valid for all other requests within this realm | |||
| (assuming that the authentication scheme itself does not require | (assuming that the authentication scheme itself does not require | |||
| otherwise, such as credentials that vary according to a challenge | otherwise, such as credentials that vary according to a challenge | |||
| value or using synchronized clocks). | value or using synchronized clocks). | |||
| See Section 3.2 of [Part6] for details of and requirements pertaining | See Section 3.2 of [Part6] for details of and requirements pertaining | |||
| skipping to change at page 10, line 33 | skipping to change at page 8, line 49 | |||
| forwarding the Proxy-Authenticate header field. | forwarding the Proxy-Authenticate header field. | |||
| Note that the parsing considerations for WWW-Authenticate apply to | Note that the parsing considerations for WWW-Authenticate apply to | |||
| this header field as well; see Section 4.4 for details. | this header field as well; see Section 4.4 for details. | |||
| 4.3. Proxy-Authorization | 4.3. Proxy-Authorization | |||
| The "Proxy-Authorization" header field allows the client to identify | The "Proxy-Authorization" header field allows the client to identify | |||
| itself (or its user) to a proxy that requires authentication. Its | itself (or its user) to a proxy that requires authentication. Its | |||
| value consists of credentials containing the authentication | value consists of credentials containing the authentication | |||
| information of the user agent for the proxy and/or realm of the | information of the client for the proxy and/or realm of the resource | |||
| resource being requested. | being requested. | |||
| Proxy-Authorization = credentials | Proxy-Authorization = credentials | |||
| Unlike Authorization, the Proxy-Authorization header field applies | Unlike Authorization, the Proxy-Authorization header field applies | |||
| only to the next outbound proxy that demanded authentication using | only to the next outbound proxy that demanded authentication using | |||
| the Proxy-Authenticate field. When multiple proxies are used in a | the Proxy-Authenticate field. When multiple proxies are used in a | |||
| chain, the Proxy-Authorization header field is consumed by the first | chain, the Proxy-Authorization header field is consumed by the first | |||
| outbound proxy that was expecting to receive credentials. A proxy | outbound proxy that was expecting to receive credentials. A proxy | |||
| MAY relay the credentials from the client request to the next proxy | MAY relay the credentials from the client request to the next proxy | |||
| if that is the mechanism by which the proxies cooperatively | if that is the mechanism by which the proxies cooperatively | |||
| skipping to change at page 11, line 38 | skipping to change at page 10, line 9 | |||
| well. Therefore, a sequence of comma, whitespace, and comma can | well. Therefore, a sequence of comma, whitespace, and comma can | |||
| be considered both as applying to the preceding challenge, or to | be considered both as applying to the preceding challenge, or to | |||
| be an empty entry in the list of challenges. In practice, this | be an empty entry in the list of challenges. In practice, this | |||
| ambiguity does not affect the semantics of the header field value | ambiguity does not affect the semantics of the header field value | |||
| and thus is harmless. | and thus is harmless. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| 5.1. Authentication Scheme Registry | 5.1. Authentication Scheme Registry | |||
| The registration procedure for HTTP Authentication Schemes is defined | The HTTP Authentication Scheme Registry defines the name space for | |||
| by Section 2.3 of this document. | the authentication schemes in challenges and credentials. It will be | |||
| created and maintained at | ||||
| The HTTP Method Authentication Scheme shall be created at | ||||
| <http://www.iana.org/assignments/http-authschemes>. | <http://www.iana.org/assignments/http-authschemes>. | |||
| 5.1.1. Procedure | ||||
| Registrations MUST include the following fields: | ||||
| o Authentication Scheme Name | ||||
| o Pointer to specification text | ||||
| o Notes (optional) | ||||
| Values to be added to this name space require IETF Review (see | ||||
| [RFC5226], Section 4.1). | ||||
| 5.1.2. Considerations for New Authentication Schemes | ||||
| There are certain aspects of the HTTP Authentication Framework that | ||||
| put constraints on how new authentication schemes can work: | ||||
| o HTTP authentication is presumed to be stateless: all of the | ||||
| information necessary to authenticate a request MUST be provided | ||||
| in the request, rather than be dependent on the server remembering | ||||
| prior requests. Authentication based on, or bound to, the | ||||
| underlying connection is outside the scope of this specification | ||||
| and inherently flawed unless steps are taken to ensure that the | ||||
| connection cannot be used by any party other than the | ||||
| authenticated user (see Section 2.3 of [Part1]). | ||||
| o The authentication parameter "realm" is reserved for defining | ||||
| Protection Spaces as defined in Section 2.2. New schemes MUST NOT | ||||
| use it in a way incompatible with that definition. | ||||
| o The "token68" notation was introduced for compatibility with | ||||
| existing authentication schemes and can only be used once per | ||||
| challenge or credential. New schemes thus ought to use the "auth- | ||||
| param" syntax instead, because otherwise future extensions will be | ||||
| impossible. | ||||
| o The parsing of challenges and credentials is defined by this | ||||
| specification, and cannot be modified by new authentication | ||||
| schemes. When the auth-param syntax is used, all parameters ought | ||||
| to support both token and quoted-string syntax, and syntactical | ||||
| constraints ought to be defined on the field value after parsing | ||||
| (i.e., quoted-string processing). This is necessary so that | ||||
| recipients can use a generic parser that applies to all | ||||
| authentication schemes. | ||||
| Note: The fact that the value syntax for the "realm" parameter is | ||||
| restricted to quoted-string was a bad design choice not to be | ||||
| repeated for new parameters. | ||||
| o Definitions of new schemes ought to define the treatment of | ||||
| unknown extension parameters. In general, a "must-ignore" rule is | ||||
| preferable over "must-understand", because otherwise it will be | ||||
| hard to introduce new parameters in the presence of legacy | ||||
| recipients. Furthermore, it's good to describe the policy for | ||||
| defining new parameters (such as "update the specification", or | ||||
| "use this registry"). | ||||
| o Authentication schemes need to document whether they are usable in | ||||
| origin-server authentication (i.e., using WWW-Authenticate), | ||||
| and/or proxy authentication (i.e., using Proxy-Authenticate). | ||||
| o The credentials carried in an Authorization header field are | ||||
| specific to the User Agent, and therefore have the same effect on | ||||
| HTTP caches as the "private" Cache-Control response directive | ||||
| (Section 7.2.2.6 of [Part6]), within the scope of the request they | ||||
| appear in. | ||||
| Therefore, new authentication schemes that choose not to carry | ||||
| credentials in the Authorization header field (e.g., using a newly | ||||
| defined header field) will need to explicitly disallow caching, by | ||||
| mandating the use of either Cache-Control request directives | ||||
| (e.g., "no-store", Section 7.2.1.5 of [Part6]) or response | ||||
| directives (e.g., "private"). | ||||
| 5.2. Status Code Registration | 5.2. Status Code Registration | |||
| The HTTP Status Code Registry located at | The HTTP Status Code Registry located at | |||
| <http://www.iana.org/assignments/http-status-codes> shall be updated | <http://www.iana.org/assignments/http-status-codes> shall be updated | |||
| with the registrations below: | 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 | |||
| The Message Header Field Registry located at <http://www.iana.org/ | HTTP header fields are registered within the Message Header Field | |||
| assignments/message-headers/message-header-index.html> shall be | Registry maintained at <http://www.iana.org/assignments/ | |||
| updated with the permanent registrations below (see [BCP90]): | message-headers/message-header-index.html>. | |||
| This document defines the following HTTP header fields, so their | ||||
| associated registry entries shall be updated according to the | ||||
| permanent registrations below (see [BCP90]): | ||||
| +---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
| | Header Field Name | Protocol | Status | Reference | | | Header Field Name | Protocol | Status | Reference | | |||
| +---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
| | Authorization | http | standard | Section 4.1 | | | Authorization | http | standard | Section 4.1 | | |||
| | Proxy-Authenticate | http | standard | Section 4.2 | | | Proxy-Authenticate | http | standard | Section 4.2 | | |||
| | Proxy-Authorization | http | standard | Section 4.3 | | | Proxy-Authorization | http | standard | Section 4.3 | | |||
| | WWW-Authenticate | http | standard | Section 4.4 | | | WWW-Authenticate | http | standard | Section 4.4 | | |||
| +---------------------+----------+----------+-------------+ | +---------------------+----------+----------+-------------+ | |||
| skipping to change at page 13, line 18 | skipping to change at page 13, line 22 | |||
| password protection in screen savers, idle time-outs, and other | password protection in screen savers, idle time-outs, and other | |||
| methods that mitigate the security problems inherent in this problem. | methods that mitigate the security problems inherent in this problem. | |||
| In particular, user agents that cache credentials are encouraged to | In particular, user agents that cache credentials are encouraged to | |||
| provide a readily accessible mechanism for discarding cached | provide a readily accessible mechanism for discarding cached | |||
| credentials under user control. | credentials under user control. | |||
| 6.2. Protection Spaces | 6.2. Protection Spaces | |||
| Authentication schemes that solely rely on the "realm" mechanism for | Authentication schemes that solely rely on the "realm" mechanism for | |||
| establishing a protection space will expose credentials to all | establishing a protection space will expose credentials to all | |||
| resources on a server. Clients that have successfully made | resources on an origin server. Clients that have successfully made | |||
| authenticated requests with a resource can use the same | authenticated requests with a resource can use the same | |||
| authentication credentials for other resources on the same server. | authentication credentials for other resources on the same origin | |||
| This makes it possible for a different resource to harvest | server. This makes it possible for a different resource to harvest | |||
| authentication credentials for other resources. | authentication credentials for other resources. | |||
| This is of particular concern when a server hosts resources for | This is of particular concern when an origin server hosts resources | |||
| multiple parties under the same canonical root URI (Section 2.2). | for multiple parties under the same canonical root URI (Section 2.2). | |||
| Possible mitigation strategies include restricting direct access to | Possible mitigation strategies include restricting direct access to | |||
| authentication credentials (i.e., not making the content of the | authentication credentials (i.e., not making the content of the | |||
| Authorization request header field available), and separating | Authorization request header field available), and separating | |||
| protection spaces by using a different host name for each party. | protection spaces by using a different host name (or port number) for | |||
| each party. | ||||
| 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. | |||
| skipping to change at page 13, line 44 | skipping to change at page 14, line 4 | |||
| 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 9 of [Part1] for the Acknowledgments related to this | See Section 9 of [Part1] 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 | [Part1] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
| draft-ietf-httpbis-p1-messaging-22 (work in progress), | draft-ietf-httpbis-p1-messaging-23 (work in progress), | |||
| February 2013. | July 2013. | |||
| [Part2] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [Part2] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", | Protocol (HTTP/1.1): Semantics and Content", | |||
| draft-ietf-httpbis-p2-semantics-22 (work in progress), | draft-ietf-httpbis-p2-semantics-23 (work in progress), | |||
| February 2013. | July 2013. | |||
| [Part6] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [Part6] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
| draft-ietf-httpbis-p6-cache-22 (work in progress), | draft-ietf-httpbis-p6-cache-23 (work in progress), | |||
| February 2013. | July 2013. | |||
| [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. | |||
| 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 | |||
| skipping to change at page 15, line 13 | skipping to change at page 15, line 20 | |||
| The "realm" parameter is no longer always required on challenges; | The "realm" parameter is no longer always required on challenges; | |||
| consequently, the ABNF allows challenges without any auth parameters. | consequently, the ABNF allows challenges without any auth parameters. | |||
| (Section 2) | (Section 2) | |||
| The "token68" alternative to auth-param lists has been added for | The "token68" alternative to auth-param lists has been added for | |||
| consistency with legacy authentication schemes such as "Basic". | consistency with legacy authentication schemes such as "Basic". | |||
| (Section 2) | (Section 2) | |||
| This specification introduces the Authentication Scheme Registry, | This specification introduces the Authentication Scheme Registry, | |||
| along with considerations for new authentication schemes. | along with considerations for new authentication schemes. | |||
| (Section 2.3) | (Section 5.1) | |||
| 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 [Part1]: | |||
| BWS = <BWS, defined in [Part1], Section 3.2.3> | BWS = <BWS, defined in [Part1], Section 3.2.3> | |||
| OWS = <OWS, defined in [Part1], Section 3.2.3> | OWS = <OWS, defined in [Part1], Section 3.2.3> | |||
| quoted-string = <quoted-string, defined in [Part1], Section 3.2.6> | quoted-string = <quoted-string, defined in [Part1], Section 3.2.6> | |||
| token = <token, defined in [Part1], Section 3.2.6> | token = <token, defined in [Part1], Section 3.2.6> | |||
| Appendix C. Collected ABNF | Appendix C. Collected ABNF | |||
| In the collected ABNF below, list rules are expanded as per Section | ||||
| 1.2 of [Part1]. | ||||
| Authorization = credentials | Authorization = credentials | |||
| BWS = <BWS, defined in [Part1], Section 3.2.3> | BWS = <BWS, defined in [Part1], Section 3.2.3> | |||
| OWS = <OWS, defined in [Part1], Section 3.2.3> | OWS = <OWS, defined in [Part1], Section 3.2.3> | |||
| Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS | Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS | |||
| challenge ] ) | challenge ] ) | |||
| Proxy-Authorization = credentials | Proxy-Authorization = credentials | |||
| skipping to change at page 17, line 30 | skipping to change at page 17, line 27 | |||
| o Conformance criteria and considerations regarding error handling | o Conformance criteria and considerations regarding error handling | |||
| are now defined in Part 1. | are now defined in Part 1. | |||
| D.3. Since draft-ietf-httpbis-p7-auth-21 | D.3. Since draft-ietf-httpbis-p7-auth-21 | |||
| Closed issues: | Closed issues: | |||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/403>: | o <http://tools.ietf.org/wg/httpbis/trac/ticket/403>: | |||
| "Authentication and caching - max-age" | "Authentication and caching - max-age" | |||
| D.4. Since draft-ietf-httpbis-p7-auth-22 | ||||
| Closed issues: | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/436>: "explain list | ||||
| expansion in ABNF appendices" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/439>: "terminology: | ||||
| mechanism vs framework vs scheme" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/463>: "Editorial | ||||
| suggestions" | ||||
| o <http://tools.ietf.org/wg/httpbis/trac/ticket/464>: "placement of | ||||
| extension point considerations" | ||||
| Index | Index | |||
| 4 | 4 | |||
| 401 Unauthorized (status code) 9 | 401 Unauthorized (status code) 7 | |||
| 407 Proxy Authentication Required (status code) 9 | 407 Proxy Authentication Required (status code) 7 | |||
| A | A | |||
| Authorization header field 9 | Authorization header field 8 | |||
| 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 9 | Authorization 8 | |||
| challenge 5 | challenge 5 | |||
| credentials 6 | credentials 6 | |||
| Proxy-Authenticate 10 | Proxy-Authenticate 8 | |||
| Proxy-Authorization 10 | Proxy-Authorization 8 | |||
| token68 5 | token68 5 | |||
| WWW-Authenticate 11 | WWW-Authenticate 9 | |||
| P | P | |||
| Protection Space 6 | Protection Space 6 | |||
| Proxy-Authenticate header field 10 | Proxy-Authenticate header field 8 | |||
| Proxy-Authorization header field 10 | Proxy-Authorization header field 8 | |||
| R | R | |||
| Realm 6 | Realm 6 | |||
| W | W | |||
| WWW-Authenticate header field 10 | WWW-Authenticate header field 9 | |||
| Authors' Addresses | Authors' Addresses | |||
| Roy T. Fielding (editor) | Roy T. Fielding (editor) | |||
| Adobe Systems Incorporated | Adobe Systems Incorporated | |||
| 345 Park Ave | 345 Park Ave | |||
| San Jose, CA 95110 | San Jose, CA 95110 | |||
| USA | USA | |||
| EMail: fielding@gbiv.com | EMail: fielding@gbiv.com | |||
| End of changes. 42 change blocks. | ||||
| 152 lines changed or deleted | 171 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||