| < draft-ietf-kitten-sasl-oauth-14.txt | draft-ietf-kitten-sasl-oauth-15.txt > | |||
|---|---|---|---|---|
| KITTEN W. Mills | KITTEN W. Mills | |||
| Internet-Draft Yahoo! Inc. | Internet-Draft Skype | |||
| Intended status: Standards Track T. Showalter | Intended status: Standards Track T. Showalter | |||
| Expires: September 7, 2014 | Expires: January 23, 2015 | |||
| H. Tschofenig | H. Tschofenig | |||
| ARM Ltd. | ARM Ltd. | |||
| March 6, 2014 | July 22, 2014 | |||
| A set of SASL Mechanisms for OAuth | A set of SASL Mechanisms for OAuth | |||
| draft-ietf-kitten-sasl-oauth-14.txt | draft-ietf-kitten-sasl-oauth-15.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 September 7, 2014. | This Internet-Draft will expire on January 23, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 33 ¶ | skipping to change at page 2, line 33 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. OAuth SASL Mechanism Specifications . . . . . . . . . . . . . 6 | 3. OAuth SASL Mechanism Specifications . . . . . . . . . . . . . 6 | |||
| 3.1. Initial Client Response . . . . . . . . . . . . . . . . . 7 | 3.1. Initial Client Response . . . . . . . . . . . . . . . . . 7 | |||
| 3.1.1. Reserved Key/Values . . . . . . . . . . . . . . . . . 8 | 3.1.1. Reserved Key/Values . . . . . . . . . . . . . . . . . 8 | |||
| 3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 8 | 3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.2.1. OAuth Identifiers in the SASL Context . . . . . . . . 8 | 3.2.1. OAuth Identifiers in the SASL Context . . . . . . . . 8 | |||
| 3.2.2. Server Response to Failed Authentication . . . . . . 9 | 3.2.2. Server Response to Failed Authentication . . . . . . 9 | |||
| 3.2.3. Completing an Error Message Sequence . . . . . . . . 9 | 3.2.3. Completing an Error Message Sequence . . . . . . . . 9 | |||
| 3.3. OAuth Access Token Types using Keyed Message Digests . . 9 | 3.3. OAuth Access Token Types using Keyed Message Digests . . 9 | |||
| 4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.1. Successful Bearer Token Exchange . . . . . . . . . . . . 11 | 4.1. Successful Bearer Token Exchange . . . . . . . . . . . . 11 | |||
| 4.2. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 11 | 4.2. Successful OAuth 1.0a Token Exchange . . . . . . . . . . 12 | |||
| 4.3. SMTP Example of a Failed Negotiation . . . . . . . . . . 12 | 4.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 4.4. SMTP Example of a Failed Negotiation . . . . . . . . . . 13 | |||
| 6. Internationalization Considerations . . . . . . . . . . . . . 14 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | 6. Internationalization Considerations . . . . . . . . . . . . . 15 | |||
| 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 14 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 16 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 15 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 16 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 16 | |||
| Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . 17 | 8.2. Informative References . . . . . . . . . . . . . . . . . 17 | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 17 | Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . 18 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 18 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
| 1. Introduction | 1. Introduction | |||
| OAuth 1.0a [RFC5849] and OAuth 2.0 [RFC6749] are protocol frameworks | OAuth 1.0a [RFC5849] and OAuth 2.0 [RFC6749] are protocol frameworks | |||
| that enable a third-party application to obtain limited access to a | that enable 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. | |||
| The core OAuth 2.0 specification [RFC6749] specifies the interaction | The core OAuth 2.0 specification [RFC6749] specifies the interaction | |||
| skipping to change at page 4, line 50 ¶ | skipping to change at page 4, line 50 ¶ | |||
| When OAuth is integrated into SASL the high-level steps are as | When OAuth is integrated into SASL the high-level steps are as | |||
| follows: | 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 | |||
| owner (as shown), or preferably indirectly via the authorization | owner (as shown), or preferably indirectly via the authorization | |||
| server as an intermediary. | server as an intermediary. | |||
| (B) The client receives an authorization grant which is a | (B) The client receives an authorization grant which is a | |||
| credential representing the resource owner's authorization, | credential representing the resource owner's authorization, | |||
| expressed using one of four grant types defined in this | expressed using one of the grant types defined in [RFC6749] or | |||
| specification or using an extension grant type. The authorization | [RFC5849] or using an extension grant type. The authorization | |||
| grant type depends on the method used by the client to request | grant type depends on the method used by the client to request | |||
| authorization and the types supported by the authorization server. | authorization and the types supported by the authorization server. | |||
| (C) The client requests an access token by authenticating with the | (C) The client requests an access token by authenticating with the | |||
| authorization server and presenting the authorization grant. | authorization server and presenting the authorization grant. | |||
| (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. | |||
| skipping to change at page 7, line 7 ¶ | skipping to change at page 7, line 7 ¶ | |||
| 1. Client sends an invalid initial client response. | 1. Client sends an invalid initial client response. | |||
| 2. Server responds with an error message. | 2. Server responds with an error message. | |||
| 3. Client sends a dummy client response. | 3. Client sends a dummy client response. | |||
| 4. Server fails the authentication. | 4. 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 GS2 [RFC5801] header followed by a key/value | |||
| response includes a gs2-header as defined in GS2 [RFC5801] which is | pair sequence, or may be empty. The gs2-header is defined here for | |||
| defined here as a stub for compatibility with GS2 if a GS2 mechanism | compatibility with GS2 if a GS2 mechanism is formally defined, but | |||
| is formally defined, but this document does not define one. These | this document does not define one. These key/value pairs carry the | |||
| key/value pairs carry the equivalent values from an HTTP context in | equivalent values from an HTTP context in order to be able to | |||
| order to be able to complete an OAuth style HTTP authorization. | complete an OAuth style HTTP authorization. Unknown key/value pairs | |||
| Unknown key/value pairs MUST be ignored by the server. The ABNF | MUST be ignored by the server. The ABNF [RFC5234] syntax is: | |||
| [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 | |||
| gs2-header = ALPHA "," value | ;;gs2-header = See RFC 5801 | |||
| client_resp = gs2-header kvsep 0*kvpair kvsep | client_resp = (gs2-header kvsep 0*kvpair kvsep) / kvsep | |||
| The GS2 | The GS2 header MAY include the user name associated with the resource | |||
| being accessed, the "authzid". It is worth noting that application | ||||
| protocols are allowed to require an authzid, as are specific server | ||||
| implementations. | ||||
| 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 authorization. | an equivalent HTTP OAuth authorization. | |||
| user (REQUIRED): Contains the user name being authenticated. The | ||||
| server MAY use this as a routing or database lookup hint. The | ||||
| server MUST NOT use this as authoritative, the user name MUST | ||||
| be asserted by the OAuth credential. | ||||
| 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. This is reserved for future use, the | qs: The HTTP query string. This is reserved for future use, the | |||
| client SHOUD NOT send it, and has the default value of "". | client SHOUD NOT send it, and has the default value of "". | |||
| For OAuth token types that use keyed message digests the client MUST | For OAuth token types that use keyed message digests the client MUST | |||
| skipping to change at page 9, line 21 ¶ | skipping to change at page 9, line 21 ¶ | |||
| status (REQUIRED): The authorization error code. Valid error | status (REQUIRED): The authorization error code. Valid error | |||
| codes are defined in the IANA "OAuth Extensions Error Registry" | codes are defined in the IANA "OAuth Extensions Error 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 scope value. If a scope is specified then a | are required, or a scope value. If a scope is specified then a | |||
| single scope is preferred, use of a space separated list of | single scope is preferred, use of a space separated list of | |||
| scopes is NOT RECOMMENDED. | scopes is NOT RECOMMENDED. | |||
| oauth-configuration (OPTIONAL): The URL for for a document | ||||
| following the OpenID Provider Configuration Information schema | ||||
| as described in OpenID Connect Discovery [OpenID.Discovery] | ||||
| section 3 that is appropriate for the user. This document MUST | ||||
| have all OAuth related data elements populated. The server MAY | ||||
| return different URLs for users in different domains and the | ||||
| client SHOULD NOT cache a single returned value and assume it | ||||
| applies for all users/domains that the server suports. | ||||
| If the resource server provides a scope then the client MUST always | If the resource server provides a scope then the client MUST always | |||
| request scoped tokens from the token endpoint. If the resource | request scoped tokens from the token endpoint. If the resource | |||
| server provides no scope to the client then the client SHOULD presume | server provides no scope to the client then the client SHOULD presume | |||
| an empty scope (unscoped token) is needed. | an empty scope (unscoped token) is needed. | |||
| 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 | |||
| skipping to change at page 10, line 10 ¶ | skipping to change at page 10, line 21 ¶ | |||
| 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 | |||
| access limited to a specific directory. | 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 | n,a=user@example.com,^A | |||
| host=example.com^A | host=example.com^A | |||
| user=user@example.com^A | ||||
| port=143^A | port=143^A | |||
| auth=OAuth realm="Example", | auth=OAuth realm="Example", | |||
| oauth_consumer_key="9djdj82h48djs9d2", | oauth_consumer_key="9djdj82h48djs9d2", | |||
| oauth_token="kkk9d7dh3k39sjv7", | oauth_token="kkk9d7dh3k39sjv7", | |||
| oauth_signature_method="HMAC-SHA1", | oauth_signature_method="HMAC-SHA1", | |||
| oauth_timestamp="137131201", | oauth_timestamp="137131201", | |||
| oauth_nonce="7d8f3e4a", | oauth_nonce="7d8f3e4a", | |||
| oauth_signature="Tm90IGEgcmVhbCBzaWduYXR1cmU%3D"^A^A | oauth_signature="Tm90IGEgcmVhbCBzaWduYXR1cmU"^A^A | |||
| The signature base string would be constructed per the OAuth 1.0 | The signature base string would be constructed per the OAuth 1.0 | |||
| specification [RFC5849] with the following things noted: | specification [RFC5849] with the following things noted: | |||
| o The method value is defaulted to POST. | o The method value is defaulted to POST. | |||
| o The scheme defaults to be "http", and any port number other than | o The scheme defaults to be "http", and any port number other than | |||
| 80 is included. | 80 is included. | |||
| o The path defaults to "/". | o The path defaults to "/". | |||
| skipping to change at page 11, line 11 ¶ | skipping to change at page 11, line 20 ¶ | |||
| 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". | |||
| 4.1. Successful Bearer Token Exchange | 4.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 and the underlying | Note that line breaks are inserted for readability and the underlying | |||
| TLS establishment is not shown either. | 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 biwBdXNlcj11c2VyQGV4YW1wbGUuY29tAWhvc3Q9c2Vyd | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2 | |||
| mVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjN | VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDRxb | |||
| SbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | VRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | |||
| 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: | |||
| n,^Auser=user@example.com^Ahost=server.example.com^Aport=143^A | n,a=user@example.com,^Ahost=server.example.com^Aport=143^A | |||
| auth=Bearer vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==^A^A | auth=Bearer vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==^A^A | |||
| The same credential used in an SMTP exchange is shown below. Note | The same credential used in an SMTP exchange is shown below. Note | |||
| that line breaks are inserted for readability, and that the SMTP | 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: t1 AUTHENTICATE OAUTHBEARER biwBdXNlcj11c2VyQGV4YW1wbGUuY29tAWhvc | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c | |||
| 3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWR | 2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDR | |||
| mdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | xbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | |||
| S: 235 Authentication successful. | S: 235 Authentication successful. | |||
| [connection continues...] | [connection continues...] | |||
| 4.2. Failed Exchange | 4.2. Successful OAuth 1.0a Token Exchange | |||
| This example shows a successful OAuth 1.0a token exchange. Note that | ||||
| line breaks are inserted for readability and the underlying TLS | ||||
| establishment is not shown. Signature computation is discussed in | ||||
| Section 3.3. | ||||
| S: * OK IMAP4rev1 Server Ready | ||||
| C: t0 CAPABILITY | ||||
| S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER OAUTH10A SASL-IR | ||||
| S: t0 OK Completed | ||||
| C: t1 AUTHENTICATE OAUTH10A bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9ZXhhb | ||||
| XBsZS5jb20BcG9ydD0xNDMBYXV0aD1PQXV0aCByZWFsbT0iRXhhbXBsZSIsb2F1 | ||||
| dGhfY29uc3VtZXJfa2V5PSI5ZGpkajgyaDQ4ZGpzOWQyIixvYXV0aF90b2tlbj0 | ||||
| ia2trOWQ3ZGgzazM5c2p2NyIsb2F1dGhfc2lnbmF0dXJlX21ldGhvZD0iSE1BQy | ||||
| 1TSEExIixvYXV0aF90aW1lc3RhbXA9IjEzNzEzMTIwMSIsb2F1dGhfbm9uY2U9I | ||||
| jdkOGYzZTRhIixvYXV0aF9zaWduYXR1cmU9IlRtOTBJR0VnY21WaGJDQnphV2R1 | ||||
| WVhSMWNtVSUzRCIBAQ== | ||||
| S: t1 OK SASL authentication succeeded | ||||
| As required by IMAP [RFC3501], the payloads are base64-encoded. The | ||||
| decoded initial client response (with %x01 represented as ^A and | ||||
| lines wrapped for readability) is: | ||||
| n,a=user@example.com,^A | ||||
| host=example.com^A | ||||
| port=143^A | ||||
| auth=OAuth realm="Example", | ||||
| oauth_consumer_key="9djdj82h48djs9d2", | ||||
| oauth_token="kkk9d7dh3k39sjv7", | ||||
| oauth_signature_method="HMAC-SHA1", | ||||
| oauth_timestamp="137131201", | ||||
| oauth_nonce="7d8f3e4a", | ||||
| oauth_signature="SSdtIGEgbGl0dGxlIHRlYSBwb3Qu"^A^A | ||||
| 4.3. Failed Exchange | ||||
| This example shows a failed exchange because of the empty | This example shows a failed exchange because of the empty | |||
| Authorization header, which is how a client can query for the needed | Authorization header, which is how a client can query for the needed | |||
| scope. Note that line breaks are inserted for readability. | scope. Note that line breaks are inserted for readability. | |||
| S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR IMAP4rev1 Server | S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR IMAP4rev1 Server | |||
| Ready | Ready | |||
| S: t0 OK Completed | S: t0 OK Completed | |||
| C: t1 AUTHENTICATE OAUTHBEARER biwBdXNlcj11c2VyQGV4YW1wbGUuY29tAWhvc3Q9c2Vyd | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAW | |||
| mVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AWNiZGF0YT0BAQ== | hvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AQE= | |||
| S: + ewoic3RhdHVzIjoiNDAxIgoic2NvcGUiOiJleGFtcGxlX3Njb3BlIgp9 | S: + eyJzdGF0dXMiOiI0MDEiLCJzY29wZSI6ImV4YW1wbGVfc2NvcGUiLCJv | |||
| C: + AQ== | cGVuaWQtY29uZmlndXJhdGlvbiI6Imh0dHBzOi8vZXhhbXBsZS5jb20v | |||
| S: t1 NO SASL authentication failed | LndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24ifQ== | |||
| C: + AQ== | ||||
| S: t1 NO SASL authentication failed | ||||
| The decoded initial client response is: | The decoded initial client response is: | |||
| n,^Auser=user@example.com^Ahost=server.example.com^A | n,a=user@example.com,^Ahost=server.example.com^A | |||
| port=143^Aauth=^A^A | port=143^Aauth=^A^A | |||
| The decoded server error response is: | The decoded server error response is: | |||
| { | { | |||
| "status":"401", | "status":"401", | |||
| "scope":"example_scope" | "scope":"example_scope", | |||
| } | "openid-configuration":"https://example.com/.well-known/openid-configuration" | |||
| } | ||||
| The client responds with the required dummy response. | The client responds with the required dummy response. | |||
| 4.3. SMTP Example of a Failed Negotiation | 4.4. 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 biwBdXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJl | C: AUTH OAUTHBEARER bix1c2VyPXNvbWV1c2VyQGV4YW1wbGUuY29tLAFhdXRoPUJlYXJl | |||
| ciB2RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ== | ciB2RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ== | |||
| 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. | |||
| 5. Security Considerations | 5. 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. As shown in | and the security properties of these profiles vary. As shown in | |||
| Figure 1 this specification is aimed to be integrated into a larger | Figure 1 this specification is aimed to be integrated into a larger | |||
| OAuth deployment. Application developers therefore need to | OAuth deployment. Application developers therefore need to | |||
| skipping to change at page 14, line 19 ¶ | skipping to change at page 15, line 40 ¶ | |||
| problem with this mechanism per se. Resource servers may | problem with this mechanism per se. Resource servers may | |||
| unilaterally disconnect clients in accordance with the application | unilaterally disconnect clients in accordance with the application | |||
| protocol. | protocol. | |||
| Access tokens have a lifetime. | Access tokens have a lifetime. | |||
| Reducing the lifetime of an access token provides security | Reducing the lifetime of an access token provides security | |||
| benefits and OAuth 2.0 introduces refresh tokens to obtain new | benefits and OAuth 2.0 introduces refresh tokens to obtain new | |||
| access token on the fly without any need for a human interaction. | access token on the fly without any need for a human interaction. | |||
| Additionally, a previously obtained access token may be revoked or | Additionally, a previously obtained access token may be revoked or | |||
| rendered invalid at any time by the authorization server. The | rendered invalid at any time. The client may request a new access | |||
| client may request a new access token for each connection to a | token for each connection to a resource server, but it SHOULD | |||
| resource server, but it should cache and re-use valid credentials. | cache and re-use valid credentials. | |||
| 6. Internationalization Considerations | 6. 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 15, line 28 ¶ | skipping to change at page 16, line 49 ¶ | |||
| 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 | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [OpenID.Discovery] | ||||
| Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | ||||
| Connect Discovery 1.0", July 2011. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [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 | |||
| skipping to change at page 16, line 23 ¶ | skipping to change at page 17, line 44 ¶ | |||
| [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC | [RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework", RFC | |||
| 6749, October 2012. | 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. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [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-18 (work in | (JWT)", draft-ietf-oauth-json-web-token-25 (work in | |||
| progress), March 2014. | progress), July 2014. | |||
| [I-D.ietf-oauth-v2-http-mac] | [I-D.ietf-oauth-v2-http-mac] | |||
| Richer, J., Mills, W., Tschofenig, H., and P. Hunt, "OAuth | Richer, J., Mills, W., Tschofenig, H., and P. Hunt, "OAuth | |||
| 2.0 Message Authentication Code (MAC) Tokens", draft-ietf- | 2.0 Message Authentication Code (MAC) Tokens", draft-ietf- | |||
| oauth-v2-http-mac-05 (work in progress), January 2014. | oauth-v2-http-mac-05 (work in progress), January 2014. | |||
| [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 17, line 20 ¶ | skipping to change at page 18, line 40 ¶ | |||
| Williams, and Matt Miller. | Williams, and Matt Miller. | |||
| 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 supervising area | Tom Yu, Shawn Emery, Josh Howlett, Sam Hartman. The supervising area | |||
| director was Stephen Farrell. | director 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 ]] | |||
| -14 | -15 | |||
| o Last call feedack on the GS2 stuff being ripped out completely. | ||||
| o Removed the "user" parameter and put stuff back into the | ||||
| gs2-header. Call out that the authzid goes in the gs2-header with | ||||
| some prose about when it might be required. Very comparable to | ||||
| -10. | ||||
| o Added an OAuth 1.0A example explicitly. | ||||
| -14 | ||||
| o Last call feedack on RFC citations needed, small editorial. | o Last call feedack on RFC citations needed, small editorial. | |||
| o Added the "user" parameter back, which was pulled when we started | o Added the "user" parameter back, which was pulled when we started | |||
| down the GS2 path. Same language as -03. | down the GS2 path. Same language as -03. | |||
| o Defined a stub GS2 header to make sure that when the GS2 bride is | o Defined a stub GS2 header to make sure that when the GS2 bride is | |||
| defined for this that nothing will break when it actually starts | defined for this that nothing will break when it actually starts | |||
| to get populated. | to get populated. | |||
| -13 | -13 | |||
| skipping to change at page 19, line 45 ¶ | skipping to change at page 21, line 28 ¶ | |||
| -00 | -00 | |||
| o Renamed draft into proper IETF naming format now that it's | o Renamed draft into proper IETF naming format now that it's | |||
| adopted. | adopted. | |||
| o Minor fixes. | o Minor fixes. | |||
| Authors' Addresses | Authors' Addresses | |||
| William Mills | William Mills | |||
| Yahoo! Inc. | Skype | |||
| Email: wmills_92105@yahoo.com | Email: wmills_92105@yahoo.com | |||
| Tim Showalter | Tim Showalter | |||
| Email: tjs@psaux.com | Email: tjs@psaux.com | |||
| Hannes Tschofenig | Hannes Tschofenig | |||
| ARM Ltd. | ARM Ltd. | |||
| 110 Fulbourn Rd | 110 Fulbourn Rd | |||
| Cambridge CB1 9NJ | Cambridge CB1 9NJ | |||
| Great Britain | Great Britain | |||
| Email: Hannes.tschofenig@gmx.net | Email: Hannes.tschofenig@gmx.net | |||
| URI: http://www.tschofenig.priv.at | URI: http://www.tschofenig.priv.at | |||
| End of changes. 33 change blocks. | ||||
| 74 lines changed or deleted | 134 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/ | ||||