draft-ietf-kitten-sasl-oauth-22.txt | draft-ietf-kitten-sasl-oauth-23.txt | |||
---|---|---|---|---|
KITTEN W. Mills | KITTEN W. Mills | |||
Internet-Draft Microsoft | Internet-Draft Microsoft | |||
Intended status: Standards Track T. Showalter | Intended status: Standards Track T. Showalter | |||
Expires: November 1, 2015 | Expires: November 30, 2015 | |||
H. Tschofenig | H. Tschofenig | |||
ARM Ltd. | ARM Ltd. | |||
April 30, 2015 | May 29, 2015 | |||
A set of SASL Mechanisms for OAuth | A set of SASL Mechanisms for OAuth | |||
draft-ietf-kitten-sasl-oauth-22.txt | draft-ietf-kitten-sasl-oauth-23.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 November 1, 2015. | This Internet-Draft will expire on November 30, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 31 | skipping to change at page 2, line 31 | |||
Table of Contents | Table of Contents | |||
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 . . . . . . . . 9 | 3.2.1. OAuth Identifiers in the SASL Context . . . . . . . . 9 | |||
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 . . . . . . . . 10 | 3.2.3. Completing an Error Message Sequence . . . . . . . . 11 | |||
3.3. OAuth Access Token Types using Keyed Message Digests . . 11 | 3.3. OAuth Access Token Types using Keyed Message Digests . . 11 | |||
4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1. Successful Bearer Token Exchange . . . . . . . . . . . . 12 | 4.1. Successful Bearer Token Exchange . . . . . . . . . . . . 12 | |||
4.2. Successful OAuth 1.0a Token Exchange . . . . . . . . . . 13 | 4.2. Successful OAuth 1.0a Token Exchange . . . . . . . . . . 13 | |||
4.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 14 | 4.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 14 | |||
4.4. SMTP Example of a Failed Negotiation . . . . . . . . . . 15 | 4.4. SMTP Example of a Failed Negotiation . . . . . . . . . . 15 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | |||
6. Internationalization Considerations . . . . . . . . . . . . . 17 | 6. Internationalization Considerations . . . . . . . . . . . . . 17 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 17 | 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 18 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 18 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 18 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 19 | 8.2. Informative References . . . . . . . . . . . . . . . . . 19 | |||
Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . 20 | Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . 20 | |||
Appendix B. Document History . . . . . . . . . . . . . . . . . . 20 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 20 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
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 3, line 31 | skipping to change at page 3, line 31 | |||
[RFC5849]. | [RFC5849]. | |||
The main use cases for OAuth 2.0 and OAuth 1.0a have so far focused | The main use cases for OAuth 2.0 and OAuth 1.0a have so far focused | |||
on an HTTP-based [RFC7230] environment only. This document | on an HTTP-based [RFC7230] environment only. This document | |||
integrates OAuth 1.0a and OAuth 2.0 into non-HTTP-based applications | integrates OAuth 1.0a and OAuth 2.0 into non-HTTP-based applications | |||
using the integration into SASL. Hence, this document takes | using the integration into SASL. Hence, this document takes | |||
advantage of the OAuth protocol and its deployment base to provide a | advantage of the OAuth protocol and its deployment base to provide a | |||
way to use the Simple Authentication and Security Layer (SASL) | way to use the Simple Authentication and Security Layer (SASL) | |||
[RFC4422] to gain access to resources when using non-HTTP-based | [RFC4422] to gain access to resources when using non-HTTP-based | |||
protocols, such as the Internet Message Access Protocol (IMAP) | protocols, such as the Internet Message Access Protocol (IMAP) | |||
[RFC3501] and the Simple Mail Transfer Protocol (SMTP) [RFC5321], | [RFC3501] and the Simple Mail Transfer Protocol (SMTP) [RFC5321]. | |||
which is what this memo uses in the examples. | This document gives examples of use in IMAP and SMTP. | |||
To illustrate the impact of integrating this specification into an | To illustrate the impact of integrating this specification into an | |||
OAuth-enabled application environment, Figure 1 shows the abstract | OAuth-enabled application environment, Figure 1 shows the abstract | |||
message flow of OAuth 2.0 [RFC6749]. As indicated in the figure, | message flow of OAuth 2.0 [RFC6749]. As indicated in the figure, | |||
this document impacts the exchange of messages (E) and (F) since SASL | this document impacts the exchange of messages (E) and (F) since SASL | |||
is used for interaction between the client and the resource server | is used for interaction between the client and the resource server | |||
instead of HTTP. | instead of HTTP. | |||
----+ | ----+ | |||
+--------+ +---------------+ | | +--------+ +---------------+ | | |||
skipping to change at page 4, line 45 | skipping to change at page 4, line 45 | |||
existing authentication mechanisms and allows old protocols to make | existing authentication mechanisms and allows old protocols to make | |||
use of new authentication mechanisms. The framework also provides a | use of new authentication mechanisms. The framework also provides a | |||
protocol for securing subsequent exchanges within a data security | protocol for securing subsequent exchanges within a data security | |||
layer. | layer. | |||
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 indirectly via the authorization server as an | |||
server as an intermediary. | 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 the grant types defined in [RFC6749] or | expressed using one of the grant types defined in [RFC6749] or | |||
[RFC5849] 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. | |||
skipping to change at page 6, line 8 | skipping to change at page 6, line 8 | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC2119]. | [RFC2119]. | |||
The reader is assumed to be familiar with the terms used in the OAuth | The reader is assumed to be familiar with the terms used in the OAuth | |||
2.0 specification [RFC6749] and SASL [RFC4422]. | 2.0 specification [RFC6749] and SASL [RFC4422]. | |||
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, see | Note that the IMAP SASL specification requires base64 encoding, as | |||
Section 4 of [RFC4648], not this memo. | specified in Section 4 of [RFC4648]. | |||
3. OAuth SASL Mechanism Specifications | 3. OAuth SASL Mechanism Specifications | |||
SASL is used as an authentication framework in a variety of | SASL is used as an authentication framework in a variety of | |||
application layer protocols. This document defines the following | application layer protocols. This document defines the following | |||
SASL mechanisms for usage with OAuth: | SASL mechanisms for usage with OAuth: | |||
OAUTHBEARER: OAuth 2.0 bearer tokens, as described in [RFC6750]. | OAUTHBEARER: OAuth 2.0 bearer tokens, as described in [RFC6750]. | |||
RFC 6750 uses Transport Layer Security (TLS) [RFC5246] to | RFC 6750 uses Transport Layer Security (TLS) [RFC5246] to | |||
secure the protocol interaction between the client and the | secure the protocol interaction between the client and the | |||
resource server. | resource server. | |||
OAUTH10A: OAuth 1.0a MAC tokens (using the HMAC-SHA1 keyed | OAUTH10A: OAuth 1.0a MAC tokens (using the HMAC-SHA1 keyed | |||
message digest), as described in Section 3.4.2 of [RFC5849]. | message digest), as described in Section 3.4.2 of [RFC5849]. | |||
New extensions may be defined to add additional OAuth Access Token | New extensions may be defined to add additional OAuth Access Token | |||
Types. Such a new SASL OAuth mechanism can be added by simply | Types. Such a new SASL OAuth mechanism can be added by registering | |||
registering the new name(s) and citing this specification for the | the new name(s) with IANA in the SASL Mechanisms registry and citing | |||
further definition. | this specification for the further definition. | |||
SASL mechanisms using this document as their definition do not | SASL mechanisms using this document as their definition do not | |||
provide a data security layer; that is, they cannot provide integrity | provide a data security layer; that is, they cannot provide integrity | |||
or confidentiality protection for application messages after the | or confidentiality protection for application messages after the | |||
initial authentication. If such protection is needed, TLS or some | initial authentication. If such protection is needed, TLS or some | |||
similar solution should be used. Additionally, for the two | similar solution should be used. Additionally, for the two | |||
mechanisms specified in this document, TLS MUST be used for | mechanisms specified in this document, TLS MUST be used for | |||
OAUTHBEARER to protect the bearer token; for OAUTH10A the use of TLS | OAUTHBEARER to protect the bearer token; for OAUTH10A the use of TLS | |||
is RECOMMENDED. | is RECOMMENDED. | |||
skipping to change at page 8, line 12 | skipping to change at page 8, line 12 | |||
The following keys and corresponding values are defined in the client | The following keys and corresponding values are defined in the client | |||
response: | response: | |||
auth (REQUIRED): The payload that would be in the HTTP | auth (REQUIRED): The payload that would be in the HTTP | |||
Authorization header if this OAuth exchange was being carried | Authorization header if this OAuth exchange was being carried | |||
out over HTTP. | out over HTTP. | |||
host: Contains the host name to which the client connected. In | host: Contains the host name to which the client connected. In | |||
an HTTP context this is the value of the HTTP Host header. | an HTTP context this is the value of the HTTP Host header. | |||
port: Contains the port number represented as a decimal positive | port: Contains the destination port that the client connected to, | |||
integer string without leading zeros to which the client | represented as a decimal positive integer string without | |||
connected. | leading zeros. | |||
For OAuth token types such as OAuth 1.0a that use keyed message | For OAuth token types such as OAuth 1.0a that use keyed message | |||
digests the client MUST send host and port number key/values, and the | digests the client MUST send host and port number key/values, and the | |||
server MUST fail an authorization request requiring keyed message | server MUST fail an authorization request requiring keyed message | |||
digests that are not accompanied by host and port values. In OAuth | digests that are not accompanied by host and port values. In OAuth | |||
1.0a for example, the so-called "signature base string calculation" | 1.0a for example, the so-called "signature base string calculation" | |||
includes the reconstructed HTTP URL. | includes the reconstructed HTTP URL. | |||
3.1.1. Reserved Key/Values | 3.1.1. Reserved Key/Values | |||
skipping to change at page 8, line 37 | skipping to change at page 8, line 37 | |||
usage of these in the SASL context and extend this specification. | usage of these in the SASL context and extend this specification. | |||
For OAuth Access Token Types that include a keyed message digest of | For OAuth Access Token Types that include a keyed message digest of | |||
the request the default values MUST be used unless explicit values | the request the default values MUST be used unless explicit values | |||
are provided in the client response. The following key values are | are provided in the client response. The following key values are | |||
reserved for future use: | reserved for future use: | |||
mthd (RESERVED): HTTP method, the default value is "POST". | mthd (RESERVED): HTTP method, the default 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 the empty | |||
string (""). | ||||
qs (RESERVED): The HTTP query string, the default value is "". | qs (RESERVED): The HTTP query string, the default value is the | |||
empty string (""). | ||||
3.2. Server's Response | 3.2. Server's Response | |||
The server validates the response according the specification for the | The server validates the response according to the specification for | |||
OAuth Access Token Types used. If the OAuth Access Token Type | the OAuth Access Token Types used. If the OAuth Access Token Type | |||
utilizes a keyed message digest of the request parameters then the | utilizes a keyed message digest of the request parameters then the | |||
client must provide a client response that satisfies the data | client must provide a client response that satisfies the data | |||
requirements for the scheme in use. | requirements for the scheme in use. | |||
The server fully validates the client response before generating a | The server fully validates the client response before generating a | |||
server response; this will necessarily include the validation steps | server response; this will necessarily include the validation steps | |||
listed in the specification for the OAuth Access Token Type used. | listed in the specification for the OAuth Access Token Type used. | |||
However, additional validation steps may be needed, depending on the | However, additional validation steps may be needed, depending on the | |||
particular application protocol making use of SASL. In particular, | particular application protocol making use of SASL. In particular, | |||
values included as kvpairs in the client response (such as host and | values included as kvpairs in the client response (such as host and | |||
port) which correspond to values known to the application by some | port) which correspond to values known to the application server by | |||
other mechanism (such as an application protocol data unit or pre- | some other mechanism (such as an application protocol data unit or | |||
configured values) MUST be validated to match between the initial | pre-configured values) MUST be validated to match between the initial | |||
client response and the the other source(s) of such information. As | client response and the the other source(s) of such information. As | |||
a concrete example, when SASL is used over IMAP to an IMAP server for | a concrete example, when SASL is used over IMAP to an IMAP server for | |||
a single domain the hostname can be vaialble via configuration; this | a single domain the hostname can be available via configuration; this | |||
hostname must be validated to match the value sent in the 'host' | hostname must be validated to match the value sent in the 'host' | |||
kvpair. | kvpair. | |||
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 authzid is specified by the | resource. Note that the semantics of the authzid is specified by the | |||
skipping to change at page 10, line 8 | skipping to change at page 10, line 8 | |||
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 "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 omitted which implies that unscoped | service. This may be omitted which implies that unscoped | |||
tokens are required. If a scope is specified then a single | tokens are required. If a scope is specified then a single | |||
scope is preferred, use of a space separated list of scopes is | scope is preferred. At the time this document was written | |||
NOT RECOMMENDED. | there are several implementations that do not properly support | |||
space separated lists of scopes, so the use of a space | ||||
separated list of scopes is NOT RECOMMENDED. | ||||
openid-configuration (OPTIONAL): The URL for a document following | openid-configuration (OPTIONAL): The URL for a document following | |||
the OpenID Provider Configuration Information schema as | the OpenID Provider Configuration Information schema as | |||
described in OpenID Connect Discovery (OIDCD) | described in OpenID Connect Discovery (OIDCD) | |||
[OpenID.Discovery] section 3 that is appropriate for the user. | [OpenID.Discovery] section 3 that is appropriate for the user. | |||
As specified in OIDCD this will have the "https" URL scheme. | As specified in OIDCD this will have the "https" URL scheme. | |||
This document MUST have all OAuth related data elements | This document MUST have all OAuth related data elements | |||
populated. The server MAY return different URLs for users in | populated. The server MAY return different URLs for users in | |||
different domains and the client SHOULD NOT cache a single | different domains and the client SHOULD NOT cache a single | |||
returned value and assume it applies for all users/domains that | returned value and assume it applies for all users/domains that | |||
skipping to change at page 12, line 30 | skipping to change at page 12, line 35 | |||
then STARTTLS MUST be used as TLS is required in the Bearer Token | then STARTTLS MUST be used as TLS is required in the Bearer Token | |||
specification. | specification. | |||
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 in | This example shows a successful OAuth 2.0 bearer token exchange in | |||
IMAP. Note that line breaks are inserted for readability. The | IMAP. Note that line breaks are inserted for readability. | |||
underlying TLS establishment is not shown but is required for using | ||||
Bearer Tokens per that specification. | ||||
[Initial connection and TLS establishment...] | ||||
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 AUTH OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vy | C: t1 AUTH OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vy | |||
dmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmd | dmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmd | |||
DRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | DRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | |||
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,a=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. Again | ||||
The same credential used in an SMTP exchange is shown below. Note | this example assumes that TLS is already established per the Bearer | |||
that line breaks are inserted for readability, and that the SMTP | Token specification requirements. | |||
protocol terminates lines with CR and LF characters (ASCII values | ||||
0x0D and 0x0A), these are not displayed explicitly in the example. | ||||
Again this example assumes that TLS is already established per the | ||||
Bearer Token specification requirements. | ||||
[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-STARTTLS | S: 250-STARTTLS | |||
S: 250 PIPELINING | S: 250 PIPELINING | |||
[Negotiate TLS...] | [Negotiate TLS...] | |||
C: t1 AUTH OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vy | C: t1 AUTH OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vy | |||
dmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmd | dmVyLmV4YW1wbGUuY29tAXBvcnQ9NTg3AWF1dGg9QmVhcmVyIHZGOWRmd | |||
DRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | DRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | |||
S: 235 Authentication successful. | S: 235 Authentication successful. | |||
[connection continues...] | [connection continues...] | |||
The decoded initial client response is: | ||||
n,a=user@example.com,^Ahost=server.example.com^Aport=587^A | ||||
auth=Bearer vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==^A^A | ||||
4.2. Successful OAuth 1.0a Token Exchange | 4.2. Successful OAuth 1.0a Token Exchange | |||
This IMAP example shows a successful OAuth 1.0a token exchange. Note | This IMAP example shows a successful OAuth 1.0a token exchange. Note | |||
that line breaks are inserted for readability. This example assumes | that line breaks are inserted for readability. This example assumes | |||
that TLS is already established. Signature computation is discussed | that TLS is already established. Signature computation is discussed | |||
in Section 3.3. | in Section 3.3. | |||
S: * OK IMAP4rev1 Server Ready | S: * OK IMAP4rev1 Server Ready | |||
C: t0 CAPABILITY | C: t0 CAPABILITY | |||
S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER OAUTH10A SASL-IR | S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER OAUTH10A SASL-IR | |||
skipping to change at page 15, line 20 | skipping to change at page 15, line 22 | |||
hvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AQE= | hvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AQE= | |||
S: + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxl | S: + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxl | |||
X3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4 | X3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4 | |||
YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u | YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u | |||
In0= | In0= | |||
C: * | C: * | |||
S: t1 NO SASL authentication failed | S: t1 NO SASL authentication failed | |||
4.4. 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. TLS | |||
Note that line breaks are inserted for readability, and that the SMTP | negotiation is not shown but as noted above it is required for the | |||
protocol terminates lines with CR and LF characters (ASCII values | use of Bearer Tokens. | |||
0x0D and 0x0A), these are not displayed explicitly in the example. | ||||
TLS negotiation is not shown but as noted above it is required for | ||||
the use of Bearer Tokens. | ||||
[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 | |||
[Negotiate TLS...] | ||||
C: AUTH OAUTHBEARER bix1c2VyPXNvbWV1c2VyQGV4YW1wbGUuY29tLAFhdXRoPUJlYXJl | C: AUTH OAUTHBEARER bix1c2VyPXNvbWV1c2VyQGV4YW1wbGUuY29tLAFhdXRoPUJlYXJl | |||
ciB2RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ== | ciB2RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ== | |||
S: 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NoZW1lcyI6ImJlYXJlciBtYWMiL | S: 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NoZW1lcyI6ImJlYXJlciBtYWMiL | |||
CJzY29wZSI6Imh0dHBzOi8vbWFpbC5nb29nbGUuY29tLyJ9 | CJzY29wZSI6Imh0dHBzOi8vbWFpbC5leGFtcGxlLmNvbS8ifQ== | |||
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 initial client response is: | ||||
n,user=someuser@example.com,^A | ||||
auth=Bearer vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg==^A^A | ||||
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. | |||
{ | ||||
"status":"invalid_token", | ||||
"schemes":"bearer mac", | ||||
"scope":"https://mail.example.com/" | ||||
} | ||||
5. Security Considerations | 5. Security Considerations | |||
OAuth 1.0a and OAuth 2 allow for a variety of deployment scenarios, | OAuth 1.0a and OAuth 2 allow 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 | |||
understand their security requirements based on a threat assessment | understand their security requirements based on a threat assessment | |||
before selecting a specific SASL OAuth mechanism. For OAuth 2.0 a | before selecting a specific SASL OAuth mechanism. For OAuth 2.0 a | |||
detailed security document [RFC6819] provides guidance to select | detailed security document [RFC6819] provides guidance to select | |||
those OAuth 2.0 components that help to mitigate threats for a given | those OAuth 2.0 components that help to mitigate threats for a given | |||
skipping to change at page 16, line 47 | skipping to change at page 17, line 8 | |||
Additionally, the following aspects are worth pointing out: | Additionally, the following aspects are worth pointing out: | |||
An access token is not equivalent to the user's long term password. | An access token is not equivalent to the user's long term password. | |||
Care has to be taken when these OAuth credentials are used for | Care has to be taken when these OAuth credentials are used for | |||
actions like changing passwords (as it is possible with some | actions like changing passwords (as it is possible with some | |||
protocols, e.g., XMPP [RFC6120]). The resource server should | protocols, e.g., XMPP [RFC6120]). The resource server should | |||
ensure that actions taken in the authenticated channel are | ensure that actions taken in the authenticated channel are | |||
appropriate to the strength of the presented credential. | appropriate to the strength of the presented credential. | |||
Lifetime of the appliation sessions. | Lifetime of the application sessions. | |||
It is possible that SASL will be authenticating a connection and | It is possible that SASL will be used to authenticate a connection | |||
the life of that connection may outlast the life of the access | and the life of that connection may outlast the life of the access | |||
token used to establish it. This is a common problem in | token used to establish it. This is a common problem in | |||
application protocols where connections are long-lived, and not a | application protocols where connections are long-lived, and not a | |||
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 | |||
skipping to change at page 18, line 29 | skipping to change at page 18, line 44 | |||
Intended usage: common | Intended usage: common | |||
Owner/Change controller: the IESG | Owner/Change controller: the IESG | |||
Note: None | Note: None | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[I-D.ietf-oauth-dyn-reg] | ||||
Richer, J., Jones, M., Bradley, J., Machulak, M., and P. | ||||
Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | ||||
draft-ietf-oauth-dyn-reg-27 (work in progress), March | ||||
2015. | ||||
[OpenID.Core] | [OpenID.Core] | |||
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | |||
C. Mortimore, "OpenID Connect Core 1.0", February 2014. | C. Mortimore, "OpenID Connect Core 1.0", February 2014. | |||
[OpenID.Discovery] | [OpenID.Discovery] | |||
Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | |||
Connect Discovery 1.0", July 2011. | 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. | |||
skipping to change at page 19, line 24 | skipping to change at page 19, line 47 | |||
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. | |||
[RFC7159] Bray, T., "The JavaScript Object Notation (JSON) Data | [RFC7159] Bray, T., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", RFC 7159, March 2014. | Interchange Format", RFC 7159, March 2014. | |||
8.2. Informative References | 8.2. Informative References | |||
[I-D.ietf-oauth-dyn-reg] | ||||
Richer, J., Jones, M., Bradley, J., Machulak, M., and P. | ||||
Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | ||||
draft-ietf-oauth-dyn-reg-27 (work in progress), March | ||||
2015. | ||||
[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-32 (work in | (JWT)", draft-ietf-oauth-json-web-token-32 (work in | |||
progress), December 2014. | progress), December 2014. | |||
[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. | |||
[RFC4959] Siemborski, R. and A. Gulbrandsen, "IMAP Extension for | [RFC4959] Siemborski, R. and A. Gulbrandsen, "IMAP Extension for | |||
Simple Authentication and Security Layer (SASL) Initial | Simple Authentication and Security Layer (SASL) Initial | |||
skipping to change at page 20, line 27 | skipping to change at page 20, line 44 | |||
Williams, Matt Miller, and Benjamin Kaduk. | Williams, Matt Miller, and Benjamin Kaduk. | |||
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 ]] | |||
-23 | ||||
o AD feedback from IESG review and comments. | ||||
o Fixed port number in SMTP examples. | ||||
o Minor editorial changes. | ||||
o Dyn-Reg draft becomes normative. | ||||
o Added explicit TLS start indicator in all examples, removed text | ||||
that said we assume that. | ||||
-19 | -19 | |||
o Last call feedback agaiun. | o Last call feedback agaiun. | |||
o Clarified usage of TLS in examples and fixed them some more. | o Clarified usage of TLS in examples and fixed them some more. | |||
Adding reference to RFC4422 and cancellation token and an example | Adding reference to RFC4422 and cancellation token and an example | |||
for that. | for that. | |||
-18 | -18 | |||
End of changes. 33 change blocks. | ||||
56 lines changed or deleted | 81 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |