| < draft-mills-kitten-sasl-oauth-03.txt | draft-mills-kitten-sasl-oauth-04.txt > | |||
|---|---|---|---|---|
| KITTEN W. Mills | KITTEN W. Mills | |||
| Internet-Draft T. Showalter | Internet-Draft T. Showalter | |||
| Intended status: Standards Track Yahoo! Inc. | Intended status: Standards Track Yahoo! Inc. | |||
| Expires: January 2, 2012 H. Tschofenig | Expires: May 3, 2012 H. Tschofenig | |||
| Nokia Siemens Networks | Nokia Siemens Networks | |||
| July 1, 2011 | October 31, 2011 | |||
| Tunneled HTTP Authentication For SASL | A SASL and GSS-API Mechanism for OAuth | |||
| draft-mills-kitten-sasl-oauth-03.txt | draft-mills-kitten-sasl-oauth-04.txt | |||
| Abstract | Abstract | |||
| Simple Authentication and Security Layer (SASL) is a framework for | OAuth enables a third-party application to obtain limited access to a | |||
| providing authentication and data security services in connection- | protected resource, either on behalf of a resource owner by | |||
| oriented protocols via replaceable mechanisms. OAuth is a protocol | orchestrating an approval interaction, or by allowing the third-party | |||
| framework for delegated HTTP authentication and thereby provides a | application to obtain access on its own behalf. | |||
| method for clients to access a protected resource on behalf of a | ||||
| resource owner. | ||||
| This document defines the use of HTTP authentication over SASL, and | This document defines how an application client uses OAuth over the | |||
| additionally defines authorization and token issuing endpoint | Simple Authentication and Security Layer (SASL) or the Generic | |||
| discovery. Thereby, it enables schemes defined within the OAuth | Security Service Application Program Interface (GSS-API) to access a | |||
| framework for non-HTTP-based application protocols. | protected resource at a resource serve, and additionally defines | |||
| authorization and token issuing endpoint discovery. Thereby, it | ||||
| enables schemes defined within the OAuth framework for non-HTTP-based | ||||
| application protocols. | ||||
| A significant benefit of OAuth for usage in clients that usually | Clients typically store the user's long term credential. This does, | |||
| store passwords is storing tokens instead of passwords. This is much | however, lead to significant security vulnerabilities, for example, | |||
| lower risk since tokens can be more limited in scope of access and | when such a credential leaks. A significant benefit of OAuth for | |||
| can be managed and revoked separately from the user credential | usage in those clients is that the password is replaced by a token. | |||
| Tokens typically provided limited access rights and can be managed | ||||
| and revoked separately from the user's long-term credential | ||||
| (password). | (password). | |||
| 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 May 3, 2012. | ||||
| This Internet-Draft will expire on January 2, 2012. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 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 | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. The OAuth SASL Mechanism . . . . . . . . . . . . . . . . . . . 7 | 3. OAuth SASL Mechanism Specification . . . . . . . . . . . . . . 8 | |||
| 3.1. Channel Binding . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. Channel Binding . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.1.1. Generating channel binding data to be exchanged . . . 7 | ||||
| 3.2. Initial Client Response . . . . . . . . . . . . . . . . . 8 | 3.2. Initial Client Response . . . . . . . . . . . . . . . . . 8 | |||
| 3.2.1. Query String in OAUTH-PLUS . . . . . . . . . . . . . . 8 | 3.2.1. Query String in OAUTH-PLUS . . . . . . . . . . . . . . 9 | |||
| 3.3. Server's Response . . . . . . . . . . . . . . . . . . . . 9 | 3.3. Server's Response . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3.1. Mapping to SASL Identities . . . . . . . . . . . . . . 9 | 3.4. Mapping to SASL Identities . . . . . . . . . . . . . . . . 10 | |||
| 3.4. Discovery Information . . . . . . . . . . . . . . . . . . 10 | 3.5. Discovery Information . . . . . . . . . . . . . . . . . . 10 | |||
| 3.5. Use of Signature Type Authorization . . . . . . . . . . . 11 | 3.6. Use of Signature Type Authorization . . . . . . . . . . . 12 | |||
| 4. Implementation Requirements . . . . . . . . . . . . . . . . . 13 | 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 14 | |||
| 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 14 | 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 15 | |||
| 5.2. MAC Authentication with Channel Binding . . . . . . . . . 14 | 5.2. MAC Authentication with Channel Binding . . . . . . . . . 15 | |||
| 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 15 | 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 16 | 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 17 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 18 | 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.2. Link Type Registration . . . . . . . . . . . . . . . . . . 18 | 7.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.2.1. OAuth 2 Authentication Endpoint . . . . . . . . . . . 18 | 7.3. Link Type Registration . . . . . . . . . . . . . . . . . . 19 | |||
| 7.2.2. OAuth 2 Token Endpoint . . . . . . . . . . . . . . . . 19 | 7.3.1. OAuth 2 Authentication Endpoint . . . . . . . . . . . 19 | |||
| 7.2.3. OAuth 1.0a Request Initiation Endpoint . . . . . . . . 19 | 7.3.2. OAuth 2 Token Endpoint . . . . . . . . . . . . . . . . 20 | |||
| 7.2.4. OAuth 1.0a Authorization Endpoint . . . . . . . . . . 19 | 7.3.3. OAuth 1.0a Request Initiation Endpoint . . . . . . . . 20 | |||
| 7.2.5. OAuth 1.0a Token Endpoint . . . . . . . . . . . . . . 20 | 7.3.4. OAuth 1.0a Authorization Endpoint . . . . . . . . . . 21 | |||
| 8. Appendix A -- Document History . . . . . . . . . . . . . . . . 21 | 7.3.5. OAuth 1.0a Token Endpoint . . . . . . . . . . . . . . 21 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 8. Appendix A -- Document History . . . . . . . . . . . . . . . . 22 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . . 22 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . . 23 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 23 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . . 24 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 24 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 1. Introduction | 1. Introduction | |||
| OAuth [I-D.ietf-oauth-v2] offers a standard mechanism for delegating | OAuth [I-D.ietf-oauth-v2] enables a third-party application to obtain | |||
| authentication typically used for the purpose of control access to | limited access to a protected resource, either on behalf of a | |||
| resources. The core OAuth specification defines a framework for | resource owner by orchestrating an approval interaction, or by | |||
| authentication and token usage in an HTTP-based environment. The | allowing the third-party application to obtain access on its own | |||
| HTTP authorization schemes and tokens in this model are defined | behalf. The core OAuth specification [I-D.ietf-oauth-v2] does not | |||
| separately, some are defined within the OAuth 2 framework such as | define the interaction between the client and the resource server | |||
| OAuth 2.0 Protocol: Bearer Tokens [I-D.ietf-oauth-v2-bearer], and | with the access to a protected resource using an Access Token. This | |||
| some are free standing with OAuth 2 framework bindings such as MAC | functionality is described in two separate specifications, namely | |||
| Authentication [I-D.hammer-oauth-v2-mac-token] tokens. This | [I-D.ietf-oauth-v2-bearer], and [I-D.ietf-oauth-v2-http-mac], whereby | |||
| mechanism takes advantage of the OAuth protocol and infrastructure to | the focus is on an HTTP-based environment only. | |||
| provide a way to use SASL [RFC4422] for access to resources for non- | ||||
| HTTP-based protocols such as IMAP [RFC3501], which is what this memo | ||||
| uses in the examples. | ||||
| The general authentication flow is that the application will first | Figure 1 shows the abstract message flow as shown in Figure 1 of | |||
| obtain an access token from an OAuth token service for the resource. | [I-D.ietf-oauth-v2]. | |||
| Once the client has obtained an OAuth access token it then connects | ||||
| and authenticated using this SASL mechanism. | ||||
| Figure 1 shows the relationship between SASL and OAuth graphically. | +--------+ +---------------+ | |||
| Item (1) denotes the part of the OAuth exchange that remains | | |--(A)- Authorization Request ->| Resource | | |||
| unchanged from [I-D.ietf-oauth-v2], i.e. where the client obtains and | | | | Owner | | |||
| refreshes Access Tokens. This document focuses on item (2) where the | | |<-(B)-- Authorization Grant ---| | | |||
| Access Token is presented to the resource server over SASL. | | | +---------------+ | |||
| | | | ||||
| | | +---------------+ | ||||
| | |--(C)-- Authorization Grant -->| Authorization | | ||||
| | Client | | Server | | ||||
| | |<-(D)----- Access Token -------| | | ||||
| | | +---------------+ | ||||
| | | | ||||
| | | +---------------+ | ||||
| | |--(E)----- Access Token ------>| Resource | | ||||
| | | | Server | | ||||
| | |<-(F)--- Protected Resource ---| | | ||||
| +--------+ +---------------+ | ||||
| Figure 1: Abstract OAuth 2.0 Protocol Flow | ||||
| This document takes advantage of the OAuth protocol and its | ||||
| deployment base to provide a way to use SASL [RFC4422] as well as the | ||||
| GSS-API [RFC2743] to gain access to resources when using non-HTTP- | ||||
| based protocols, such as the Internet Message Access Protocol (IMAP) | ||||
| [RFC3501], which is what this memo uses in the examples. | ||||
| The Simple Authentication and Security Layer (SASL) is a framework | ||||
| for providing authentication and data security services in | ||||
| connection-oriented protocols via replaceable mechanisms. It | ||||
| provides a structured interface between protocols and mechanisms. | ||||
| The resulting framework allows new protocols to reuse existing | ||||
| mechanisms and allows old protocols to make use of new mechanisms. | ||||
| The framework also provides a protocol for securing subsequent | ||||
| protocol exchanges within a data security layer. | ||||
| The Generic Security Service Application Program Interface (GSS-API) | ||||
| [RFC2743] provides a framework for applications to support multiple | ||||
| authentication mechanisms through a unified interface. | ||||
| This document defines a SASL mechanism for OAuth, but it conforms to | ||||
| the new bridge between SASL and the GSS-API called GS2 [RFC5801]. | ||||
| This means that this document defines both a SASL mechanism and a | ||||
| GSS-API mechanism. Implementers may be interested in either the | ||||
| SASL, the GSS-API, or even both mechanisms. To faciliate these two | ||||
| variants, the description has been split into two parts, one part | ||||
| that provides normative references for those interested in the SASL | ||||
| OAuth mechanism (see Section 3), and a second part for those | ||||
| implementers that wish to implement the GSS-API portion (see | ||||
| Section 4). | ||||
| When OAuth is integrated into SASL and the GSS-API the high-level | ||||
| steps are as follows: | ||||
| (A) The client requests authorization from the resource owner. | ||||
| The authorization request can be made directly to the resource | ||||
| owner (as shown), or preferably indirectly via the authorization | ||||
| server as an intermediary. | ||||
| (B) The client receives an authorization grant which is a | ||||
| credential representing the resource owner's authorization, | ||||
| expressed using one of four grant types defined in this | ||||
| specification or using an extension grant type. The authorization | ||||
| grant type depends on the method used by the client to request | ||||
| authorization and the types supported by the authorization server. | ||||
| (C) The client requests an access token by authenticating with the | ||||
| authorization server and presenting the authorization grant. | ||||
| (D) The authorization server authenticates the client and | ||||
| validates the authorization grant, and if valid issues an access | ||||
| token. | ||||
| (E) The client requests the protected resource from the resource | ||||
| server and authenticates by presenting the access token. | ||||
| (F) The resource server validates the access token, and if valid, | ||||
| serves the request. | ||||
| Steps (E) and (F) are not defined in [I-D.ietf-oauth-v2] and are the | ||||
| main functionality specified within this document. Additionally, an | ||||
| optional discovery exchange is defined. Consequently, the message | ||||
| exchange shown in Figure 2 is the result of this specification. (1) | ||||
| and (2) denote the optional discovery exchange steps that may happen | ||||
| before the OAuth 2.0 protocol exchange messages in steps (A)-(D) are | ||||
| executed. Steps (E) and (F) also defined in this specification. | ||||
| ----+ | ----+ | |||
| +--------+ +---------------+ | | +--------+ +---------------+ | | |||
| | |--(C)-- Authorization Request --->| Resource | | | | |--(A)-- Authorization Request --->| Resource | | | |||
| | | | Owner | |Plain | | | | Owner | |Plain | |||
| | |<-(D)------ Access Grant ---------| | |OAuth | | |<-(B)------ Access Grant ---------| | |OAuth | |||
| | | +---------------+ |2.0 | | | +---------------+ |2.0 | |||
| | | |(1) | | | | | |||
| | | Client Credentials & +---------------+ | | | | Client Credentials & +---------------+ | | |||
| | |--(E)------ Access Grant -------->| Authorization | | | | |--(C)------ Access Grant -------->| Authorization | | | |||
| | Client | | Server | | | | Client | | Server | | | |||
| | |<-(F)------ Access Token ---------| | | | | |<-(D)------ Access Token ---------| | | | |||
| | | (w/ Optional Refresh Token) +---------------+ | | | | (w/ Optional Refresh Token) +---------------+ | | |||
| | | ----+ | | | ----+ | |||
| | | | | | | |||
| | | ----+ | | | ----+ | |||
| | | (Optional discovery) +---------------+ | | | | (Optional discovery) +---------------+ | | |||
| | |--(A)------- User Name --------->| | | | | |--(1)------- User Name --------->| | | | |||
| | Client | | | | | | Client | | | | | |||
| | |<-(B)------ Authentication -------| | | | | |<-(2)------ Authentication -------| | | | |||
| | | endpoint information | Resource | |OAuth | | | endpoint information | Resource | |OAuth | |||
| | | | Server | |over | | | | Server | |over | |||
| | |--(G)------ Access Token -------->| | |SASL | | |--(E)------ Access Token -------->| | |SASL/ | |||
| | | | | | | | | | | |GSS- | |||
| | |<-(H)---- Protected Resource -----| | |(2) | | |<-(F)---- Protected Resource -----| | |API | |||
| +--------+ +---------------+ | | +--------+ +---------------+ | | |||
| ----+ | ----+ | |||
| Figure 1: Interworking Architecture | Figure 2: OAuth SASL Architecture | |||
| Note: The discovery procedure in OAuth is still work in progress. | Note: The discovery procedure in OAuth is still work in progress. | |||
| Hence, the discovery components described in this document should | Hence, the discovery components described in this document should | |||
| be considered incomplete and a tentative proposal. In general, | be considered incomplete and a tentative proposal. In general, | |||
| there is a trade off between a generic, externally available | there is a trade off between a generic, externally available | |||
| defined discovery mechanisms (such as Webfinger using host-meta | defined discovery mechanisms (such as Webfinger using host-meta | |||
| [I-D.hammer-hostmeta]) and configuration information exchanged in | [I-D.hammer-hostmeta], or [I-D.jones-simple-web-discovery]) and | |||
| band between the protocol endpoints. | configuration information exchanged in-band between the SASL | |||
| communication endpoints. | ||||
| It is worthwhile to note that this specification is also compatible | ||||
| with OAuth 1.0a [RFC5849]. | ||||
| 2. Terminology | 2. Terminology | |||
| 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]. | |||
| The reader is assumed to be familiar with the terms used in the OAuth | The reader is assumed to be familiar with the terms used in the OAuth | |||
| 2.0 specification. | 2.0 specification [I-D.ietf-oauth-v2]. | |||
| In examples, "C:" and "S:" indicate lines sent by the client and | In examples, "C:" and "S:" indicate lines sent by the client and | |||
| server respectively. Line breaks have been inserted for readability. | server respectively. Line breaks have been inserted for readability. | |||
| Note that the IMAP SASL specification requires base64 encoding | Note that the IMAP SASL specification requires base64 encoding | |||
| message, not this memo. | message, not this memo. | |||
| 3. The OAuth SASL Mechanism | 3. OAuth SASL Mechanism Specification | |||
| SASL is used as a generalized authentication method in a variety of | SASL is used as a generalized authentication method in a variety of | |||
| protocols. This document defines the "OAUTH" mechanism to allow HTTP | application layer protocols. This document defines two SASL | |||
| Authorization schemes in the OAuth framework to be used within the | mechanisms for usage with OAuth: "OAUTH" and "OAUTH-PLUS". The | |||
| SASL framework. In this model a client authenticates to an OAuth- | "OAUTH" SASL mechanism provides bearer token alike semantic for SASL | |||
| capable authorization server over HTTPS. This server then issues | while "OAUTH-PLUS" provides a semantic similar to OAuth MAC | |||
| tokens after successfully authenticating the resource owner. | authentication by utilizing a channel binding mechanism [RFC5056]. | |||
| Subsequently, the obtained token may be presented in an OAuth- | ||||
| authenticated request to the resource server. This mechanism further | ||||
| provides compatibility with OAuth 1.0a [RFC5849] and the "OAuth" | ||||
| authentication scheme defined there. | ||||
| 3.1. Channel Binding | 3.1. Channel Binding | |||
| [[TODO: make this -PLUS not -SSL since if you support CB you have to | ||||
| support all types.]] | ||||
| Channel binding [RFC5056] in this mechanism is defined in order to | ||||
| allow satisfying the security requirements of the authorization | ||||
| schemes used. This document defines the "OAUTH-PLUS" mechanism to | ||||
| provide channel binding for the OAUTH mechanism. | ||||
| If the specification for the underlying authorization scheme requires | If the specification for the underlying authorization scheme requires | |||
| a security layer such as TLS [RFC5246] the server SHOULD only provide | a security layer, such as TLS [RFC5246], the server SHOULD only offer | |||
| that scheme in a mechanism with channel binding enabled. | a mechanism where channel binding can be enabled. | |||
| 3.1.1. Generating channel binding data to be exchanged | ||||
| The channel binding data is computed by the client based on it's | The channel binding data is computed by the client based on it's | |||
| choice of preferred channel binding type. As specified in [RFC5056] | choice of preferred channel binding type. As specified in [RFC5056], | |||
| the channel binding information must start with the channel binding | the channel binding information MUST start with the channel binding | |||
| unique prefix followed by a colon (ASCII 0x3A), this is followed by | unique prefix, followed by a colon (ASCII 0x3A), followed by a base64 | |||
| base64 encoded channel binding payload. The channel binding payload | encoded channel binding payload. The channel binding payload is the | |||
| is the raw data from the channel binding type if the raw channel | raw data from the channel binding type if the raw channel binding | |||
| binding data is less than 500 bytes, if 500 bytes or larger the | data is less than 500 bytes. If the raw channel binding data is 500 | |||
| channel binding payload is a SHA-1 [RFC3174] hash of the raw channel | bytes or larger then a SHA-1 [RFC3174] hash of the raw channel | |||
| binding data. | binding data is computed. | |||
| 3.1.1.1. Use cases of generating channel binding data | ||||
| If the client is using tls-unique for channel binding then the raw | If the client is using tls-unique for a channel binding then the raw | |||
| channel binding data is the first TLS finished message. This is | channel binding data equals the first TLS finished message. This is | |||
| under the 500 byte limit, so the channel binding payload sent to the | under the 500 byte limit, so the channel binding payload sent to the | |||
| server would be the base64 encoded first TLS finished message. | server would be the base64 encoded first TLS finished message. | |||
| In the case where the client has chosen tls-endpoint, the raw channel | In the case where the client has chosen tls-endpoint, the raw channel | |||
| binding data is the certificate of the server the client connected | binding data is the certificate of the server the client connected | |||
| to. This will frequently be 500 bytes or more, and if it is then the | to, which will frequently be 500 bytes or more. If it is then the | |||
| channel binding payload is the base64 encoded SHA-1 hash of the | channel binding payload is the base64 encoded SHA-1 hash of the | |||
| server certificate. | server certificate. | |||
| 3.2. Initial Client Response | 3.2. Initial Client Response | |||
| The client response is formatted as an HTTP [RFC2616] request. The | The SASL client response is formatted as an HTTP [RFC2616] request. | |||
| HTTP request is limited in that the path MUST be "/". In the OAUTH | The HTTP request is limited in that the path MUST be "/". In the | |||
| mechanism no query string is allowed. The following header lines are | OAUTH mechanism no query string is allowed. The following header | |||
| defined in the client response: | lines are defined in the client response: | |||
| User (OPTIONAL): Contains the user identifier being | User (OPTIONAL): Contains the user identifier being | |||
| authenticated, and is provided to allow correct discovery | authenticated, and is provided to allow correct discovery | |||
| information to be returned. | information to be returned. | |||
| Host (REQUIRED): Contains the host name to which the client | Host (REQUIRED): Contains the host name to which the client | |||
| connected. | connected. | |||
| Authorization (REQUIRED): An HTTP Authorization header.. | Authorization (REQUIRED): An HTTP Authorization header. | |||
| The user name is provided by the client to allow the discovery | The user name is provided by the client to allow the discovery | |||
| information to be customized for the user, a given server could allow | information to be customized for the user, a given server could allow | |||
| multiple authenticators and it needs to return the correct one. For | multiple authenticators and it needs to return the correct one. For | |||
| instance, a large ISP could provide mail service for several domains | instance, a large ISP could provide mail service for several domains | |||
| who manage their own user information. For instance, users at foo- | who manage their own user information. For instance, users at foo- | |||
| example.com could be authenticated by an OAuth service at | example.com could be authenticated by an OAuth service at | |||
| https://oauth.foo-example.com/, and users at bar-example.com could be | https://oauth.foo-example.com/, and users at bar-example.com could be | |||
| authenticated by https://oauth.bar-example.com, but both could be | authenticated by https://oauth.bar-example.com, but both could be | |||
| served by a hypothetical IMAP server running at a third domain, | served by a hypothetical IMAP server running at a third domain, | |||
| skipping to change at page 9, line 21 ¶ | skipping to change at page 9, line 50 ¶ | |||
| scheme in use. | scheme in use. | |||
| In the OAUTH-PLUS mechanism the server examines the channel binding | In the OAUTH-PLUS mechanism the server examines the channel binding | |||
| data, extracts the channel binding unique prefix, and extracts the | data, extracts the channel binding unique prefix, and extracts the | |||
| raw channel biding data based on the channel binding type used. It | raw channel biding data based on the channel binding type used. It | |||
| then computes it's own copy of the channel binding payload and | then computes it's own copy of the channel binding payload and | |||
| compares that to the payload sent by the client in the query | compares that to the payload sent by the client in the query | |||
| parameters of the tunneled HTTP request. Those two must be equal for | parameters of the tunneled HTTP request. Those two must be equal for | |||
| channel binding to succeed. | channel binding to succeed. | |||
| The server responds to a successful OAuth authentication by | The server responds to a successfully verified client message by | |||
| completing the SASL negotiation. The authentication scheme MUST | completing the SASL negotiation. The authentication scheme MUST | |||
| carry the user ID to be used as the authorization identity (identity | carry the user ID to be used as the authorization identity (identity | |||
| to act as). The server MUST use that ID as the user being | to act as). The server MUST use that ID as the user being | |||
| authorized, that is the user assertion we accept and not other | authorized, that is the user assertion we accept and not other | |||
| information such as from the URL or "User:" header. | information such as from the URL or "User:" header. | |||
| The server responds to failed authentication by sending discovery | The server responds to failed authentication by sending discovery | |||
| information in an HTTP style response with the HTTP status code set | information in an HTTP style response with the HTTP status code set | |||
| to 401, and then failing the authentication. | to 401, and then failing the authentication. | |||
| If channel binding is in use and the channel binding fails the server | If channel binding is in use and the channel binding fails the server | |||
| responds with a minimal HTTP response without discovery information | responds with a minimal HTTP response without discovery information | |||
| and the HTTP status code set to 412 to indicate that the channel | and the HTTP status code set to 412 to indicate that the channel | |||
| binding precondition failed. If the authentication scheme in use | binding precondition failed. If the authentication scheme in use | |||
| does not include signing the server SHOULD revoke the presented | does not include signing the server SHOULD revoke the presented | |||
| credential and the client SHOULD discard that credential. | credential and the client SHOULD discard that credential. | |||
| 3.3.1. Mapping to SASL Identities | 3.4. Mapping to SASL Identities | |||
| Some OAuth mechanisms can provide both an authorization identity and | Some OAuth mechanisms can provide both an authorization identity and | |||
| an authentication identity. An example of this is OAuth 1.0a | an authentication identity. An example of this is OAuth 1.0a | |||
| [RFC5849] where the consumer key (oauth_consumer_key) identifies the | [RFC5849] where the consumer key (oauth_consumer_key) identifies the | |||
| entity using to token which equates to the SASL authentication | entity using to token which equates to the SASL authentication | |||
| identity, and is authenticated using the shared secret. The | identity, and is authenticated using the shared secret. The | |||
| authorization identity in the OAuth 1.0a case is carried in the token | authorization identity in the OAuth 1.0a case is carried in the token | |||
| (per the requirement above), which SHOULD validated independently. | (per the requirement above), which SHOULD validated independently. | |||
| The server MAY use a consumer key or other comparable identity in the | The server MAY use a consumer key or other comparable identity in the | |||
| OAuth authorization scheme as the SASL authentication identity. If | OAuth authorization scheme as the SASL authentication identity. If | |||
| an appropriate authentication identity is not available the server | an appropriate authentication identity is not available the server | |||
| MUST use the identity asserted in the token. | MUST use the identity asserted in the token. | |||
| 3.4. Discovery Information | 3.5. Discovery Information | |||
| The server MUST send discovery information in response to a failed | The server MUST send discovery information in response to a failed | |||
| authentication exchange or a request with an empty Authorization | authentication exchange or a request with an empty Authorization | |||
| header. If discovery information is returned it MUST include an | header. If discovery information is returned it MUST include an | |||
| authentication endpoint appropriate for the user. If the "User" | authentication endpoint appropriate for the user. If the "User" | |||
| header is present the discovery information MUST be for that user. | header is present the discovery information MUST be for that user. | |||
| Discovery information is provided by the server to the client to | Discovery information is provided by the server to the client to | |||
| allow a client to discover the appropriate OAuth authentication and | allow a client to discover the appropriate OAuth authentication and | |||
| token endpoints. The client then uses that information to obtain the | token endpoints. The client then uses that information to obtain the | |||
| access token needed for OAuth authentication. The client SHOULD | access token needed for OAuth authentication. The client SHOULD | |||
| skipping to change at page 10, line 45 ¶ | skipping to change at page 11, line 28 ¶ | |||
| [I-D.ietf-oauth-v2] authentication endpoint. This link has an | [I-D.ietf-oauth-v2] authentication endpoint. This link has an | |||
| OPTIONAL link-extension "scheme", if included this link applies | OPTIONAL link-extension "scheme", if included this link applies | |||
| ONLY to the specified scheme. | ONLY to the specified scheme. | |||
| oauth2-token An [RFC5988] Link header specifying the | oauth2-token An [RFC5988] Link header specifying the | |||
| [I-D.ietf-oauth-v2] token endpoint. This link has an OPTIONAL | [I-D.ietf-oauth-v2] token endpoint. This link has an OPTIONAL | |||
| link-extension "scheme", if included this link applies ONLY to the | link-extension "scheme", if included this link applies ONLY to the | |||
| specified scheme. | specified scheme. | |||
| oauth-initiate (Optional) An [RFC5988] Link header specifying the | oauth-initiate (Optional) An [RFC5988] Link header specifying the | |||
| Oauth 1.0a [RFC5849] initiation endpoint. The server MUST send | OAuth1.0a [RFC5849] initiation endpoint. The server MUST send | |||
| this if "OAuth" is included in the supported list of HTTP | this if "OAuth" is included in the supported list of HTTP | |||
| authentication schemes for the server. | authentication schemes for the server. | |||
| oauth-authorize (Optional) An [RFC5988] Link header specifying the | oauth-authorize (Optional) An [RFC5988] Link header specifying the | |||
| Oauth 1.0a [RFC5849] authentication endpoint. The server MUST | OAuth1.0a [RFC5849] authentication endpoint. The server MUST send | |||
| send this if "OAuth" is included in the supported list of HTTP | this if "OAuth" is included in the supported list of HTTP | |||
| authentication schemes for the server. | authentication schemes for the server. | |||
| oauth-token (Optional) An [RFC5988] Link header specifying the Oauth | oauth-token (Optional) An [RFC5988] Link header specifying the | |||
| 1.0a [RFC5849] token endpoint. The server MUST send this if | OAuth1.0a [RFC5849] token endpoint. The server MUST send this if | |||
| "OAuth" is included in the supported list of HTTP authentication | "OAuth" is included in the supported list of HTTP authentication | |||
| schemes for the server. This link type has one link-extension | schemes for the server. This link type has one link-extension | |||
| "grant-types" which is a space separated list of the the OAuth 2.0 | "grant-types" which is a space separated list of the OAuth 2.0 | |||
| grant types that can be used at the token endpoint to obtain a | grant types that can be used at the token endpoint to obtain a | |||
| token. | token. | |||
| Usage of the URLs provided in the discovery information is defined in | Usage of the URLs provided in the discovery information is defined in | |||
| the relevant specifications. If the server supports multiple | the relevant specifications. If the server supports multiple | |||
| authenticators the discovery information returned for unknown users | authenticators the discovery information returned for unknown users | |||
| MUST be consistent with the discovery information for known users to | MUST be consistent with the discovery information for known users to | |||
| prevent user enumeration. The OAuth 2.0 specification | prevent user enumeration. The OAuth 2.0 specification | |||
| [I-D.ietf-oauth-v2] supports multiple types of authentication schemes | [I-D.ietf-oauth-v2] supports multiple types of authentication schemes | |||
| and the server MUST specify at least one supported authentication | and the server MUST specify at least one supported authentication | |||
| skipping to change at page 11, line 31 ¶ | skipping to change at page 12, line 14 ¶ | |||
| schemes and MAY support schemes not listed in the discovery | schemes and MAY support schemes not listed in the discovery | |||
| information. | information. | |||
| If the resource server provides a scope the client SHOULD always | If the resource server provides a scope the client SHOULD always | |||
| request scoped tokens from the token endpoint. The client MAY use a | request scoped tokens from the token endpoint. The client MAY use a | |||
| scope other than the one provided by the resource server. Scopes | scope other than the one provided by the resource server. Scopes | |||
| other than those advertised by the resource server must be defined by | other than those advertised by the resource server must be defined by | |||
| the resource owner and provided in service documentation (which is | the resource owner and provided in service documentation (which is | |||
| beyond the scope of this memo). | beyond the scope of this memo). | |||
| 3.5. Use of Signature Type Authorization | 3.6. Use of Signature Type Authorization | |||
| This mechanism supports authorization using signatures, which | This mechanism supports authorization using signatures, which | |||
| requires that both client and server construct the string to be | requires that both client and server construct the string to be | |||
| signed. OAuth 2 is designed for authentication/authorization to | signed. OAuth 2 is designed for authentication/authorization to | |||
| access specific URIs. SASL is designed for user authentication, and | access specific URIs. SASL is designed for user authentication, and | |||
| has no facility for being more specific. In this mechanism we | has no facility for being more specific. In this mechanism we | |||
| require an HTTP style format specifically to support signature type | require an HTTP style format specifically to support signature type | |||
| authentication, but this is extremely limited. The HTTP style | authentication, but this is extremely limited. The HTTP style | |||
| request is limited to a path of "/". This mechanism is in the SASL | request is limited to a path of "/". This mechanism is in the SASL | |||
| model, but is designed so that no changes are needed if there is a | model, but is designed so that no changes are needed if there is a | |||
| revision of SASL which supports more specific resource authorization, | revision of SASL which supports more specific resource authorization, | |||
| e.g. IMAP access to a specific folder or FTP access limited to a | e.g. IMAP access to a specific folder or FTP access limited to a | |||
| specific directory. | specific directory. | |||
| Using the example in the MAC specification | Using the example in the MAC specification | |||
| [I-D.hammer-oauth-v2-mac-token] as a starting point, on an IMAP | [I-D.ietf-oauth-v2-http-mac] as a starting point, on an IMAP server | |||
| server running on port 143 and given the MAC style authorization | running on port 143 and given the MAC style authorization request | |||
| request (with long lines wrapped for readability) below: | (with long lines wrapped for readability) below: | |||
| GET / HTTP/1.1 | GET / HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| User: user@example.com | User: user@example.com | |||
| Authorization: MAC token="h480djs93hd8",timestamp="137131200", | Authorization: MAC token="h480djs93hd8",timestamp="137131200", | |||
| nonce="dj83hs9s",signature="YTVjyNSujYs1WsDurFnvFi4JK6o=" | nonce="dj83hs9s",signature="YTVjyNSujYs1WsDurFnvFi4JK6o=" | |||
| The normalized request string would be constructed per the MAC | The normalized request string would be constructed per the MAC | |||
| specifcation [I-D.hammer-oauth-v2-mac-token]. In this example the | specification [I-D.ietf-oauth-v2-http-mac]. In this example the | |||
| normalized request string with the new line separator character is | normalized request string with the new line separator character is | |||
| represented by "\n" for display purposes only would be: | represented by "\n" for display purposes only would be: | |||
| h480djs93hi8\n | h480djs93hi8\n | |||
| 137131200\n | 137131200\n | |||
| dj83hs9s\n | dj83hs9s\n | |||
| \n | \n | |||
| GET\n | GET\n | |||
| server.example.com\n | server.example.com\n | |||
| 143\n | 143\n | |||
| /\n | /\n | |||
| \n | \n | |||
| 4. Implementation Requirements | 4. GSS-API OAuth Mechanism Specification | |||
| Tokens typically have a restricted lifetime. In addition a | Note: The normative references in this section are informational for | |||
| previously obtained token MAY be revoked or rendered invalid at any | SASL implementers, but they are normative for GSS-API implementers. | |||
| time. The client MAY request a new access token for each connection | ||||
| to a resource server, but it SHOULD cache and re-use access | The SASL OAuth mechanism is also a GSS-API mechanism and the messages | |||
| credentials that appear to be valid. Credential lifetime and how | described in Section 3 are the same, but | |||
| that is communicated to the client is defined in the authentication | ||||
| scheme specifications. Clients MAY implement any of the OAuth 2 | 1. the GS2 header on the client's first message is excluded when | |||
| profiles since they are largely outside the scope of this | OAUTH is used as a GSS-API mechanism, and | |||
| specification, and the mentioned profiles in this document are just | ||||
| examples. | 2. initial context token header is prefixed to the client's first | |||
| authentication message (context token), as described in Section | ||||
| 3.1 of RFC 2743, | ||||
| The GSS-API mechanism OID for OAuth is [[TBD: IANA]]. | ||||
| OAuth security contexts always have the mutual_state flag | ||||
| (GSS_C_MUTUAL_FLAG) set to TRUE. OAuth supports credential | ||||
| delegation, therefore security contexts may have the deleg_state flag | ||||
| (GSS_C_DELEG_FLAG) set to either TRUE or FALSE. | ||||
| The mutual authentication property of this mechanism relies on | ||||
| successfully comparing the TLS server identity with the negotiated | ||||
| target name. Since the TLS channel is managed by the application | ||||
| outside of the GSS-API mechanism, the mechanism itself is unable to | ||||
| confirm the name while the application is able to perform this | ||||
| comparison for the mechanism. For this reason, applications MUST | ||||
| match the TLS server identity with the target name, as discussed in | ||||
| [RFC6125]. | ||||
| The OAuth mechanism does not support per-message tokens or | ||||
| GSS_Pseudo_random. | ||||
| OAuth supports a standard generic name syntax for acceptors, such as | ||||
| GSS_C_NT_HOSTBASED_SERVICE (see [RFC2743], Section 4.1). These | ||||
| service names MUST be associated with the "entityID" claimed by the | ||||
| RP. OAuth supports only a single name type for initiators: | ||||
| GSS_C_NT_USER_NAME. GSS_C_NT_USER_NAME is the default name type. | ||||
| The query, display, and exported name syntaxes for OAuth principal | ||||
| names are all the same. There is no OAuth-specific name syntax; | ||||
| applications SHOULD use generic GSS-API name types, such as | ||||
| GSS_C_NT_USER_NAME and GSS_C_NT_HOSTBASED_SERVICE (see [RFC2743], | ||||
| Section 4). The exported name token does, of course, conform to | ||||
| [RFC2743], Section 3.2, but the "NAME" part of the token should be | ||||
| treated as a potential input string to the OAuth name normalization | ||||
| rules. | ||||
| 5. Examples | 5. Examples | |||
| These example illustrate exchanges between an IMAP client and an IMAP | These example illustrate exchanges between an IMAP client and an IMAP | |||
| server. | server. | |||
| 5.1. Successful Bearer Token Exchange | 5.1. Successful Bearer Token Exchange | |||
| This example shows a successful OAuth 2.0 bearer token exchange with | This example shows a successful OAuth 2.0 bearer token exchange with | |||
| an initial client response. Note that line breaks are inserted for | an initial client response. Note that line breaks are inserted for | |||
| skipping to change at page 14, line 39 ¶ | skipping to change at page 15, line 39 ¶ | |||
| GET / HTTP/1.1 | GET / HTTP/1.1 | |||
| Host: imap.example.com | Host: imap.example.com | |||
| Authorization: BEARER "vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==" | Authorization: BEARER "vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==" | |||
| The line containing just a "+" and a space is an empty response from | The line containing just a "+" and a space is an empty response from | |||
| the server. This response contains discovery information, and in the | the server. This response contains discovery information, and in the | |||
| success case no discovery information is necessary so the response is | success case no discovery information is necessary so the response is | |||
| empty. Like other messages, and in accordance with the IMAP SASL | empty. Like other messages, and in accordance with the IMAP SASL | |||
| binding, the empty response is base64-encoded. | binding, the empty response is base64-encoded. | |||
| 5.2. MAC Authentication with Channel Binding | 5.2. MAC Authentication with Channel Binding | |||
| This example shows a channel binding failure. The example sends the | This example shows a channel binding failure. The example sends the | |||
| same request as above, but in the context of an OAUTH-PLUS exchange | same request as above, but in the context of an OAUTH-PLUS exchange | |||
| the channel binding information is missing. Note that line breaks | the channel binding information is missing. Note that line breaks | |||
| are inserted for readability. | are inserted for readability. | |||
| S: * CAPABILITY IMAP4rev1 AUTH=OAUTH SASL-IR IMAP4rev1 Server Ready | S: * CAPABILITY IMAP4rev1 AUTH=OAUTH SASL-IR IMAP4rev1 Server Ready | |||
| S: t0 OK Completed | S: t0 OK Completed | |||
| C: t1 AUTHENTICATE MAC R0VUIC8/Y2JkYXRhPSJTRzkzSUdKcFp5QnBjeUJoSUZSTVV5Q | C: t1 AUTHENTICATE MAC R0VUIC8/Y2JkYXRhPSJTRzkzSUdKcFp5QnBjeUJoSUZSTVV5Q | |||
| m1hVzVoYkNCdFpYTnpZV2RsUHdvPSIgSFRUUC8xLjENCkhvc3Q6IHNlcnZlci5leGFtcG | m1hVzVoYkNCdFpYTnpZV2RsUHdvPSIgSFRUUC8xLjENCkhvc3Q6IHNlcnZlci5leGFtcG | |||
| skipping to change at page 15, line 24 ¶ | skipping to change at page 16, line 24 ¶ | |||
| As required by IMAP [RFC3501], the payloads are base64-encoded. The | As required by IMAP [RFC3501], the payloads are base64-encoded. The | |||
| decoded initial client response is: | decoded initial client response is: | |||
| GET /?cbdata="SG93IGJpZyBpcyBhIFRMUyBmaW5hbCBtZXNzYWdlPwo=" HTTP/1.1 | GET /?cbdata="SG93IGJpZyBpcyBhIFRMUyBmaW5hbCBtZXNzYWdlPwo=" HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| User: user@example.com | User: user@example.com | |||
| Authorization: MAC token="h480djs93hd8",timestamp="137131200", | Authorization: MAC token="h480djs93hd8",timestamp="137131200", | |||
| nonce="dj83hs9s",signature="WW91IG11c3QgYmUgYm9yZWQuIAo=" | nonce="dj83hs9s",signature="WW91IG11c3QgYmUgYm9yZWQuIAo=" | |||
| The line conaining just a "+" and a space is an empty response from | The line containing just a "+" and a space is an empty response from | |||
| the server. This response contains discovery information, and in the | the server. This response contains discovery information, and in the | |||
| success case no discovery information is necessary so the response is | success case no discovery information is necessary so the response is | |||
| empty. Like other messages, and in accordance with the IMAP SASL | empty. Like other messages, and in accordance with the IMAP SASL | |||
| binding, the empty response is base64-encoded. | binding, the empty response is base64-encoded. | |||
| 5.3. Failed Exchange | 5.3. Failed Exchange | |||
| This example shows a failed exchange because of the empty | This example shows a failed exchange because of the empty | |||
| Authorization header, which is how a client can query for discovery | Authorization header, which is how a client can query for discovery | |||
| information. Note that line breaks are inserted for readability. | information. Note that line breaks are inserted for readability. | |||
| skipping to change at page 17, line 18 ¶ | skipping to change at page 18, line 18 ¶ | |||
| provision for channel binding. The OAuth 2 specification | provision for channel binding. The OAuth 2 specification | |||
| [I-D.ietf-oauth-v2] allows for a variety of usages, and the security | [I-D.ietf-oauth-v2] allows for a variety of usages, and the security | |||
| properties of these profiles vary. The usage of bearer tokens, for | properties of these profiles vary. The usage of bearer tokens, for | |||
| example, provide security features similar to cookies. Applications | example, provide security features similar to cookies. Applications | |||
| using this mechanism SHOULD exercise the same level of care using | using this mechanism SHOULD exercise the same level of care using | |||
| this mechanism as they would in using the SASL PLAIN mechanism. In | this mechanism as they would in using the SASL PLAIN mechanism. In | |||
| particular, TLS 1.2 or an equivalent secure channel MUST be | particular, TLS 1.2 or an equivalent secure channel MUST be | |||
| implemented and its usage is RECOMMENDED. | implemented and its usage is RECOMMENDED. | |||
| Channel binding in this mechanism has different properties based on | Channel binding in this mechanism has different properties based on | |||
| the authentication scheme used. Bearer tokens have the same | the authentication scheme used. Channel binding to TLS with a bearer | |||
| properties as cookies, and the bearer token authentication scheme has | token provides only a binding to the TLS layer. Authentication | |||
| no signature or message integrity. Channel binding to TLS with a | schemes like MAC tokens have a signature over the channel binding | |||
| bearer token provides only a binding to the TLS layer. | information. These provide additional protection against a man in | |||
| Authentication schemes like MAC tokens have a signature over the | the middle attacks, and the MAC authorization header is bound to the | |||
| channel binding information. These provide additional protection | channel and only valid in that context. | |||
| against a man in the middle, and the MAC authorization header is | ||||
| bound to the channel and only valid in that context. | ||||
| It is possible that SASL will be authenticating a connection and the | It is possible that SASL will be authenticating a connection and the | |||
| life of that connection may outlast the life of the token used to | life of that connection may outlast the life of the token used to | |||
| authenticate it. This is a common problem in application protocols | authenticate it. This is a common problem in application protocols | |||
| where connections are long-lived, and not a problem with this | where connections are long-lived, and not a problem with this | |||
| mechanism per se. Servers MAY unilaterally disconnect clients in | mechanism per se. Servers MAY unilaterally disconnect clients in | |||
| accordance with the application protocol. | accordance with the application protocol. | |||
| An OAuth credential is not equivalent to the password or primary | An OAuth credential is not equivalent to the password or primary | |||
| account credential. There are protocols like XMPP that allow actions | account credential. There are protocols like XMPP that allow actions | |||
| skipping to change at page 18, line 5 ¶ | skipping to change at page 18, line 47 ¶ | |||
| It is possible for an application server running on Evil.example.com | It is possible for an application server running on Evil.example.com | |||
| to tell a client to request a token from Good.example.org. A client | to tell a client to request a token from Good.example.org. A client | |||
| following these instructions will pass a token from Good to Evil. | following these instructions will pass a token from Good to Evil. | |||
| This is by design, since it is possible that Good and Evil are merely | This is by design, since it is possible that Good and Evil are merely | |||
| names, not descriptive, and that this is an innocuous activity | names, not descriptive, and that this is an innocuous activity | |||
| between cooperating two servers in different domains. For instance, | between cooperating two servers in different domains. For instance, | |||
| a site might operate their authentication service in-house, but | a site might operate their authentication service in-house, but | |||
| outsource their mail systems to an external entity. | outsource their mail systems to an external entity. | |||
| Tokens have a lifetime associated with them. Reducing both the | ||||
| lifetime of a token provides security benefits in case that tokens | ||||
| leak. In addition a previously obtained token MAY be revoked or | ||||
| rendered invalid at any time. The client MAY request a new access | ||||
| token for each connection to a resource server, but it SHOULD cache | ||||
| and re-use access credentials that appear to be valid. | ||||
| 7. IANA Considerations | 7. IANA Considerations | |||
| 7.1. SASL Registration | 7.1. SASL Registration | |||
| The IANA is requested to register the following SASL profile: | The IANA is requested to register the following SASL profile: | |||
| SASL mechanism profile: OAUTH | SASL mechanism profile: OAUTH | |||
| Security Considerations: See this document | Security Considerations: See this document | |||
| skipping to change at page 18, line 37 ¶ | skipping to change at page 19, line 37 ¶ | |||
| Security Considerations: See this document | Security Considerations: See this document | |||
| Published Specification: See this document | Published Specification: See this document | |||
| For further information: Contact the authors of this document. | For further information: Contact the authors of this document. | |||
| Owner/Change controller: the IETF | Owner/Change controller: the IETF | |||
| Note: None | Note: None | |||
| 7.2. Link Type Registration | 7.2. GSS-API Registration | |||
| IANA is further requested to assign an OID for this GSS mechanism in | ||||
| the SMI numbers registry, with the prefix of | ||||
| iso.org.dod.internet.security.mechanisms (1.3.6.1.5.5) and to | ||||
| reference this specification in the registry. | ||||
| 7.3. Link Type Registration | ||||
| Pursuant to [RFC5988] The following link type registrations [[will | Pursuant to [RFC5988] The following link type registrations [[will | |||
| be]] registered by mail to link-relations@ietf.org. | be]] registered by mail to link-relations@ietf.org. | |||
| 7.2.1. OAuth 2 Authentication Endpoint | 7.3.1. OAuth 2 Authentication Endpoint | |||
| o Relation Name: oauth2-authenticator | o Relation Name: oauth2-authenticator | |||
| o Description: An OAuth 2.0 authentication endpoint. | o Description: An OAuth 2.0 authentication endpoint. | |||
| o Reference: | o Reference: | |||
| o Notes: This link type indicates an OAuth 2.0 authentication | o Notes: This link type indicates an OAuth 2.0 authentication | |||
| endpoint that can be used for user authentication/authorization | endpoint that can be used for user authentication/authorization | |||
| for the endpoint providing the link. | for the endpoint providing the link. | |||
| o Application Data: [optional] | o Application Data: [optional] | |||
| 7.2.2. OAuth 2 Token Endpoint | 7.3.2. OAuth 2 Token Endpoint | |||
| o Relation Name: oauth2-token | o Relation Name: oauth2-token | |||
| o Description: The OAuth token endpoint used to get tokens for | o Description: The OAuth token endpoint used to get tokens for | |||
| access. | access. | |||
| o Reference: | o Reference: | |||
| o Notes: The OAuth 2.0 token endpoint to be used for obtaining | o Notes: The OAuth 2.0 token endpoint to be used for obtaining | |||
| tokens to access the endpoint providing the link. | tokens to access the endpoint providing the link. | |||
| o Application Data: This link type has one link-extension "grant- | o Application Data: This link type has one link-extension "grant- | |||
| types" which is the OAuth 2.0 grant types that can be used at the | types", which is the OAuth 2.0 grant types that can be used at the | |||
| token endpoint to obtain a token. This is not an exclusive list, | token endpoint to obtain a token. This is not an exclusive list, | |||
| it provides a hint to the application of what SHOULD be valid. A | it provides a hint to the application of what SHOULD be valid. A | |||
| token endpoint MAY support additional grant types not advertised | token endpoint MAY support additional grant types not advertised | |||
| by a resource endpoint. | by a resource endpoint. | |||
| 7.2.3. OAuth 1.0a Request Initiation Endpoint | 7.3.3. OAuth 1.0a Request Initiation Endpoint | |||
| o Relation Name: oauth-initiate | o Relation Name: oauth-initiate | |||
| o Description: The OAuth 1.0a request initiation endpoint used to | o Description: The OAuth 1.0a request initiation endpoint used to | |||
| get tokens for access. | get tokens for access. | |||
| o Reference: | o Reference: | |||
| o Notes: The OAuth 1.0a endpoint used to initiate the sequence, this | o Notes: The OAuth 1.0a endpoint used to initiate the sequence, this | |||
| temporary request is what the user approves to grant access to the | temporary request is what the user approves to grant access to the | |||
| resource. | resource. | |||
| o Application Data: | o Application Data: | |||
| 7.2.4. OAuth 1.0a Authorization Endpoint | 7.3.4. OAuth 1.0a Authorization Endpoint | |||
| o Relation Name: oauth-authorize | o Relation Name: oauth-authorize | |||
| o Description: The OAuth 1.0a authorization endpoint used to approve | o Description: The OAuth 1.0a authorization endpoint used to approve | |||
| an access request. | an access request. | |||
| o Reference: | o Reference: | |||
| o Notes: | o Notes: | |||
| o Application Data: | o Application Data: | |||
| 7.2.5. OAuth 1.0a Token Endpoint | 7.3.5. OAuth 1.0a Token Endpoint | |||
| o Relation Name: oauth-token | o Relation Name: oauth-token | |||
| o Description: The OAuth 1.0a token endpoint used to get tokens for | o Description: The OAuth 1.0a token endpoint used to get tokens for | |||
| access. | access. | |||
| o Reference: | o Reference: | |||
| o Notes: | o Notes: | |||
| o Application Data: | o Application Data: | |||
| 8. Appendix A -- Document History | 8. Appendix A -- Document History | |||
| [[ to be removed by RFC editor before publication as an RFC ]] | [[ to be removed by RFC editor before publication as an RFC ]] | |||
| -04 | ||||
| o Editorial clean-up and text in introduction improved. | ||||
| o Added GSS-API support | ||||
| -03 | -03 | |||
| o Fixing channel binding, not tls-unique specific. Also defining | o Fixing channel binding, not tls-unique specific. Also defining | |||
| how the CB data is properly generated. | how the CB data is properly generated. | |||
| o Various small editorial changes and embarassing spelling fixes. | o Various small editorial changes and embarassing spelling fixes. | |||
| -02 | -02 | |||
| o Filling out Channel Binding | o Filling out Channel Binding | |||
| skipping to change at page 22, line 9 ¶ | skipping to change at page 23, line 9 ¶ | |||
| o Added the seeds of channel binding. | o Added the seeds of channel binding. | |||
| -00 | -00 | |||
| o Initial revision | o Initial revision | |||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [I-D.hammer-oauth-v2-mac-token] | ||||
| Hammer-Lahav, E., "HTTP Authentication: MAC | ||||
| Authentication", draft-hammer-oauth-v2-mac-token-02 (work | ||||
| in progress), January 2011. | ||||
| [I-D.ietf-oauth-v2] | [I-D.ietf-oauth-v2] | |||
| Hammer-Lahav, E., Recordon, D., and D. Hardt, "The OAuth | Hammer-Lahav, E., Recordon, D., and D. Hardt, "The OAuth | |||
| 2.0 Authorization Protocol", draft-ietf-oauth-v2-12 (work | 2.0 Authorization Protocol", draft-ietf-oauth-v2-22 (work | |||
| in progress), January 2011. | in progress), September 2011. | |||
| [I-D.ietf-oauth-v2-bearer] | [I-D.ietf-oauth-v2-bearer] | |||
| Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 | Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 | |||
| Protocol: Bearer Tokens", draft-ietf-oauth-v2-bearer-02 | Authorization Protocol: Bearer Tokens", | |||
| (work in progress), January 2011. | draft-ietf-oauth-v2-bearer-13 (work in progress), | |||
| October 2011. | ||||
| [I-D.ietf-oauth-v2-http-mac] | ||||
| Hammer-Lahav, E., Barth, A., and B. Adida, "HTTP | ||||
| Authentication: MAC Access Authentication", | ||||
| draft-ietf-oauth-v2-http-mac-00 (work in progress), | ||||
| May 2011. | ||||
| [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. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
| Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
| RFC 2617, June 1999. | RFC 2617, June 1999. | |||
| [RFC2743] Linn, J., "Generic Security Service Application Program | ||||
| Interface Version 2, Update 1", RFC 2743, January 2000. | ||||
| [RFC3174] Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1 | [RFC3174] Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1 | |||
| (SHA1)", RFC 3174, September 2001. | (SHA1)", RFC 3174, September 2001. | |||
| [RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | [RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | |||
| Security Layer (SASL)", RFC 4422, June 2006. | Security Layer (SASL)", RFC 4422, June 2006. | |||
| [RFC5056] Williams, N., "On the Use of Channel Bindings to Secure | [RFC5056] Williams, N., "On the Use of Channel Bindings to Secure | |||
| Channels", RFC 5056, November 2007. | Channels", RFC 5056, November 2007. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
| [RFC5801] Josefsson, S. and N. Williams, "Using Generic Security | ||||
| Service Application Program Interface (GSS-API) Mechanisms | ||||
| in Simple Authentication and Security Layer (SASL): The | ||||
| GS2 Mechanism Family", RFC 5801, July 2010. | ||||
| [RFC5849] Hammer-Lahav, E., "The OAuth 1.0 Protocol", RFC 5849, | [RFC5849] Hammer-Lahav, E., "The OAuth 1.0 Protocol", RFC 5849, | |||
| April 2010. | April 2010. | |||
| [RFC5929] Altman, J., Williams, N., and L. Zhu, "Channel Bindings | [RFC5929] Altman, J., Williams, N., and L. Zhu, "Channel Bindings | |||
| for TLS", RFC 5929, July 2010. | for TLS", RFC 5929, July 2010. | |||
| [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | |||
| [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | ||||
| Verification of Domain-Based Application Service Identity | ||||
| within Internet Public Key Infrastructure Using X.509 | ||||
| (PKIX) Certificates in the Context of Transport Layer | ||||
| Security (TLS)", RFC 6125, March 2011. | ||||
| 9.2. Informative References | 9.2. Informative References | |||
| [I-D.hammer-hostmeta] | [I-D.hammer-hostmeta] | |||
| Hammer-Lahav, E. and B. Cook, "Web Host Metadata", | Hammer-Lahav, E. and B. Cook, "Web Host Metadata", | |||
| draft-hammer-hostmeta-16 (work in progress), May 2011. | draft-hammer-hostmeta-17 (work in progress), | |||
| September 2011. | ||||
| [I-D.jones-simple-web-discovery] | ||||
| Jones, M. and Y. Goland, "Simple Web Discovery (SWD)", | ||||
| draft-jones-simple-web-discovery-01 (work in progress), | ||||
| July 2011. | ||||
| [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | |||
| 4rev1", RFC 3501, March 2003. | 4rev1", RFC 3501, March 2003. | |||
| Authors' Addresses | Authors' Addresses | |||
| William Mills | William Mills | |||
| Yahoo! Inc. | Yahoo! Inc. | |||
| Phone: | Phone: | |||
| End of changes. 64 change blocks. | ||||
| 178 lines changed or deleted | 316 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/ | ||||