| < draft-ietf-kitten-sasl-oauth-09.txt | draft-ietf-kitten-sasl-oauth-10.txt > | |||
|---|---|---|---|---|
| KITTEN W. Mills | KITTEN W. Mills | |||
| Internet-Draft Yahoo! Inc. | Internet-Draft Yahoo! Inc. | |||
| Intended status: Standards Track T. Showalter | Intended status: Standards Track T. Showalter | |||
| Expires: June 20, 2013 | Expires: August 28, 2013 | |||
| H. Tschofenig | H. Tschofenig | |||
| Nokia Siemens Networks | Nokia Siemens Networks | |||
| December 17, 2012 | February 24, 2013 | |||
| A set of SASL and GSS-API Mechanisms for OAuth | A set of SASL and GSS-API Mechanisms for OAuth | |||
| draft-ietf-kitten-sasl-oauth-09 | draft-ietf-kitten-sasl-oauth-10.txt | |||
| Abstract | Abstract | |||
| OAuth enables a third-party application to obtain limited access to a | OAuth enables a third-party application to obtain limited access to a | |||
| protected resource, either on behalf of a resource owner by | protected resource, either on behalf of a resource owner by | |||
| orchestrating an approval interaction, or by allowing the third-party | orchestrating an approval interaction, or by allowing the third-party | |||
| application to obtain access on its own behalf. | application to obtain access on its own behalf. | |||
| This document defines how an application client uses credentials | This document defines how an application client uses credentials | |||
| obtained via OAuth over the Simple Authentication and Security Layer | obtained via OAuth over the Simple Authentication and Security Layer | |||
| skipping to change at page 2, line 4 ¶ | skipping to change at page 2, line 4 ¶ | |||
| 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 June 20, 2013. | This Internet-Draft will expire on August 28, 2013. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2012 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 | |||
| 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 | |||
| skipping to change at page 3, line 17 ¶ | skipping to change at page 3, line 17 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. OAuth SASL Mechanism Specifications . . . . . . . . . . . . . 8 | 3. OAuth SASL Mechanism Specifications . . . . . . . . . . . . . 8 | |||
| 3.1. Initial Client Response . . . . . . . . . . . . . . . . . 9 | 3.1. Initial Client Response . . . . . . . . . . . . . . . . . 9 | |||
| 3.1.1. Reserved Key/Values . . . . . . . . . . . . . . . . . 10 | 3.1.1. Reserved Key/Values . . . . . . . . . . . . . . . . . 10 | |||
| 3.1.2. Use of the gs2-header . . . . . . . . . . . . . . . . 10 | 3.1.2. Use of the gs2-header . . . . . . . . . . . . . . . . 10 | |||
| 3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 10 | 3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.2.1. OAuth Identifiers in the SASL Context . . . . . . . . 11 | 3.2.1. OAuth Identifiers in the SASL Context . . . . . . . . 11 | |||
| 3.2.2. Server Response to Failed Authentication . . . . . . . 11 | 3.2.2. Server Response to Failed Authentication . . . . . . . 11 | |||
| 3.2.3. Completing an Error Message Sequence . . . . . . . . . 12 | 3.2.3. Completing an Error Message Sequence . . . . . . . . . 12 | |||
| 3.3. OAuth Access Token Types using Digital Signatures and | 3.3. OAuth Access Token Types using Keyed Message Digests . . . 12 | |||
| Keyed Message Digests . . . . . . . . . . . . . . . . . . 12 | ||||
| 3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 13 | 3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 14 | 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 14 | |||
| 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 16 | 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 16 | |||
| 5.2. OAuth 1.0a Authorization with Channel Binding . . . . . . 17 | 5.2. OAuth 1.0a Authorization with Channel Binding . . . . . . 17 | |||
| 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 18 | 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 19 | 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 19 | |||
| 5.5. SMTP Example of a Failed Negotiation . . . . . . . . . . . 19 | 5.5. SMTP Example of a Failed Negotiation . . . . . . . . . . . 19 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 7. Internationalization Considerations . . . . . . . . . . . . . 22 | 7. Internationalization Considerations . . . . . . . . . . . . . 22 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 23 | 8.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 24 | 8.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 24 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . . 25 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 25 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . . 26 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 26 | |||
| Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . . 28 | Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . . 28 | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 29 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 31 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 1. Introduction | 1. Introduction | |||
| OAuth [RFC6749] enables a third-party application to obtain limited | OAuth 1.0a [RFC5849] and OAuth 2.0 [RFC6749] are protocol frameworks | |||
| access to a protected resource, either on behalf of a resource owner | that enable a third-party application to obtain limited access to a | |||
| by orchestrating an approval interaction, or by allowing the third- | protected resource, either on behalf of a resource owner by | |||
| party application to obtain access on its own behalf. The core OAuth | orchestrating an approval interaction, or by allowing the third-party | |||
| 2.0 specification [RFC6749] does not define the interaction between | application to obtain access on its own behalf. | |||
| the client and the resource server with the access to a protected | ||||
| resource using an Access Token. This functionality is described in | ||||
| separate specifications, for example bearer tokens [RFC6750], OAuth | ||||
| 2.0 MAC tokens [I-D.ietf-oauth-v2-http-mac]. OAuth 1.0a [RFC5849], | ||||
| the predecessor of OAuth 2.0, has a similar design. The main use | ||||
| cases for OAuth 2.0 and OAuth 1.0 have so far focused on an HTTP- | ||||
| based environment only. | ||||
| Figure 1 shows the abstract message flow as shown in Figure 1 of | The core OAuth 2.0 specification [RFC6749] does not define the | |||
| OAuth 2.0 [RFC6749]. | interaction between the OAuth client and the resource server for the | |||
| access to a protected resource using an Access Token. Instead, this | ||||
| functionality is described in separate specifications, such as the | ||||
| bearer token specification [RFC6750]. OAuth 1.0a included the | ||||
| communication between the OAuth client and the resource server in | ||||
| [RFC5849]. | ||||
| +--------+ +---------------+ | The main use cases for OAuth 2.0 and OAuth 1.0a have so far focused | |||
| | |--(A)- Authorization Request ->| Resource | | on an HTTP-based environment only. This document integrates OAuth | |||
| | | | Owner | | 1.0a and OAuth 2.0 into non-HTTP-based applications using the | |||
| | |<-(B)-- Authorization Grant ---| | | integration into SASL and the GSS-API. Hence, this document takes | |||
| | | +---------------+ | advantage of the OAuth protocol and its deployment base to provide a | |||
| | | | way to use SASL [RFC4422] and the GSS-API [RFC2743] to gain access to | |||
| | | +---------------+ | resources when using non-HTTP-based protocols, such as the Internet | |||
| | |--(C)-- Authorization Grant -->| Authorization | | Message Access Protocol (IMAP) [RFC3501] and SMTP [RFC5321], which is | |||
| | Client | | Server | | what this memo uses in the examples. | |||
| | |<-(D)----- Access Token -------| | | ||||
| | | +---------------+ | ||||
| | | | ||||
| | | +---------------+ | ||||
| | |--(E)----- Access Token ------>| Resource | | ||||
| | | | Server | | ||||
| | |<-(F)--- Protected Resource ---| | | ||||
| +--------+ +---------------+ | ||||
| Figure 1: Abstract OAuth 2.0 Protocol Flow | To illustrate the impact of integrating this specification into an | |||
| OAuth-enabled application environment Figure 1 shows the abstract | ||||
| message flow of OAuth 2.0 [RFC6749]. As indicated in the figure, | ||||
| this document impacts the exchange of messages (E) and (F) since SASL | ||||
| or the GSS-API is used for interaction between the client and the | ||||
| resource server instead of HTTP. | ||||
| 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- | | |--(A)-- Authorization Request --->| Resource | | | |||
| based protocols, such as the Internet Message Access Protocol (IMAP) | | | | Owner | |Plain | |||
| [RFC3501] and SMTP [RFC5321], which is what this memo uses in the | | |<-(B)------ Access Grant ---------| | |OAuth | |||
| examples. | | | +---------------+ |2.0 | |||
| | | | | ||||
| | | Client Credentials & +---------------+ | | ||||
| | |--(C)------ Access Grant -------->| Authorization | | | ||||
| | Client | | Server | | | ||||
| | |<-(D)------ Access Token ---------| | | | ||||
| | | (w/ Optional Refresh Token) +---------------+ | | ||||
| | | ----+ | ||||
| | | ----+ | ||||
| | | +---------------+ | | ||||
| | | | | |OAuth | ||||
| | |--(E)------ Access Token -------->| Resource | |over | ||||
| | | | Server | |SASL/ | ||||
| | |<-(F)---- Protected Resource -----| | |GSS- | ||||
| | | | | |API | ||||
| +--------+ +---------------+ | | ||||
| ----+ | ||||
| Figure 1: OAuth 2.0 Protocol Flow | ||||
| The Simple Authentication and Security Layer (SASL) is a framework | The Simple Authentication and Security Layer (SASL) is a framework | |||
| for providing authentication and data security services in | for providing authentication and data security services in | |||
| connection-oriented protocols via replaceable mechanisms. It | connection-oriented protocols via replaceable mechanisms. It | |||
| provides a structured interface between protocols and mechanisms. | provides a structured interface between protocols and mechanisms. | |||
| The resulting framework allows new protocols to reuse existing | The resulting framework allows new protocols to reuse existing | |||
| mechanisms and allows old protocols to make use of new mechanisms. | mechanisms and allows old protocols to make use of new mechanisms. | |||
| The framework also provides a protocol for securing subsequent | The framework also provides a protocol for securing subsequent | |||
| protocol exchanges within a data security layer. | protocol exchanges within a data security layer. | |||
| skipping to change at page 6, line 5 ¶ | skipping to change at page 6, line 33 ¶ | |||
| (D) The authorization server authenticates the client and | (D) The authorization server authenticates the client and | |||
| validates the authorization grant, and if valid issues an access | validates the authorization grant, and if valid issues an access | |||
| token. | token. | |||
| (E) The client requests the protected resource from the resource | (E) The client requests the protected resource from the resource | |||
| server and authenticates by presenting the access token. | server and authenticates by presenting the access token. | |||
| (F) The resource server validates the access token, and if valid, | (F) The resource server validates the access token, and if valid, | |||
| indicates a successful authentication. | indicates a successful authentication. | |||
| Steps (E) and (F) are not defined in [RFC6749] and are the main | Again, steps (E) and (F) are not defined in [RFC6749] (but are | |||
| functionality specified within this document. Consequently, the | described in [RFC6750] instead) and are the main functionality | |||
| message exchange shown in Figure 2 is the result of this | specified within this document. Consequently, the message exchange | |||
| specification. The client will generally need to determine the | shown in Figure 1 is the result of this specification. The client | |||
| authentication endpoints (and perhaps the service endpoints) before | will generally need to determine the authentication endpoints (and | |||
| the OAuth 2.0 protocol exchange messages in steps (A)-(D) are | perhaps the service endpoints) before the OAuth 2.0 protocol exchange | |||
| executed. The discovery of the resource owner and authorization | messages in steps (A)-(D) are executed. The discovery of the | |||
| server endpoints is outside the scope of this specification. The | resource owner and authorization server endpoints is outside the | |||
| client must discover those endpoints using a discovery mechanisms | scope of this specification. The client must discover those | |||
| such as Webfinger using host-meta [I-D.ietf-appsawg-webfinger]. In | endpoints using a discovery mechanisms, such as Webfinger using host- | |||
| band discovery is not tenable if clients support the OAuth 2.0 | meta [I-D.ietf-appsawg-webfinger]. In band discovery is not tenable | |||
| password grant. Once credentials are obtained the client proceeds to | if clients support the OAuth 2.0 password grant. Once credentials | |||
| steps (E) and (F) defined in this specification. | are obtained the client proceeds to steps (E) and (F) defined in this | |||
| specification. | ||||
| ----+ | ||||
| +--------+ +---------------+ | | ||||
| | |--(A)-- Authorization Request --->| Resource | | | ||||
| | | | Owner | |Plain | ||||
| | |<-(B)------ Access Grant ---------| | |OAuth | ||||
| | | +---------------+ |2.0 | ||||
| | | | | ||||
| | | Client Credentials & +---------------+ | | ||||
| | |--(C)------ Access Grant -------->| Authorization | | | ||||
| | Client | | Server | | | ||||
| | |<-(D)------ Access Token ---------| | | | ||||
| | | (w/ Optional Refresh Token) +---------------+ | | ||||
| | | ----+ | ||||
| | | ----+ | ||||
| | | +---------------+ | | ||||
| | | | | |OAuth | ||||
| | |--(E)------ Access Token -------->| Resource | |over | ||||
| | | | Server | |SASL/ | ||||
| | |<-(F)---- Protected Resource -----| | |GSS- | ||||
| | | | | |API | ||||
| +--------+ +---------------+ | | ||||
| ----+ | ||||
| Figure 2: OAuth SASL Architecture | OAuth 1.0 follows a similar model but uses a different terminology | |||
| and does not separate the resource server from the authorization | ||||
| server. | ||||
| 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 [RFC6749]. | 2.0 specification [RFC6749]. | |||
| skipping to change at page 8, line 11 ¶ | skipping to change at page 8, line 11 ¶ | |||
| Note that the IMAP SASL specification requires base64 encoding, see | Note that the IMAP SASL specification requires base64 encoding, see | |||
| Section 4 of [RFC4648], not this memo. | Section 4 of [RFC4648], not this memo. | |||
| 3. OAuth SASL Mechanism Specifications | 3. OAuth SASL Mechanism Specifications | |||
| SASL is used as an authentication framework in a variety of | SASL is used as an authentication framework in a variety of | |||
| application layer protocols. This document defines the following | application layer protocols. This document defines the following | |||
| SASL mechanisms for usage with OAuth: | SASL mechanisms for usage with OAuth: | |||
| OAUTHBEARER: Authorization using OAuth 2.0 bearer tokens as | OAUTHBEARER: OAuth 2.0 bearer tokens, as described in [RFC6750]. | |||
| described in [RFC6750]. | RFC 6750 uses Transport Layer Security (TLS) to secure the | |||
| protocol interaction between the client and the resource | ||||
| server. | ||||
| OAUTH10A: Authorization using OAuth 1.0a MAC tokens (using the | OAUTH10A: OAuth 1.0a MAC tokens (using the HMAC-SHA1 keyed | |||
| HMAC-SHA1 keyed message digest) as described in Section 3.4.2 | message digest), as described in Section 3.4.2 of [RFC5849]. | |||
| of [RFC5849]. | ||||
| OAUTH10A-PLUS: Adds channel binding [RFC5056] capability to | OAUTH10A-PLUS: Adds channel binding [RFC5056] capability to | |||
| OAUTH10A for protection against man-in-the-middle attacks. | OAUTH10A for protection against man-in-the-middle attacks. | |||
| OAUTH10A-PLUS mandates the usage of Transport Layer Security | ||||
| (TLS). | ||||
| New extensions may be defined to add additional OAuth Access Token | New extensions may be defined to add additional OAuth Access Token | |||
| Types. Such a new SASL OAuth mechanism can be added by simply | Types. Such a new SASL OAuth mechanism can be added by simply | |||
| registering the new name(s) and citing this specification for the | registering the new name(s) and citing this specification for the | |||
| further definition. New channel binding enabled "-PLUS" mechanisms | further definition. New channel binding enabled "-PLUS" mechanisms | |||
| defined in this way MUST include message integrity protection. A | defined in this way MUST include message integrity protection. A | |||
| newly defined mechanism would also need to register a new GS2 OID. | newly defined mechanism would also need to register a new GS2 OID. | |||
| These mechanisms are client initiated and lock-step, the server | These mechanisms are client initiated and lock-step, the server | |||
| always replying to a client message. In the case where the client | always replying to a client message. In the case where the client | |||
| skipping to change at page 9, line 41 ¶ | skipping to change at page 9, line 43 ¶ | |||
| port: Contains the port number represented as a decimal positive | port: Contains the port number represented as a decimal positive | |||
| integer string without leading zeros to which the client | integer string without leading zeros to which the client | |||
| connected. | connected. | |||
| qs: The HTTP query string. In non-channel binding mechanisms | qs: The HTTP query string. In non-channel binding mechanisms | |||
| this is reserved, the client SHOUD NOT send it, and has the | this is reserved, the client SHOUD NOT send it, and has the | |||
| default value of "". In "-PLUS" variants this carries a single | default value of "". In "-PLUS" variants this carries a single | |||
| key value pair "cbdata" for the channel binding data payload | key value pair "cbdata" for the channel binding data payload | |||
| formatted as an HTTP query string. | formatted as an HTTP query string. | |||
| For OAuth Access Token Types that use digital signatures or keyed | For OAuth token types that use keyed message digests the client MUST | |||
| message digests the client MUST send host and port number key/values, | send host and port number key/values, and the server MUST fail an | |||
| and the server MUST fail an authorization request requiring | authorization request requiring keyed message digests that do not | |||
| signatures or keyed message digests that do not have host and port | have host and port values. In OAuth 1.0a for example, the so-called | |||
| values. For authorization schemes that require a URI scheme as part | "signature base string calculation" includes the reconstructed HTTP | |||
| of the data being signed "http" is always used. In OAuth 1.0a for | URL. | |||
| example, the so-called signature base string calculation includes the | ||||
| reconstructed HTTP URL. | ||||
| 3.1.1. Reserved Key/Values | 3.1.1. Reserved Key/Values | |||
| In these mechanisms values for path, query string and post body are | In these mechanisms values for path, query string and post body are | |||
| assigned default values. OAuth authorization schemes MAY define | assigned default values. OAuth authorization schemes MAY define | |||
| usage of these in the SASL context and extend this specification. | usage of these in the SASL context and extend this specification. | |||
| For OAuth Access Token Types that use request signatures the default | For OAuth Access Token Types that use request keyed message digest | |||
| values MUST be used unless explicit values are provided in the client | the default values MUST be used unless explicit values are provided | |||
| response. The following key values are reserved for future use: | in the client response. The following key values are reserved for | |||
| future use: | ||||
| mthd (RESERVED): HTTP method for use in signatures, the default | mthd (RESERVED): HTTP method, the default value is "POST". | |||
| value is "POST". | ||||
| path (RESERVED): HTTP path data, the default value is "/". | path (RESERVED): HTTP path data, the default value is "/". | |||
| post (RESERVED): HTTP post data, the default value is "". | post (RESERVED): HTTP post data, the default value is "". | |||
| 3.1.2. Use of the gs2-header | 3.1.2. Use of the gs2-header | |||
| The OAuth scheme related mechanisms are also GSS-API mechanisms, see | The OAuth scheme related mechanisms are also GSS-API mechanisms, see | |||
| Section 4 for further detail. The gs2-header is used as follows: | Section 4 for further detail. The gs2-header is used as follows: | |||
| skipping to change at page 10, line 43 ¶ | skipping to change at page 10, line 43 ¶ | |||
| In the non "-PLUS" mechanisms the "gs2-cb-flag" MUST be set to "n" | In the non "-PLUS" mechanisms the "gs2-cb-flag" MUST be set to "n" | |||
| because channel-binding [RFC5056] data is not expected. In the | because channel-binding [RFC5056] data is not expected. In the | |||
| OAUTH10A-PLUS mechanism (or other -PLUS variants based on this | OAUTH10A-PLUS mechanism (or other -PLUS variants based on this | |||
| specification) the "gs2-cb-flag" MUST be set appropriately by the | specification) the "gs2-cb-flag" MUST be set appropriately by the | |||
| client. | client. | |||
| 3.2. Server's Response | 3.2. Server's Response | |||
| The server validates the response per the specification for the OAuth | The server validates the response per the specification for the OAuth | |||
| Access Token Types used. If the OAuth Access Token Type utilizes a | Access Token Types used. If the OAuth Access Token Type utilizes a | |||
| digital signature or a keyed message digest of the request parameters | keyed message digest of the request parameters then the client must | |||
| then the client must provide a client response that satisfies the | provide a client response that satisfies the data requirements for | |||
| data requirements for the scheme in use. | the scheme in use. | |||
| In a "-PLUS" mechanism the server examines the channel binding data, | In a "-PLUS" mechanism the server examines the channel binding data, | |||
| extracts the channel binding unique prefix, and extracts the raw | extracts the channel binding unique prefix, and extracts the raw | |||
| channel biding data based on the channel binding type used. It then | channel biding data based on the channel binding type used. It then | |||
| computes it's own copy of the channel binding payload and compares | computes it's own copy of the channel binding payload and compares | |||
| that to the payload sent by the client in the cbdata key/value. | that to the payload sent by the client in the cbdata key/value. | |||
| Those two must be equal for channel binding to succeed. | Those two must be equal for channel binding to succeed. | |||
| The server responds to a successfully verified client message by | The server responds to a successfully verified client message by | |||
| completing the SASL negotiation. The authenticated identity reported | completing the SASL negotiation. The authenticated identity reported | |||
| by the SASL mechanism is the identity securely established for the | by the SASL mechanism is the identity securely established for the | |||
| client with the OAuth credential. The application, not the SASL | client with the OAuth credential. The application, not the SASL | |||
| mechanism, based on local access policy determines whether the | mechanism, based on local access policy determines whether the | |||
| identity reported by the mechanism is allowed access to the requested | identity reported by the mechanism is allowed access to the requested | |||
| resource. Note that the semantics of the authz-id is specified by | resource. Note that the semantics of the authz-id is specified by | |||
| the SASL framework [RFC4422]. | the SASL framework [RFC4422]. | |||
| 3.2.1. OAuth Identifiers in the SASL Context | 3.2.1. OAuth Identifiers in the SASL Context | |||
| OAuth access tokens may carry the authenticated identifier of the | In the OAuth framework the client may be authenticated by the | |||
| resource owner and client authentication provides the authenticated | authorization server and the resource owner is authenticated to the | |||
| identity of the client issuing the request to the resource server. | authorization server. OAuth access tokens may contain information | |||
| about the authentication of the resource owner and about the client | ||||
| and may therefore make this information accessible to the resource | ||||
| server. | ||||
| If both identities are needed by an application the developer will | If both identifiers are needed by an application the developer will | |||
| need to provide a way to communicate that from the SASL mechanism | need to provide a way to communicate that from the SASL mechanism | |||
| back to the application such as a GSS-API [RFC2743] named type like | back to the application, such as a GSS-API [RFC2743] named type like | |||
| GSS_C_NT_USER_NAME or a comparable newly defined GSS-API name type or | GSS_C_NT_USER_NAME or a comparable newly defined GSS-API name type or | |||
| name attribute [RFC6680]. | name attribute [RFC6680]. | |||
| 3.2.2. Server Response to Failed Authentication | 3.2.2. Server Response to Failed Authentication | |||
| For a failed authentication the server returns a JSON [RFC4627] | For a failed authentication the server returns a JSON [RFC4627] | |||
| formatted error result, and fails the authentication. The error | formatted error result, and fails the authentication. The error | |||
| result consists of the following values: | result consists of the following values: | |||
| status (REQUIRED): The authorization error code. Valid error | status (REQUIRED): The authorization error code. Valid error | |||
| skipping to change at page 12, line 17 ¶ | skipping to change at page 12, line 20 ¶ | |||
| 3.2.3. Completing an Error Message Sequence | 3.2.3. Completing an Error Message Sequence | |||
| Section 3.6 of [RFC4422] explicitly prohibits additional information | Section 3.6 of [RFC4422] explicitly prohibits additional information | |||
| in an unsuccessful authentication outcome. Therefore, the error | in an unsuccessful authentication outcome. Therefore, the error | |||
| message is sent in a normal message. The client MUST then send an | message is sent in a normal message. The client MUST then send an | |||
| additional client response consisting of a single %x01 (control A) | additional client response consisting of a single %x01 (control A) | |||
| character to the server in order to allow the server to finish the | character to the server in order to allow the server to finish the | |||
| exchange. | exchange. | |||
| 3.3. OAuth Access Token Types using Digital Signatures and Keyed | 3.3. OAuth Access Token Types using Keyed Message Digests | |||
| Message Digests | ||||
| OAuth Access Token Types may use digital signatures or keyed message | OAuth Access Token Types may use keyed message digests and the client | |||
| digests. The client and the resource server need to perform a | and the resource server may need to perform a cryptographic | |||
| cryptographic computation for integrity protection and data origin | computation for integrity protection and data origin authentication. | |||
| authentication. | ||||
| OAuth is designed for access to resources identified by URIs. SASL | OAuth is designed for access to resources identified by URIs. SASL | |||
| is designed for user authentication, and has no facility for more | is designed for user authentication, and has no facility for more | |||
| fine-grained access control. In this specification we require or | fine-grained access control. In this specification we require or | |||
| define default values for the data elements from an HTTP request | define default values for the data elements from an HTTP request | |||
| which allow the signature base string to be constructed properly. | which allow the signature base string to be constructed properly. | |||
| The default HTTP path is "/" and the default post body is empty. | The default HTTP path is "/" and the default post body is empty. | |||
| These atoms are defined as extension points so that no changes are | These atoms are defined as extension points so that no changes are | |||
| needed if there is a revision of SASL which supports more specific | needed if there is a revision of SASL which supports more specific | |||
| resource authorization, e.g., IMAP access to a specific folder or FTP | resource authorization, e.g., IMAP access to a specific folder or FTP | |||
| skipping to change at page 13, line 33 ¶ | skipping to change at page 13, line 33 ¶ | |||
| A1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk9d7dh3k39sjv7 | A1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk9d7dh3k39sjv7 | |||
| 3.4. Channel Binding | 3.4. Channel Binding | |||
| The channel binding data is carried in the "qs" (query string) key | The channel binding data is carried in the "qs" (query string) key | |||
| value pair formatted as a standard HTTP query parameter with the name | value pair formatted as a standard HTTP query parameter with the name | |||
| "cbdata". Channel binding requires that the channel binding data be | "cbdata". Channel binding requires that the channel binding data be | |||
| integrity protected end-to-end in order to protect against man-in- | integrity protected end-to-end in order to protect against man-in- | |||
| the-middle attacks. All SASL OAuth mechanisms with a "-PLUS" postfix | the-middle attacks. All SASL OAuth mechanisms with a "-PLUS" postfix | |||
| MUST provide integrity protection. It should be noted that while the | MUST provide integrity protection. It should be noted that while the | |||
| Bearer Access Token Type mandates TLS it does not create keying | OAuth 2.0 Bearer Token mandates TLS it does not create keying | |||
| material at the application layer and is not suitable for use with | material at the application layer and is not suitable for use with | |||
| channel bindings. | channel bindings. | |||
| 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), followed by a base64 | unique prefix, followed by a colon (ASCII 0x3A), followed by a base64 | |||
| encoded channel binding payload. The channel binding payload is the | encoded channel binding payload. The channel binding payload is the | |||
| raw data from the channel binding type. For example, if the client | raw data from the channel binding type. For example, if the client | |||
| is using tls-unique for channel binding then the raw channel binding | is using tls-unique for channel binding then the raw channel binding | |||
| skipping to change at page 14, line 19 ¶ | skipping to change at page 14, line 19 ¶ | |||
| A SASL OAuth mechanism is also a GSS-API mechanism and the messages | A SASL OAuth mechanism is also a GSS-API mechanism and the messages | |||
| described in Section 3 are the same with the following changes to the | described in Section 3 are the same with the following changes to the | |||
| GS2 related elements: | GS2 related elements: | |||
| 1. the GS2 header on the client's first message is excluded when | 1. the GS2 header on the client's first message is excluded when | |||
| used as a GSS-API mechanism. | used as a GSS-API mechanism. | |||
| 2. the initial context token header is prefixed to the client's | 2. the initial context token header is prefixed to the client's | |||
| first authentication message (context token), as described in | first authentication message (context token), as described in | |||
| Section 3.1 of RFC 2743, | Section 3.1 of RFC 2743 [RFC2743], | |||
| The GSS-API mechanism OIDs are: | The GSS-API mechanism OIDs are: | |||
| o OAUTHBEARER: [[TBD: IANA -- probably in the 1.3.6.1.5.5 tree]] | o OAUTHBEARER: [[TBD: IANA -- probably in the 1.3.6.1.5.5 tree]] | |||
| o OAUTH10A: [[TBD: IANA -- probably in the 1.3.6.1.5.5 tree]] | o OAUTH10A: [[TBD: IANA -- probably in the 1.3.6.1.5.5 tree]] | |||
| OAuth mechanims security contexts always have the mutual_state flag | o OAUTH10A-PLUS: [[TBD: IANA -- probably in the 1.3.6.1.5.5 tree]] | |||
| (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 | The setting of the security context flags depends on the selected | |||
| successfully comparing the TLS server identity with the negotiated | mechanism: | |||
| target name. Since the TLS channel is managed by the application | ||||
| outside of the GSS-API mechanism, the mechanism itself is unable to | o OAUTHBEARER: The mutual_state flag (GSS_C_MUTUAL_FLAG) MUST be set | |||
| confirm the name while the application is able to perform this | to FALSE since the TLS protocol execution happens outside the | |||
| comparison for the mechanism. For this reason, applications MUST | SASL/GSS-API method. Server-side authentication is accomplished | |||
| match the TLS server identity with the target name using the | via the mandatory use of TLS at the application layer utilizing | |||
| appropriate application profile, as discussed in [RFC6125]. For | SASL. Without TLS usage at the application layer protecting the | |||
| example, when SASL OAuth is run over IMAP then the IMAP profile of | by OAuth Bearer Token this SASL method is insecure. | |||
| RFC 6125 is used. | ||||
| o OAUTH10A: The mutual_state flag (GSS_C_MUTUAL_FLAG) MUST be set to | ||||
| FALSE since server authentication is not provided by this SASL/ | ||||
| GSS-API method. Since the TLS channel is managed by the | ||||
| application outside of the GSS-API mechanism, the OAUTH10A | ||||
| 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 using the appropriate application profile, as | ||||
| discussed in [RFC6125]. For example, when SASL OAuth is run over | ||||
| IMAP then the IMAP profile of RFC 6125 is used. | ||||
| o OAUTH10A-PLUS: The mutual_state flag (GSS_C_MUTUAL_FLAG) MUST be | ||||
| set to FALSE since only the client demonstrates possession of the | ||||
| session key by applying a keyed message digest function over | ||||
| various fields of the request. TLS-based server-side | ||||
| authentication MUST be provided by the application using SASL. | ||||
| Credential delegation is not supported by any of the SASL/GSS-API | ||||
| mechanisms with this specification. Therefore, security contexts | ||||
| MUST have the deleg_state flag (GSS_C_DELEG_FLAG) set to FALSE. | ||||
| OAuth mechanisms do not support per-message tokens or | OAuth mechanisms do not support per-message tokens or | |||
| GSS_Pseudo_random. | GSS_Pseudo_random. | |||
| OAuth supports a standard generic name syntax for acceptors, such as | OAuth supports a standard generic name syntax for acceptors, such as | |||
| GSS_C_NT_HOSTBASED_SERVICE (see [RFC2743], Section 4.1). These | GSS_C_NT_HOSTBASED_SERVICE (see Section 4.1 of [RFC2743]). These | |||
| service names MUST be associated with the "entityID" claimed by the | service names MUST be associated with the "entityID" claimed by the | |||
| RP. OAuth mechanisms support only a single name type for initiators: | RP. | |||
| OAuth mechanisms support only a single name type for initiators: | ||||
| GSS_C_NT_USER_NAME. GSS_C_NT_USER_NAME is the default name type. | 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 | The query, display, and exported name syntaxes for OAuth principal | |||
| names are all the same. There is no OAuth-specific name syntax; | names are all the same. There is no OAuth-specific name syntax; | |||
| applications SHOULD use generic GSS-API name types, such as | applications SHOULD use generic GSS-API name types, such as | |||
| GSS_C_NT_USER_NAME and GSS_C_NT_HOSTBASED_SERVICE (see [RFC2743], | GSS_C_NT_USER_NAME and GSS_C_NT_HOSTBASED_SERVICE (see Section 4 of | |||
| Section 4). The exported name token does, of course, conform to | [RFC2743]). The exported name token does, of course, conform to | |||
| [RFC2743], Section 3.2, but the "NAME" part of the token should be | Section 3.2 of [RFC2743], but the "NAME" part of the token should be | |||
| treated as a potential input string to the OAuth name normalization | treated as a potential input string to the OAuth name normalization | |||
| rules. | rules. | |||
| 5. Examples | 5. Examples | |||
| These examples illustrate exchanges between an IMAP and SMTP clients | These examples illustrate exchanges between an IMAP and SMTP clients | |||
| and servers. | and servers. | |||
| Note to implementers: The SASL OAuth method names are case | Note to implementers: The SASL OAuth method names are case | |||
| insensitive. One example uses "Bearer" but that could as easily be | insensitive. One example uses "Bearer" but that could as easily be | |||
| "bearer", "BEARER", or "BeArEr". | "bearer", "BEARER", or "BeArEr". | |||
| 5.1. Successful Bearer Token Exchange | 5.1. Successful Bearer Token Exchange | |||
| This example shows a successful OAuth 2.0 bearer token exchange. | This example shows a successful OAuth 2.0 bearer token exchange. | |||
| Note that line breaks are inserted for readability. | Note that line breaks are inserted for readability and the underlying | |||
| TLS establishment is not shown either. | ||||
| S: * OK IMAP4rev1 Server Ready | S: * OK IMAP4rev1 Server Ready | |||
| C: t0 CAPABILITY | C: t0 CAPABILITY | |||
| S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR | S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR | |||
| S: t0 OK Completed | S: t0 OK Completed | |||
| C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZX | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZX | |||
| J2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMBYXV0aD1CZWFyZXIgdkY5ZGZ0NHFtV | J2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMBYXV0aD1CZWFyZXIgdkY5ZGZ0NHFtV | |||
| GMyTnZiM1JsY2tCaGJIUmhkbWx6ZEdFdVkyOXRDZz09AQE= | GMyTnZiM1JsY2tCaGJIUmhkbWx6ZEdFdVkyOXRDZz09AQE= | |||
| S: t1 OK SASL authentication succeeded | S: t1 OK SASL authentication succeeded | |||
| skipping to change at page 21, line 8 ¶ | skipping to change at page 21, line 8 ¶ | |||
| S: 535 5.7.1 http://support.example.com/mail/oauth | S: 535 5.7.1 http://support.example.com/mail/oauth | |||
| [connection continues...] | [connection continues...] | |||
| The server returned an error message in the 334 SASL message, the | The server returned an error message in the 334 SASL message, the | |||
| client responds with the required dummy response, and the server | client responds with the required dummy response, and the server | |||
| finalizes the negotiation. | finalizes the negotiation. | |||
| 6. Security Considerations | 6. Security Considerations | |||
| OAuth 1.0a and OAuth 2 allows for a variety of deployment scenarios, | OAuth 1.0a and OAuth 2 allows for a variety of deployment scenarios, | |||
| and the security properties of these profiles vary. Application | and the security properties of these profiles vary. As shown in | |||
| developers therefore need to understand the needs of their | Figure 1 this specification is aimed to be integrated into a larger | |||
| applications before selecting a specific SASL OAuth mechanism. | OAuth deployment. Application developers therefore need to | |||
| understand the needs of their security requirements based on a threat | ||||
| assessment before selecting a specific SASL OAuth mechanism. For | ||||
| OAuth 2.0 a detailed security document [RFC6819] provides guidance to | ||||
| select those OAuth 2.0 components that help to mitigate threats for a | ||||
| given deployment. For OAuth 1.0a Section 4 of RFC 5849 [RFC5849] | ||||
| provides guidance specific to OAuth 1.0. | ||||
| The channel binding in this mechanism has different properties based | This document specifies three SASL and GSS-API Mechanisms for OAuth | |||
| on the Access Token Type used. | and each comes with different security properties. | |||
| It is possible that SASL will be authenticating a connection and the | OAUTHBEARER: This mechanism borrows from OAuth 2.0 bearer tokens | |||
| life of that connection may outlast the life of the access token used | [RFC6750]. It relies on the application using TLS to protect the | |||
| to establish it. This is a common problem in application protocols | OAuth 2.0 Bearer Token exchange; without TLS usage at the | |||
| where connections are long-lived, and not a problem with this | application layer this method is completely insecure. | |||
| mechanism per se. Servers MAY unilaterally disconnect clients in | ||||
| accordance with the application protocol. | ||||
| The OAuth access token (and related keying material) is not | OAUTH10A: This mechanism re-uses OAuth 1.0a MAC tokens (using the | |||
| equivalent to the user's long term password. As such, care has to be | HMAC-SHA1 keyed message digest), as described in Section 3.4.2 of | |||
| taken when these OAuth credentials are used for actions like changing | [RFC5849]. To compute the keyed message digest in the same way | |||
| passwords (as it is possible with some protocols, e.g., XMPP). The | was in RFC 5839 this specification conveys additional parameters | |||
| server SHOULD ensure that actions taken in the authenticated channel | between the client and the server. This SASL/GSS-API mechanism | |||
| are appropriate to the strength of the presented credential. | only supports client authentication. If server-side | |||
| authentication is desireable then it must be provided by the | ||||
| application underneath the SASL/GSS-API layer. | ||||
| Access tokens have a lifetime. Reducing the lifetime of an access | OAUTH10A-PLUS: This mechanism adds the channel binding [RFC5056] | |||
| token provides security benefits, as described in | capability to OAUTH10A for protection against man-in-the-middle | |||
| [I-D.ietf-oauth-v2-threatmodel], and OAuth 2.0 introduces refresh | attacks. OAUTH10A-PLUS mandates the usage of Transport Layer | |||
| tokens to obtain new access token on the fly. Additionally, a | Security (TLS) at the application layer. | |||
| previously obtained access 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. Internationalization Considerations | 7. Internationalization Considerations | |||
| The identifer asserted by the OAuth authorization server about the | The identifer asserted by the OAuth authorization server about the | |||
| resource owner inside the access token may be displayed to a human. | resource owner inside the access token may be displayed to a human. | |||
| For example, when SASL is used in the context of IMAP the resource | For example, when SASL is used in the context of IMAP the resource | |||
| server may assert the resource owner's email address to the IMAP | server may assert the resource owner's email address to the IMAP | |||
| server for usage in an email-based application. The identifier may | server for usage in an email-based application. The identifier may | |||
| therefore contain internationalized characters and an application | therefore contain internationalized characters and an application | |||
| needs to ensure that the mapping between the identifier provided by | needs to ensure that the mapping between the identifier provided by | |||
| skipping to change at page 26, line 36 ¶ | skipping to change at page 26, line 36 ¶ | |||
| [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", | [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", | |||
| RFC 6749, October 2012. | RFC 6749, October 2012. | |||
| [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | |||
| Framework: Bearer Token Usage", RFC 6750, October 2012. | Framework: Bearer Token Usage", RFC 6750, October 2012. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [I-D.ietf-appsawg-webfinger] | [I-D.ietf-appsawg-webfinger] | |||
| Jones, P., Salgueiro, G., and J. Smarr, "WebFinger", | Jones, P., Salgueiro, G., and J. Smarr, "WebFinger", | |||
| draft-ietf-appsawg-webfinger-07 (work in progress), | draft-ietf-appsawg-webfinger-10 (work in progress), | |||
| December 2012. | February 2013. | |||
| [I-D.ietf-oauth-json-web-token] | [I-D.ietf-oauth-json-web-token] | |||
| Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| (JWT)", draft-ietf-oauth-json-web-token-05 (work in | (JWT)", draft-ietf-oauth-json-web-token-06 (work in | |||
| progress), November 2012. | progress), December 2012. | |||
| [I-D.ietf-oauth-v2-http-mac] | [I-D.ietf-oauth-v2-http-mac] | |||
| Richer, J., Mills, W., and H. Tschofenig, "OAuth 2.0 | Richer, J., Mills, W., and H. Tschofenig, "OAuth 2.0 | |||
| Message Authentication Code (MAC) Tokens", | Message Authentication Code (MAC) Tokens", | |||
| draft-ietf-oauth-v2-http-mac-02 (work in progress), | draft-ietf-oauth-v2-http-mac-02 (work in progress), | |||
| November 2012. | November 2012. | |||
| [I-D.ietf-oauth-v2-threatmodel] | ||||
| Lodderstedt, T., McGloin, M., and P. Hunt, "OAuth 2.0 | ||||
| Threat Model and Security Considerations", | ||||
| draft-ietf-oauth-v2-threatmodel-08 (work in progress), | ||||
| October 2012. | ||||
| [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. | |||
| [RFC6819] Lodderstedt, T., McGloin, M., and P. Hunt, "OAuth 2.0 | ||||
| Threat Model and Security Considerations", RFC 6819, | ||||
| January 2013. | ||||
| Appendix A. Acknowlegements | Appendix A. Acknowlegements | |||
| The authors would like to thank the members of the Kitten working | The authors would like to thank the members of the Kitten working | |||
| group, and in addition and specifically: Simon Josefson, Torsten | group, and in addition and specifically: Simon Josefson, Torsten | |||
| Lodderstadt, Ryan Troll, Alexey Melnikov, and Nico Williams. | Lodderstadt, Ryan Troll, Alexey Melnikov, Jeffrey Hutzelman, and Nico | |||
| Williams. | ||||
| This document was produced under the chairmanship of Alexey Melnikov, | This document was produced under the chairmanship of Alexey Melnikov, | |||
| Tom Yu, Shawn Emery, Josh Howlett, Sam Hartman. The area directors | Tom Yu, Shawn Emery, Josh Howlett, Sam Hartman. The supervising area | |||
| included Stephen Farrell. | directors was Stephen Farrell. | |||
| Appendix B. Document History | Appendix B. Document History | |||
| [[ to be removed by RFC editor before publication as an RFC ]] | [[ to be removed by RFC editor before publication as an RFC ]] | |||
| -10 | ||||
| o Clarifications throughout the document in response to the feedback | ||||
| from Jeffrey Hutzelman. | ||||
| -09 | -09 | |||
| o Incorporated review by Alexey and Hannes. | o Incorporated review by Alexey and Hannes. | |||
| o Clarified the three OAuth SASL mechanisms. | o Clarified the three OAuth SASL mechanisms. | |||
| o Updated references | o Updated references | |||
| o Extended acknowledgements | o Extended acknowledgements | |||
| End of changes. 47 change blocks. | ||||
| 175 lines changed or deleted | 196 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/ | ||||