| < draft-ietf-kitten-sasl-oauth-08.txt | draft-ietf-kitten-sasl-oauth-09.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: March 21, 2013 | Expires: June 20, 2013 | |||
| H. Tschofenig | H. Tschofenig | |||
| Nokia Siemens Networks | Nokia Siemens Networks | |||
| September 17, 2012 | December 17, 2012 | |||
| 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-08 | draft-ietf-kitten-sasl-oauth-09 | |||
| 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 | |||
| (SASL) or the Generic Security Service Application Program Interface | (SASL) or the Generic Security Service Application Program Interface | |||
| (GSS-API) to access a protected resource at a resource serve. | (GSS-API) to access a protected resource at a resource serve. | |||
| Thereby, it enables schemes defined within the OAuth framework for | Thereby, it enables schemes defined within the OAuth framework for | |||
| non-HTTP-based application protocols. | non-HTTP-based application protocols. | |||
| Clients typically store the user's long term credential. This does, | Clients typically store the user's long-term credential. This does, | |||
| however, lead to significant security vulnerabilities, for example, | however, lead to significant security vulnerabilities, for example, | |||
| when such a credential leaks. A significant benefit of OAuth for | when such a credential leaks. A significant benefit of OAuth for | |||
| usage in those clients is that the password is replaced by a token. | usage in those clients is that the password is replaced by a token. | |||
| Tokens typically provided limited access rights and can be managed | Tokens typically provided limited access rights and can be managed | |||
| and revoked separately from the user's long-term credential | 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 | |||
| 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 March 21, 2013. | This Internet-Draft will expire on June 20, 2013. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2012 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 | |||
| skipping to change at page 3, line 14 ¶ | skipping to change at page 3, line 14 ¶ | |||
| Table of Contents | Table of Contents | |||
| 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 Identities in the SASL Context . . . . . . . . . 11 | 3.2.1. OAuth Identifiers in the SASL Context . . . . . . . . 11 | |||
| 3.2.2. Canonicalization . . . . . . . . . . . . . . . . . . . 11 | 3.2.2. Server Response to Failed Authentication . . . . . . . 11 | |||
| 3.2.3. Server response to failed authentication. . . . . . . 11 | 3.2.3. Completing an Error Message Sequence . . . . . . . . . 12 | |||
| 3.2.4. Completing an error message sequence. . . . . . . . . 12 | 3.3. OAuth Access Token Types using Digital Signatures and | |||
| 3.3. Use of Signature Type Authorization . . . . . . . . . . . 12 | Keyed Message Digests . . . . . . . . . . . . . . . . . . 12 | |||
| 3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 13 | 3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 15 | 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 14 | |||
| 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 17 | 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 16 | |||
| 5.2. OAuth 1.0a Authorization with Channel Binding . . . . . . 18 | 5.2. OAuth 1.0a Authorization with Channel Binding . . . . . . 17 | |||
| 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 19 | 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 20 | 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 19 | |||
| 5.5. SMTP Example of a failed negotiation. . . . . . . . . . . 20 | 5.5. SMTP Example of a Failed Negotiation . . . . . . . . . . . 19 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 7. Internationalization Considerations . . . . . . . . . . . . . 22 | |||
| 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 23 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 24 | 8.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 8.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . . 25 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . . 26 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 25 | |||
| Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . . 27 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 26 | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 28 | Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . . 28 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 30 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
| 1. Introduction | 1. Introduction | |||
| OAuth [I-D.ietf-oauth-v2] enables a third-party application to obtain | OAuth [RFC6749] enables a third-party application to obtain limited | |||
| limited access to a protected resource, either on behalf of a | access to a protected resource, either on behalf of a resource owner | |||
| resource owner by orchestrating an approval interaction, or by | by orchestrating an approval interaction, or by allowing the third- | |||
| allowing the third-party application to obtain access on its own | party application to obtain access on its own behalf. The core OAuth | |||
| behalf. The core OAuth specification [I-D.ietf-oauth-v2] does not | 2.0 specification [RFC6749] does not define the interaction between | |||
| define the interaction between the client and the resource server | the client and the resource server with the access to a protected | |||
| with the access to a protected resource using an Access Token. This | resource using an Access Token. This functionality is described in | |||
| functionality is described in separate specifications, for example | separate specifications, for example bearer tokens [RFC6750], OAuth | |||
| Bearer tokens [I-D.ietf-oauth-v2-bearer], MAC tokens | 2.0 MAC tokens [I-D.ietf-oauth-v2-http-mac]. OAuth 1.0a [RFC5849], | |||
| [I-D.ietf-oauth-v2-http-mac], and OAuth 1.0a [RFC5849]. In each of | the predecessor of OAuth 2.0, has a similar design. The main use | |||
| these are defined in an HTTP-based environment only. | 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 | Figure 1 shows the abstract message flow as shown in Figure 1 of | |||
| [I-D.ietf-oauth-v2]. | OAuth 2.0 [RFC6749]. | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| | |--(A)- Authorization Request ->| Resource | | | |--(A)- Authorization Request ->| Resource | | |||
| | | | Owner | | | | | Owner | | |||
| | |<-(B)-- Authorization Grant ---| | | | |<-(B)-- Authorization Grant ---| | | |||
| | | +---------------+ | | | +---------------+ | |||
| | | | | | | |||
| | | +---------------+ | | | +---------------+ | |||
| | |--(C)-- Authorization Grant -->| Authorization | | | |--(C)-- Authorization Grant -->| Authorization | | |||
| | Client | | Server | | | Client | | Server | | |||
| | |<-(D)----- Access Token -------| | | | |<-(D)----- Access Token -------| | | |||
| | | +---------------+ | | | +---------------+ | |||
| | | | | | | |||
| | | +---h------------+ | | | +---------------+ | |||
| | |--(E)----- Access Token ------>| Resource | | | |--(E)----- Access Token ------>| Resource | | |||
| | | | Server | | | | | Server | | |||
| | |<-(F)--- Protected Resource ---| | | | |<-(F)--- Protected Resource ---| | | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| Figure 1: Abstract OAuth 2.0 Protocol Flow | Figure 1: Abstract OAuth 2.0 Protocol Flow | |||
| This document takes advantage of the OAuth protocol and its | This document takes advantage of the OAuth protocol and its | |||
| deployment base to provide a way to use SASL [RFC4422] as well as the | 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- | GSS-API [RFC2743] to gain access to resources when using non-HTTP- | |||
| skipping to change at page 5, line 18 ¶ | skipping to change at page 5, line 19 ¶ | |||
| protocol exchanges within a data security layer. | protocol exchanges within a data security layer. | |||
| The Generic Security Service Application Program Interface (GSS-API) | The Generic Security Service Application Program Interface (GSS-API) | |||
| [RFC2743] provides a framework for applications to support multiple | [RFC2743] provides a framework for applications to support multiple | |||
| authentication mechanisms through a unified interface. | authentication mechanisms through a unified interface. | |||
| This document defines SASL mechanisms for OAuth, and it conforms to | This document defines SASL mechanisms for OAuth, and it conforms to | |||
| the new bridge between SASL and the GSS-API called GS2 [RFC5801]. | the new bridge between SASL and the GSS-API called GS2 [RFC5801]. | |||
| This means that this document defines both SASL and GSS-API | This means that this document defines both SASL and GSS-API | |||
| mechanisms. Implementers may be interested in either the SASL, the | mechanisms. Implementers may be interested in either the SASL, the | |||
| GSS-API, or even both mechanisms. To faciliate these two variants, | GSS-API, or even both mechanisms. To facilitate these two variants, | |||
| the description has been split into two parts, one part that provides | the description has been split into two parts, one part that provides | |||
| normative references for those interested in the SASL OAuth mechanism | normative references for those interested in the SASL OAuth mechanism | |||
| (see Section 3), and a second part for those implementers that wish | (see Section 3), and a second part for those implementers that wish | |||
| to implement the GSS-API portion (see Section 4). | to implement the GSS-API portion (see Section 4). | |||
| When OAuth is integrated into SASL and the GSS-API the high-level | When OAuth is integrated into SASL and the GSS-API the high-level | |||
| steps are as follows: | steps are as follows: | |||
| (A) The client requests authorization from the resource owner. | (A) The client requests authorization from the resource owner. | |||
| The authorization request can be made directly to the resource | The authorization request can be made directly to the resource | |||
| skipping to change at page 6, line 5 ¶ | skipping to change at page 6, line 5 ¶ | |||
| (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 [I-D.ietf-oauth-v2] and are the | Steps (E) and (F) are not defined in [RFC6749] and are the main | |||
| main functionality specified within this document. Consequently, the | functionality specified within this document. Consequently, the | |||
| message exchange shown in Figure 2 is the result of this | message exchange shown in Figure 2 is the result of this | |||
| specification. The client will genrally need to determine the | specification. The client will generally need to determine the | |||
| authentication endpoints (and perhaps the service endpoints) before | authentication endpoints (and perhaps the service endpoints) before | |||
| the OAuth 2.0 protocol exchange messages in steps (A)-(D) are | the OAuth 2.0 protocol exchange messages in steps (A)-(D) are | |||
| executed. The discovery of the resource owner and authorization | executed. The discovery of the resource owner and authorization | |||
| server endpoints is outside the scope of this specification. The | server endpoints is outside the scope of this specification. The | |||
| client must discover those endpoints using a discovery mechanisms | client must discover those endpoints using a discovery mechanisms | |||
| such as Webfinger using host-meta [I-D.jones-appsawg-webfinger]. In | such as Webfinger using host-meta [I-D.ietf-appsawg-webfinger]. In | |||
| band discovery is not tenable if clients support the OAuth 2.0 | band discovery is not tenable if clients support the OAuth 2.0 | |||
| password grant. Once credentials are obtained the client proceeds to | password grant. Once credentials are obtained the client proceeds to | |||
| steps (E) and (F) defined in this specification. | steps (E) and (F) defined in this specification. | |||
| ----+ | ----+ | |||
| +--------+ +---------------+ | | +--------+ +---------------+ | | |||
| | |--(A)-- Authorization Request --->| Resource | | | | |--(A)-- Authorization Request --->| Resource | | | |||
| | | | Owner | |Plain | | | | Owner | |Plain | |||
| | |<-(B)------ Access Grant ---------| | |OAuth | | |<-(B)------ Access Grant ---------| | |OAuth | |||
| | | +---------------+ |2.0 | | | +---------------+ |2.0 | |||
| skipping to change at page 7, line 12 ¶ | skipping to change at page 7, line 12 ¶ | |||
| Figure 2: OAuth SASL Architecture | Figure 2: OAuth SASL Architecture | |||
| 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 [I-D.ietf-oauth-v2]. | 2.0 specification [RFC6749]. | |||
| 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, see | |||
| message, not this memo. | Section 4 of [RFC4648], not this memo. | |||
| 3. OAuth SASL Mechanism Specifications | 3. OAuth SASL Mechanism Specifications | |||
| SASL is used as a generalized authentication method 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 Bearer tokens. | OAUTHBEARER: Authorization using OAuth 2.0 bearer tokens as | |||
| described in [RFC6750]. | ||||
| OAUTH10A Authorization using OAuth 1.0a tokens. | OAUTH10A: Authorization using OAuth 1.0a MAC tokens (using the | |||
| HMAC-SHA1 keyed message digest) as described in Section 3.4.2 | ||||
| of [RFC5849]. | ||||
| OAUTH10A-PLUS Adds channel binding [RFC5056] capability to | OAUTH10A-PLUS: Adds channel binding [RFC5056] capability to | |||
| OAUTH10A for additional security guarantees. | OAUTH10A for protection against man-in-the-middle attacks. | |||
| Any new OAuth token scheme MAY define a new SASL mechanism compatible | New extensions may be defined to add additional OAuth Access Token | |||
| with the mechanisms defined here by simply registering the new | Types. Such a new SASL OAuth mechanism can be added by simply | |||
| name(s) and citing this specification for the further definition. | registering the new name(s) and citing this specification for the | |||
| New channel binding enabled "-PLUS" mechanisms defined in this way | further definition. New channel binding enabled "-PLUS" mechanisms | |||
| MUST include message integrity protection. A newly defined mechanism | defined in this way MUST include message integrity protection. A | |||
| 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 | |||
| has and correctly uses a valid token the flow is: | has and correctly uses a valid token the flow is: | |||
| o Client sends a valid and correct initial client response. | o Client sends a valid and correct initial client response. | |||
| o Server responds with a successful authentication. | o Server responds with a successful authentication. | |||
| In the case where authorization fails the server sends an error | In the case where authorization fails the server sends an error | |||
| skipping to change at page 8, line 45 ¶ | skipping to change at page 8, line 48 ¶ | |||
| server in order to allow the server to finish the exchange. Some | server in order to allow the server to finish the exchange. Some | |||
| protocols and common SASL implementations do not support both sending | protocols and common SASL implementations do not support both sending | |||
| a SASL message and finalizing a SASL negotiation, the additional | a SASL message and finalizing a SASL negotiation, the additional | |||
| client message in the error case deals with this problem. This | client message in the error case deals with this problem. This | |||
| exchange is: | exchange is: | |||
| o Client sends an invalid initial client response. | o Client sends an invalid initial client response. | |||
| o Server responds with an error message. | o Server responds with an error message. | |||
| o Client sends a dummy client reponse. | o Client sends a dummy client response. | |||
| o Server fails the authentication. | o Server fails the authentication. | |||
| 3.1. Initial Client Response | 3.1. Initial Client Response | |||
| Client responses are a key/value pair sequence. The initial client | Client responses are a key/value pair sequence. The initial client | |||
| response includes a gs2-header as defined in GS2 [RFC5801], which | response includes a gs2-header as defined in GS2 [RFC5801], which | |||
| carries the authorization ID. These key/value pairs carry the | carries the authorization ID. These key/value pairs carry the | |||
| equivalent values from an HTTP context in order to be able to | equivalent values from an HTTP context in order to be able to | |||
| complete an OAuth style HTTP authorization. The ABNF [RFC5234] | complete an OAuth style HTTP authorization. Unknown key/value pairs | |||
| syntax is: | MUST be ignored by the server. The ABNF [RFC5234] syntax is: | |||
| kvsep = %x01 | kvsep = %x01 | |||
| key = 1*ALPHA | key = 1*ALPHA | |||
| value = *(VCHAR | SP | HTAB | CR | LF ) | value = *(VCHAR / SP / HTAB / CR / LF ) | |||
| kvpair = key "=" value kvsep | kvpair = key "=" value kvsep | |||
| client_resp = 0*kvpair kvsep | client_resp = 0*kvpair kvsep | |||
| ;; gs2-header = As defined in GSS-API | ;; gs2-header = As defined in GSS-API | |||
| initial_client_resp = gs2-header kvsep client_resp | initial_client_resp = gs2-header kvsep client_resp | |||
| The following key/value pairs are defined in the client response: | The following key/value pairs are defined in the client response: | |||
| auth (REQUIRED): The payload of the HTTP Authorization header for | auth (REQUIRED): The payload of the HTTP Authorization header for | |||
| an equivalent HTTP OAuth authroization. | an equivalent HTTP OAuth authorization. | |||
| host: Contains the host name to which the client connected. | host: Contains the host name to which the client connected. | |||
| 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. | |||
| In authorization schemes that use signatures, the client MUST send | For OAuth Access Token Types that use digital signatures or keyed | |||
| host and port number key/values, and the server MUST fail an | message digests the client MUST send host and port number key/values, | |||
| authorization request requiring signatures that does not have host | and the server MUST fail an authorization request requiring | |||
| and port values. For authorization schemes that require a URI scheme | signatures or keyed message digests that do not have host and port | |||
| as part of the data being signed "http" is always used. In OAuth | values. For authorization schemes that require a URI scheme as part | |||
| 1.0a for example, the signature base string includes the | of the data being signed "http" is always used. In OAuth 1.0a for | |||
| example, the so-called signature base string calculation includes the | ||||
| reconstructed HTTP URL. | 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 schemes that use request signatures the default values MUST | For OAuth Access Token Types that use request signatures the default | |||
| be used unless explict values are provided in the client response. | values MUST be used unless explicit values are provided in the client | |||
| The following key values are reserved for future use: | response. The following key values are reserved for future use: | |||
| mthd (RESERVED): HTTP method for use in signatures, the default | mthd (RESERVED): HTTP method for use in signatures, 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 | |||
| skipping to change at page 10, line 41 ¶ | skipping to change at page 10, line 41 ¶ | |||
| credential, if it does not the server MUST fail the negotiation. | credential, if it does not the server MUST fail the negotiation. | |||
| 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 | The server validates the response per the specification for the OAuth | |||
| authorization scheme used. If the authorization scheme used includes | Access Token Types used. If the OAuth Access Token Type utilizes a | |||
| signing of the request parameters the client must provide a client | digital signature or a keyed message digest of the request parameters | |||
| response that satisfies the data requirements for the scheme in use. | then the client must provide a client response that satisfies the | |||
| data requirements for 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 Identities in the SASL Context | 3.2.1. OAuth Identifiers in the SASL Context | |||
| Some OAuth schemes can carry both an owner or resource identity and a | OAuth access tokens may carry the authenticated identifier of the | |||
| "proxy" identity, for example an OAuth 1.0a [RFC5849] mechanism where | resource owner and client authentication provides the authenticated | |||
| the consumer key (oauth_consumer_key) identifies the entity using the | identity of the client issuing the request to the resource server. | |||
| token and the token itself identifies the owner or resouce. If both | ||||
| identities are needed by an application the developer will need to | If both identities are needed by an application the developer will | |||
| provide a way to communicate that from the SASL mechanism back to the | need to provide a way to communicate that from the SASL mechanism | |||
| application such as a GSS-API [RFC2473] 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. Canonicalization | 3.2.2. Server Response to Failed Authentication | |||
| The identity asserted by the OAuth authorization server is canonical | ||||
| for display. The server MAY provide a different canonical form based | ||||
| on local data. | ||||
| 3.2.3. 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 | |||
| codes are defined in the IANA [[need registry name]] registry | codes are defined in the IANA [[need registry name]] registry | |||
| specified in the OAuth 2 core specification. | specified in the OAuth 2 core specification. | |||
| scope (OPTIONAL): An OAuth scope which is valid to access the | scope (OPTIONAL): An OAuth scope which is valid to access the | |||
| service. This may be empty which implies that unscoped tokens | service. This may be empty which implies that unscoped tokens | |||
| are required, or a space separated list. Use of a space | are required, or a space separated list. Use of a space | |||
| separated list is NOT RECOMMENDED. | separated list is NOT RECOMMENDED. | |||
| If the resource server provides a scope the client SHOULD always | If the resource server provides a scope then the client MUST always | |||
| request scoped tokens from the token endpoint. The client MAY use a | request scoped tokens from the token endpoint. If the resource | |||
| scope other than the one provided by the resource server. Scopes | server provides no scope to the client then the client SHOULD presume | |||
| other than those advertised by the resource server are be defined by | an empty scope (unscoped token) is needed. | |||
| the resource owner and provided in service documentation or discovery | ||||
| information (which is beyond the scope of this memo). If not present | ||||
| then the client SHOULD presume an empty scope (unscoped token) is | ||||
| needed. | ||||
| 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 status code set to 412 to indicate that the channel | responds with a 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.2.4. 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. Therefor, 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. Use of Signature Type Authorization | 3.3. OAuth Access Token Types using Digital Signatures and Keyed | |||
| Message Digests | ||||
| Some OAuth mechanisms support authorization using signatures, which | OAuth Access Token Types may use digital signatures or keyed message | |||
| requires that both client and server construct the string to be | digests. The client and the resource server need to perform a | |||
| signed. OAuth 2 is designed for authentication/authorization to | cryptographic computation for integrity protection and data origin | |||
| access specific URIs. SASL is designed for user authentication, and | authentication. | |||
| has no facility for being more specific. In this mechanism we | ||||
| require or define default values for the data elements from an HTTP | OAuth is designed for access to resources identified by URIs. SASL | |||
| request which allow the signature base string to be constructed | is designed for user authentication, and has no facility for more | |||
| properly. The default HTTP path is "/" and the default post body is | fine-grained access control. In this specification we require or | |||
| empty. These atoms are defined as extension points so that no | define default values for the data elements from an HTTP request | |||
| changes are needed if there is a revision of SASL which supports more | which allow the signature base string to be constructed properly. | |||
| specific resource authorization, e.g. IMAP access to a specific | The default HTTP path is "/" and the default post body is empty. | |||
| folder or FTP access limited to a specific directory. | These atoms are defined as extension points so that no changes are | |||
| needed if there is a revision of SASL which supports more specific | ||||
| resource authorization, e.g., IMAP access to a specific folder or FTP | ||||
| access limited to a specific directory. | ||||
| Using the example in the OAuth 1.0a specification as a starting | Using the example in the OAuth 1.0a specification as a starting | |||
| point, on an IMAP server running on port 143 and given the OAuth 1.0a | point, on an IMAP server running on port 143 and given the OAuth 1.0a | |||
| style authorization request (with %x01 shown as ^A and line breaks | style authorization request (with %x01 shown as ^A and line breaks | |||
| added for readability) below: | added for readability) below: | |||
| n,a=user@example.com^A | n,a=user@example.com^A | |||
| host=example.com^A | host=example.com^A | |||
| user=user@example.com^A | user=user@example.com^A | |||
| port=143^A | port=143^A | |||
| skipping to change at page 13, line 42 ¶ | skipping to change at page 13, line 31 ¶ | |||
| POST&http%3A%2F%2Fexample.com:143%2F&oauth_consumer_key%3D9djdj82h4 | POST&http%3A%2F%2Fexample.com:143%2F&oauth_consumer_key%3D9djdj82h4 | |||
| 8djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHMAC-SH | 8djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHMAC-SH | |||
| 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 authorization schemes offered with "-PLUS" | the-middle attacks. All SASL OAuth mechanisms with a "-PLUS" postfix | |||
| mechanisms MUST provide integrity protection. It should be noted | MUST provide integrity protection. It should be noted that while the | |||
| that while the Bearer token scheme specifies SSL for normal usage it | Bearer Access Token Type mandates TLS it does not create keying | |||
| offers no integrity protection and is not suitable for use with | material at the application layer and is not suitable for use with | |||
| channel binding. | 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 | |||
| data is the TLS finished message as specified in section 3.1 of | data is the TLS finished message as specified in Section 3.1 of | |||
| [RFC5929]. | [RFC5929]. | |||
| 4. GSS-API OAuth Mechanism Specification | 4. GSS-API OAuth Mechanism Specification | |||
| Note: The normative references in this section are informational for | Note: The normative references in this section are informational for | |||
| SASL implementers, but they are normative for GSS-API implementers. | SASL implementers, but they are normative for GSS-API implementers. | |||
| 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: | |||
| skipping to change at page 15, line 38 ¶ | skipping to change at page 14, line 38 ¶ | |||
| (GSS_C_MUTUAL_FLAG) set to TRUE. OAuth supports credential | (GSS_C_MUTUAL_FLAG) set to TRUE. OAuth supports credential | |||
| delegation, therefore security contexts may have the deleg_state flag | delegation, therefore security contexts may have the deleg_state flag | |||
| (GSS_C_DELEG_FLAG) set to either TRUE or FALSE. | (GSS_C_DELEG_FLAG) set to either TRUE or FALSE. | |||
| The mutual authentication property of this mechanism relies on | The mutual authentication property of this mechanism relies on | |||
| successfully comparing the TLS server identity with the negotiated | successfully comparing the TLS server identity with the negotiated | |||
| target name. Since the TLS channel is managed by the application | target name. Since the TLS channel is managed by the application | |||
| outside of the GSS-API mechanism, the mechanism itself is unable to | outside of the GSS-API mechanism, the mechanism itself is unable to | |||
| confirm the name while the application is able to perform this | confirm the name while the application is able to perform this | |||
| comparison for the mechanism. For this reason, applications MUST | comparison for the mechanism. For this reason, applications MUST | |||
| match the TLS server identity with the target name, as discussed in | match the TLS server identity with the target name using the | |||
| [RFC6125]. | 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. | ||||
| 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 [RFC2743], Section 4.1). 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 | |||
| skipping to change at page 17, line 10 ¶ | skipping to change at page 16, line 10 ¶ | |||
| Section 4). The exported name token does, of course, conform to | Section 4). The exported name token does, of course, conform to | |||
| [RFC2743], Section 3.2, but the "NAME" part of the token should be | [RFC2743], Section 3.2, 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: Authorization scheme 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. | |||
| S: * IMAP4rev1 Server Ready | S: * OK IMAP4rev1 Server Ready | |||
| C: t0 CAPABILITY | C: t0 CAPABILITY | |||
| S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER | 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 | |||
| 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 (with %x01 represented as ^A and long | decoded initial client response (with %x01 represented as ^A and long | |||
| lines wrapped for readability) is: | lines wrapped for readability) is: | |||
| skipping to change at page 18, line 13 ¶ | skipping to change at page 17, line 13 ¶ | |||
| 0x0D and 0x0A), these are not displayed explicitly in the example. | 0x0D and 0x0A), these are not displayed explicitly in the example. | |||
| [connection begins] | [connection begins] | |||
| S: 220 mx.example.com ESMTP 12sm2095603fks.9 | S: 220 mx.example.com ESMTP 12sm2095603fks.9 | |||
| C: EHLO sender.example.com | C: EHLO sender.example.com | |||
| S: 250-mx.example.com at your service,[172.31.135.47] | S: 250-mx.example.com at your service,[172.31.135.47] | |||
| S: 250-SIZE 35651584 | S: 250-SIZE 35651584 | |||
| S: 250-8BITMIME | S: 250-8BITMIME | |||
| S: 250-AUTH LOGIN PLAIN OAUTHBEARER | S: 250-AUTH LOGIN PLAIN OAUTHBEARER | |||
| S: 250-ENHANCEDSTATUSCODES | S: 250-ENHANCEDSTATUSCODES | |||
| S: 250-PIPELINING | S: 250 PIPELINING | |||
| C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZX | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZX | |||
| J2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMBYXV0aD1CZWFyZXIgdkY5ZGZ0NHFtV | J2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMBYXV0aD1CZWFyZXIgdkY5ZGZ0NHFtV | |||
| GMyTnZiM1JsY2tCaGJIUmhkbWx6ZEdFdVkyOXRDZz09AQE= | GMyTnZiM1JsY2tCaGJIUmhkbWx6ZEdFdVkyOXRDZz09AQE= | |||
| S: 235 Authentication successful. | S: 235 Authentication successful. | |||
| [connection continues...] | [connection continues...] | |||
| 5.2. OAuth 1.0a Authorization with Channel Binding | 5.2. OAuth 1.0a Authorization with Channel Binding | |||
| This example shows channel binding in the context of an OAuth 1.0a | This example shows channel binding in the context of an OAuth 1.0a | |||
| signed authorization request. Note that line breaks are inserted for | request using a keyed message digest. Note that line breaks are | |||
| readability. | inserted for readability. | |||
| S: * CAPABILITY IMAP4rev1 AUTH=OAUTH10A-PLUS SASL-IR IMAP4rev1 Server | S: * OK [CAPABILITY IMAP4rev1 AUTH=OAUTH10A-PLUS SASL-IR] | |||
| Ready | IMAP4rev1 Server Ready | |||
| S: t0 OK Completed | ||||
| C: t1 AUTHENTICATE OAUTH10A-PLUS cD10bHMtdW5pcXVlLGE9dXNlckBleGFtcGxlL | C: t1 AUTHENTICATE OAUTH10A-PLUS cD10bHMtdW5pcXVlLGE9dXNlckBleGFtcGxlL | |||
| mNvbQFob3N0PXNlcnZlci5leGFtcGxlLmNvbQFwb3J0PTE0MwFhdXRoPU9BdXRoI | mNvbQFob3N0PXNlcnZlci5leGFtcGxlLmNvbQFwb3J0PTE0MwFhdXRoPU9BdXRoI | |||
| HJlYWxtPSJFeGFtcGxlIixvYXV0aF9jb25zdW1lcl9rZXk9IjlkamRqODJoNDhka | HJlYWxtPSJFeGFtcGxlIixvYXV0aF9jb25zdW1lcl9rZXk9IjlkamRqODJoNDhka | |||
| nM5ZDIiLG9hdXRoX3Rva2VuPSJra2s5ZDdkaDNrMzlzanY3IixvYXV0aF9zaWduY | nM5ZDIiLG9hdXRoX3Rva2VuPSJra2s5ZDdkaDNrMzlzanY3IixvYXV0aF9zaWduY | |||
| XR1cmVfbWV0aG9kPSJITUFDLVNIQTEiLG9hdXRoX3RpbWVzdGFtcD0iMTM3MTMxM | XR1cmVfbWV0aG9kPSJITUFDLVNIQTEiLG9hdXRoX3RpbWVzdGFtcD0iMTM3MTMxM | |||
| jAxIixvYXV0aF9ub25jZT0iN2Q4ZjNlNGEiLG9hdXRoX3NpZ25hdHVyZT0iU1Nkd | jAxIixvYXV0aF9ub25jZT0iN2Q4ZjNlNGEiLG9hdXRoX3NpZ25hdHVyZT0iU1Nkd | |||
| ElHRWdiR2wwZEd4bElIUmxZU0J3YjNRdSIBcXM9Y2JkYXRhPXRscy11bmlxdWU6U | ElHRWdiR2wwZEd4bElIUmxZU0J3YjNRdSIBcXM9Y2JkYXRhPXRscy11bmlxdWU6U | |||
| 0c5M0lHSnBaeUJwY3lCaElGUk1VeUJtYVc1aGJDQnRaWE56WVdkbFB3bz0BAQ== | 0c5M0lHSnBaeUJwY3lCaElGUk1VeUJtYVc1aGJDQnRaWE56WVdkbFB3bz0BAQ== | |||
| S: t1 OK SASL authentication succeeded | S: t1 OK SASL authentication succeeded | |||
| skipping to change at page 20, line 41 ¶ | skipping to change at page 19, line 41 ¶ | |||
| The decoded server response is: | The decoded server response is: | |||
| { | { | |||
| "status":"412", | "status":"412", | |||
| "scope":"example_scope" | "scope":"example_scope" | |||
| } | } | |||
| The client responds with the required dummy response. | The client responds with the required dummy response. | |||
| 5.5. SMTP Example of a failed negotiation. | 5.5. SMTP Example of a Failed Negotiation | |||
| This example shows an authorization failure in an SMTP exchange. | This example shows an authorization failure in an SMTP exchange. | |||
| Note that line breaks are inserted for readability, and that the SMTP | Note that line breaks are inserted for readability, and that the SMTP | |||
| protocol terminates lines with CR and LF characters (ASCII values | protocol terminates lines with CR and LF characters (ASCII values | |||
| 0x0D and 0x0A), these are not displayed explicitly in the example. | 0x0D and 0x0A), these are not displayed explicitly in the example. | |||
| [connection begins] | [connection begins] | |||
| S: 220 mx.example.com ESMTP 12sm2095603fks.9 | S: 220 mx.example.com ESMTP 12sm2095603fks.9 | |||
| C: EHLO sender.example.com | C: EHLO sender.example.com | |||
| S: 250-mx.example.com at your service,[172.31.135.47] | S: 250-mx.example.com at your service,[172.31.135.47] | |||
| S: 250-SIZE 35651584 | S: 250-SIZE 35651584 | |||
| S: 250-8BITMIME | S: 250-8BITMIME | |||
| S: 250-AUTH LOGIN PLAIN OAUTHBEARER | S: 250-AUTH LOGIN PLAIN OAUTHBEARER | |||
| S: 250-ENHANCEDSTATUSCODES | S: 250-ENHANCEDSTATUSCODES | |||
| S: 250-PIPELINING | S: 250 PIPELINING | |||
| C: AUTH OAUTHBEARER bixhPT1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB2 | C: AUTH OAUTHBEARER bixhPT1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB2 | |||
| RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ== | RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ== | |||
| S: 334 eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb3BlIjoia | S: 334 eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb3BlIjoia | |||
| HR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vIn0K | HR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vIn0K | |||
| C: AQ== | C: AQ== | |||
| S: 535-5.7.1 Username and Password not accepted. Learn more at | S: 535-5.7.1 Username and Password not accepted. Learn more at | |||
| 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 | |||
| This mechanism does not provide a security layer, but does provide a | OAuth 1.0a and OAuth 2 allows for a variety of deployment scenarios, | |||
| provision for channel binding. The OAuth 2 specification | and the security properties of these profiles vary. Application | |||
| [I-D.ietf-oauth-v2] allows for a variety of usages, and the security | developers therefore need to understand the needs of their | |||
| properties of these profiles vary. The usage of bearer tokens, for | applications before selecting a specific SASL OAuth mechanism. | |||
| example, provide security features similar to cookies. Applications | ||||
| using this mechanism SHOULD exercise the same level of care using | ||||
| this mechanism as they would in using the SASL PLAIN mechanism. In | ||||
| particular, TLS 1.2 or an equivalent secure channel MUST be | ||||
| implemented and its usage is RECOMMENDED. | ||||
| The channel binding in this mechanism has different properties based | The channel binding in this mechanism has different properties based | |||
| on the authentication scheme used. The integrity guarantee for | on the Access Token Type used. | |||
| channel binding depends on the quality of the guarantee in the the | ||||
| authorization scheme. | ||||
| 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 access token used | |||
| authenticate it. This is a common problem in application protocols | to establish 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 | The OAuth access token (and related keying material) is not | |||
| account credential. There are protocols like XMPP that allow actions | equivalent to the user's long term password. As such, care has to be | |||
| like change password. The server SHOULD ensure that actions taken in | taken when these OAuth credentials are used for actions like changing | |||
| the authenticated channel are appropriate to the strength of the | passwords (as it is possible with some protocols, e.g., XMPP). The | |||
| presented credential. | server SHOULD ensure that actions taken in the authenticated channel | |||
| are appropriate to the strength of the presented credential. | ||||
| Tokens have a lifetime associated with them. Reducing the lifetime | Access tokens have a lifetime. Reducing the lifetime of an access | |||
| of a token provides security benefits in the case that tokens leak. | token provides security benefits, as described in | |||
| In addition a previously obtained token MAY be revoked or rendered | [I-D.ietf-oauth-v2-threatmodel], and OAuth 2.0 introduces refresh | |||
| invalid at any time. The client MAY request a new access token for | tokens to obtain new access token on the fly. Additionally, a | |||
| each connection to a resource server, but it SHOULD cache and re-use | 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. | access credentials that appear to be valid. | |||
| 7. IANA Considerations | 7. Internationalization Considerations | |||
| 7.1. SASL Registration | The identifer asserted by the OAuth authorization server about the | |||
| 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 | ||||
| server may assert the resource owner's email address to the IMAP | ||||
| server for usage in an email-based application. The identifier may | ||||
| therefore contain internationalized characters and an application | ||||
| needs to ensure that the mapping between the identifier provided by | ||||
| OAuth is suitable for use with the application layer protocol SASL is | ||||
| incorporated into. | ||||
| At the time of writing the standardization of the assertion format | ||||
| (in JSON format) is still ongoing, see | ||||
| [I-D.ietf-oauth-json-web-token]. | ||||
| 8. IANA Considerations | ||||
| 8.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: OAUTHBEARER | SASL mechanism profile: OAUTHBEARER | |||
| 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. | |||
| skipping to change at page 24, line 5 ¶ | skipping to change at page 24, line 5 ¶ | |||
| 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. GSS-API Registration | 8.2. GSS-API Registration | |||
| IANA is further requested to assign an OID for thESE GSS mechanismS | IANA is further requested to assign an OID for these GSS mechanisms | |||
| in the SMI numbers registry, with the prefix of | in the SMI numbers registry, with the prefix of | |||
| iso.org.dod.internet.security.mechanisms (1.3.6.1.5.5) and to | iso.org.dod.internet.security.mechanisms (1.3.6.1.5.5) and to | |||
| reference this specification in the registry. | reference this specification in the registry. | |||
| 8. References | 9. References | |||
| 8.1. Normative References | ||||
| [I-D.ietf-oauth-v2] | ||||
| Hardt, D., "The OAuth 2.0 Authorization Framework", | ||||
| draft-ietf-oauth-v2-31 (work in progress), August 2012. | ||||
| [I-D.ietf-oauth-v2-bearer] | 9.1. Normative References | |||
| Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | ||||
| Framework: Bearer Token Usage", | ||||
| draft-ietf-oauth-v2-bearer-23 (work in progress), | ||||
| August 2012. | ||||
| [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. | |||
| [RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in | [RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in | |||
| IPv6 Specification", RFC 2473, December 1998. | IPv6 Specification", RFC 2473, December 1998. | |||
| [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. | |||
| skipping to change at page 25, line 46 ¶ | skipping to change at page 25, line 36 ¶ | |||
| [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. | |||
| [RFC4627] Crockford, D., "The application/json Media Type for | [RFC4627] Crockford, D., "The application/json Media Type for | |||
| JavaScript Object Notation (JSON)", RFC 4627, July 2006. | JavaScript Object Notation (JSON)", RFC 4627, July 2006. | |||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | ||||
| Encodings", RFC 4648, October 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. | |||
| [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
| [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. | |||
| [RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, | [RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, | |||
| skipping to change at page 26, line 33 ¶ | skipping to change at page 26, line 26 ¶ | |||
| Verification of Domain-Based Application Service Identity | Verification of Domain-Based Application Service Identity | |||
| within Internet Public Key Infrastructure Using X.509 | within Internet Public Key Infrastructure Using X.509 | |||
| (PKIX) Certificates in the Context of Transport Layer | (PKIX) Certificates in the Context of Transport Layer | |||
| Security (TLS)", RFC 6125, March 2011. | Security (TLS)", RFC 6125, March 2011. | |||
| [RFC6680] Williams, N., Johansson, L., Hartman, S., and S. | [RFC6680] Williams, N., Johansson, L., Hartman, S., and S. | |||
| Josefsson, "Generic Security Service Application | Josefsson, "Generic Security Service Application | |||
| Programming Interface (GSS-API) Naming Extensions", | Programming Interface (GSS-API) Naming Extensions", | |||
| RFC 6680, August 2012. | RFC 6680, August 2012. | |||
| 8.2. Informative References | [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", | |||
| RFC 6749, October 2012. | ||||
| [I-D.ietf-oauth-v2-http-mac] | [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | |||
| Hammer-Lahav, E., "HTTP Authentication: MAC Access | Framework: Bearer Token Usage", RFC 6750, October 2012. | |||
| Authentication", draft-ietf-oauth-v2-http-mac-01 (work in | ||||
| progress), February 2012. | ||||
| [I-D.jones-appsawg-webfinger] | 9.2. Informative References | |||
| [I-D.ietf-appsawg-webfinger] | ||||
| Jones, P., Salgueiro, G., and J. Smarr, "WebFinger", | Jones, P., Salgueiro, G., and J. Smarr, "WebFinger", | |||
| draft-jones-appsawg-webfinger-06 (work in progress), | draft-ietf-appsawg-webfinger-07 (work in progress), | |||
| June 2012. | December 2012. | |||
| [I-D.ietf-oauth-json-web-token] | ||||
| Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | ||||
| (JWT)", draft-ietf-oauth-json-web-token-05 (work in | ||||
| progress), November 2012. | ||||
| [I-D.ietf-oauth-v2-http-mac] | ||||
| Richer, J., Mills, W., and H. Tschofenig, "OAuth 2.0 | ||||
| Message Authentication Code (MAC) Tokens", | ||||
| draft-ietf-oauth-v2-http-mac-02 (work in progress), | ||||
| 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. | |||
| 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, and Nico Williams. | Lodderstadt, Ryan Troll, Alexey Melnikov, and Nico Williams. | |||
| This document was produced under the chairmanship of Alexey Melnikov, | ||||
| Tom Yu, Shawn Emery, Josh Howlett, Sam Hartman. The area directors | ||||
| included 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 ]] | |||
| -09 | ||||
| o Incorporated review by Alexey and Hannes. | ||||
| o Clarified the three OAuth SASL mechanisms. | ||||
| o Updated references | ||||
| o Extended acknowledgements | ||||
| -08 | -08 | |||
| o Fixed the channel binding examples for p=$cbtype | o Fixed the channel binding examples for p=$cbtype | |||
| o More tuning of the authcid language and edited and renamed 3.2.1. | o More tuning of the authcid language and edited and renamed 3.2.1. | |||
| -07 | -07 | |||
| o Struck the MUST langiage from authzid. | o Struck the MUST langiage from authzid. | |||
| End of changes. 66 change blocks. | ||||
| 184 lines changed or deleted | 222 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/ | ||||