draft-ietf-kitten-sasl-oauth-04.txt | draft-ietf-kitten-sasl-oauth-05.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: February 21, 2013 | Expires: February 24, 2013 | |||
H. Tschofenig | H. Tschofenig | |||
Nokia Siemens Networks | Nokia Siemens Networks | |||
August 20, 2012 | August 23, 2012 | |||
A SASL and GSS-API Mechanism for OAuth | A set of SASL and GSS-API Mechanisms for OAuth | |||
draft-ietf-kitten-sasl-oauth-04 | draft-ietf-kitten-sasl-oauth-05 | |||
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 OAuth over the | This document defines how an application client uses credentials | |||
Simple Authentication and Security Layer (SASL) or the Generic | obtained via OAuth over the Simple Authentication and Security Layer | |||
Security Service Application Program Interface (GSS-API) to access a | (SASL) or the Generic Security Service Application Program Interface | |||
protected resource at a resource serve. Thereby, it enables schemes | (GSS-API) to access a protected resource at a resource serve. | |||
defined within the OAuth framework for non-HTTP-based application | Thereby, it enables schemes defined within the OAuth framework for | |||
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 | |||
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 February 21, 2013. | This Internet-Draft will expire on February 24, 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 | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. OAuth SASL Mechanism Specification . . . . . . . . . . . . . . 9 | 3. OAuth SASL Mechanism Specification . . . . . . . . . . . . . . 8 | |||
3.1. Initial Client Response . . . . . . . . . . . . . . . . . 9 | 3.1. Initial Client Response . . . . . . . . . . . . . . . . . 9 | |||
3.1.1. Reserved Key/Values in OAUTH . . . . . . . . . . . . . 10 | 3.1.1. Reserved Key/Values . . . . . . . . . . . . . . . . . 10 | |||
3.1.2. Use of the gs2-header . . . . . . . . . . . . . . . . 11 | 3.1.2. Use of the gs2-header . . . . . . . . . . . . . . . . 10 | |||
3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 11 | 3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 10 | |||
3.2.1. Mapping to SASL Identities . . . . . . . . . . . . . . 11 | 3.2.1. Mapping to SASL Identities . . . . . . . . . . . . . . 11 | |||
3.2.2. Server response to failed authentication. . . . . . . 12 | 3.2.2. Server response to failed authentication. . . . . . . 11 | |||
3.2.3. Completing an error message sequence. . . . . . . . . 12 | 3.2.3. Completing an error message sequence. . . . . . . . . 12 | |||
3.3. Use of Signature Type Authorization . . . . . . . . . . . 13 | 3.3. Use of Signature Type Authorization . . . . . . . . . . . 12 | |||
3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 14 | 3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 13 | |||
4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 15 | 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 14 | |||
5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 16 | 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 15 | |||
5.2. OAuth 1.0a Authorization with Channel Binding . . . . . . 17 | 5.2. OAuth 1.0a Authorization with Channel Binding . . . . . . 16 | |||
5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 18 | 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 17 | |||
5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 19 | 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 18 | |||
5.5. SMTP Example of a failed negotiation. . . . . . . . . . . 19 | 5.5. SMTP Example of a failed negotiation. . . . . . . . . . . 18 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 22 | 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 21 | |||
7.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 22 | 7.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 22 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 23 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 23 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 24 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 24 | |||
Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . . 25 | Appendix A. Acknowlegements . . . . . . . . . . . . . . . . . . . 25 | |||
Appendix B. Document History . . . . . . . . . . . . . . . . . . 26 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 26 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 28 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
1. Introduction | 1. Introduction | |||
skipping to change at page 5, line 14 | skipping to change at page 5, line 14 | |||
The resulting framework allows new protocols to reuse existing | The resulting framework allows new protocols to reuse existing | |||
mechanisms and allows old protocols to make use of new mechanisms. | mechanisms and allows old protocols to make use of new mechanisms. | |||
The framework also provides a protocol for securing subsequent | The framework also provides a protocol for securing subsequent | |||
protocol exchanges within a data security layer. | protocol exchanges within a data security layer. | |||
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 a SASL mechanism for OAuth, but 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 a SASL mechanism and a | This means that this document defines both SASL and GSS-API | |||
GSS-API mechanism. Implementers may be interested in either the | mechanisms. Implementers may be interested in either the SASL, the | |||
SASL, the GSS-API, or even both mechanisms. To faciliate these two | GSS-API, or even both mechanisms. To faciliate these two variants, | |||
variants, the description has been split into two parts, one part | the description has been split into two parts, one part that provides | |||
that provides normative references for those interested in the SASL | normative references for those interested in the SASL OAuth mechanism | |||
OAuth mechanism (see Section 3), and a second part for those | (see Section 3), and a second part for those implementers that wish | |||
implementers that wish to implement the GSS-API portion (see | to implement the GSS-API portion (see Section 4). | |||
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 | |||
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 | |||
skipping to change at page 6, line 19 | skipping to change at page 6, line 17 | |||
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.jones-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. | |||
The client need not implement more than one authorization scheme, and | ||||
there are no mandatory to implement schemes. The server MUST | ||||
advertise at least one scheme if the OAUTH mechanism is offered. | ||||
During discovery the client might not find any schemes that it | ||||
supports, an OAuth 2.0 enabled client MAY attempt to fetch a | ||||
credential for a scheme it supports from a discovered OAuth 2.0 | ||||
authorization endpoint. If the client finds no schemes it supports | ||||
the client SHOULD provide feedback to the user that the requested | ||||
enpoint can not be supported. | ||||
----+ | ----+ | |||
+--------+ +---------------+ | | +--------+ +---------------+ | | |||
| |--(A)-- Authorization Request --->| Resource | | | | |--(A)-- Authorization Request --->| Resource | | | |||
| | | Owner | |Plain | | | | Owner | |Plain | |||
| |<-(B)------ Access Grant ---------| | |OAuth | | |<-(B)------ Access Grant ---------| | |OAuth | |||
| | +---------------+ |2.0 | | | +---------------+ |2.0 | |||
| | | | | | | | |||
| | Client Credentials & +---------------+ | | | | Client Credentials & +---------------+ | | |||
| |--(C)------ Access Grant -------->| Authorization | | | | |--(C)------ Access Grant -------->| Authorization | | | |||
| Client | | Server | | | | Client | | Server | | | |||
skipping to change at page 9, line 8 | skipping to change at page 8, line 8 | |||
In examples, "C:" and "S:" indicate lines sent by the client and | In examples, "C:" and "S:" indicate lines sent by the client and | |||
server respectively. Line breaks have been inserted for readability. | server respectively. Line breaks have been inserted for readability. | |||
Note that the IMAP SASL specification requires base64 encoding | Note that the IMAP SASL specification requires base64 encoding | |||
message, not this memo. | message, not this memo. | |||
3. OAuth SASL Mechanism Specification | 3. OAuth SASL Mechanism Specification | |||
SASL is used as a generalized authentication method in a variety of | SASL is used as a generalized authentication method in a variety of | |||
application layer protocols. This document defines two SASL | application layer protocols. This document defines the following | |||
mechanisms for usage with OAuth: "OAUTH" and "OAUTH-PLUS". The | SASL mechanisms for usage with OAuth: | |||
"OAUTH" SASL mechanism enables OAuth authorization schemes for SASL, | ||||
"OAUTH-PLUS" adds channel binding [RFC5056] capability for additional | ||||
security guarantees. | ||||
This mechanism is client initiated and lock-step, the server always | OAUTHBEARER Authorization using Bearer tokens. | |||
replying to a client message. In the case where the client has and | ||||
correctly uses a valid token the flow is: | OAUTH10A Authorization using OAuth 1.0a tokens. | |||
OAUTH10A-PLUS Adds channel binding [RFC5056] capability to | ||||
OAUTH10A for additional security guarantees. | ||||
Any new OAuth token scheme MAY define a new SASL mechanism compatible | ||||
with the mechanisms defined here by simply registering the new | ||||
name(s) and citing this specification for the further definition. | ||||
New channel binding enabled "-PLUS" mechanisms defined in this way | ||||
MUST include message integrity protection. | ||||
These mechanisms are client initiated and lock-step, the server | ||||
always replying to a client message. In the case where the client | ||||
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 | |||
result, then client MUST then send an additional message to the | result, then client MUST then send an additional message to the | |||
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 | |||
skipping to change at page 9, line 41 | skipping to change at page 9, line 8 | |||
o Server responds with an error message. | o Server responds with an error message. | |||
o Client sends an empty client reponse. | o Client sends an empty client reponse. | |||
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 GSS-API [RFC5801], which | response includes a gs2-header as defined in GS2 [RFC5801], which | |||
carries the authorization ID as a hint. These key/value pairs carry | carries the authorization ID. These key/value pairs carry the | |||
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 client MUST send an | complete an OAuth style HTTP authorization. The client MUST send an | |||
authorization ID in the gs2-header. The server MAY use this as a | authorization ID in the gs2-header. The ABNF [RFC5234] syntax is: | |||
routing or database lookup hint. The server MUST NOT use this as | ||||
authoritative, the user name MUST be asserted by the OAuth | ||||
credential. 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 authroization. | |||
user (REQUIRED): The authorization ID. 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. In OAUTH this is reserved, the client | qs: The HTTP query string. In non-channel binding mechanisms | |||
SHOUD NOT send it, and has the default value of "". In OAUTH- | this is reserved, the client SHOUD NOT send it, and has the | |||
PLUS this carries a single key value pair "cbdata" for the | default value of "". In "-PLUS" variants this carries a single | |||
channel binding data payload formatted as an HTTP query string. | key value pair "cbdata" for the channel binding data payload | |||
formatted as an HTTP query string. | ||||
In authorization schemes that use signatures, the client MUST send | In authorization schemes that use signatures, the client MUST send | |||
host and port number key/values, and the server MUST fail an | host and port number key/values, and the server MUST fail an | |||
authorization request requiring signatures that does not have host | authorization request requiring signatures that does not have host | |||
and port values. For authorization schemes that require a scheme as | and port values. For authorization schemes that require a URI scheme | |||
part of the URI being signed "http" is always used. | as part of the data being signed "http" is always used. In OAuth | |||
1.0a for example, the signature base string includes the | ||||
reconstructed HTTP URL. | ||||
3.1.1. Reserved Key/Values in OAUTH | 3.1.1. Reserved Key/Values | |||
In the OAUTH mechanism values for path, query string and post body | In these mechanisms values for path, query string and post body are | |||
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 schemes that use request signatures the default values MUST | |||
be used unless explict values are provided in the client response. | be used unless explict values are provided in the client response. | |||
The following key values are reserved for future use: | 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 | |||
The gs2-header is used as follows: | The OAuth scheme related mechanisms are also GSS-API mechanisms, see | |||
Section 4 for further detail. The gs2-header is used as follows: | ||||
o The "gs2-nonstd-flag" MUST NOT be present. | o The "gs2-nonstd-flag" MUST NOT be present. | |||
o The "gs2-authzid" carries the authorization identity as specified | o The "gs2-authzid" carries the authorization identity as specified | |||
in [RFC5801]. | in [RFC5801]. | |||
In the OAUTH mechanism the "gs2-cb-flag" MUST be set to "n" because | In the non "-PLUS" mechanisms the "gs2-cb-flag" MUST be set to "n" | |||
channel-binding [RFC5056] data is not expected. In the OAUTH-PLUS | because channel-binding [RFC5056] data is not expected. In the | |||
mechanism the "gs2-cb-flag" MUST be set appropriately by the client. | OAUTH10A-PLUS mechanism (or other -PLUS variants based on this | |||
specification) the "gs2-cb-flag" MUST be set appropriately by the | ||||
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 | |||
authorization scheme used. If the authorization scheme used includes | authorization scheme used. If the authorization scheme used includes | |||
signing of the request parameters the client must provide a client | signing of the request parameters the client must provide a client | |||
response that satisfies the data requirements for the scheme in use. | response that satisfies the data requirements for the scheme in use. | |||
In the OAUTH-PLUS mechanism the server examines the channel binding | In a "-PLUS" mechanism the server examines the channel binding data, | |||
data, extracts the channel binding unique prefix, and extracts the | extracts the channel binding unique prefix, and extracts the raw | |||
raw channel biding data based on the channel binding type used. It | channel biding data based on the channel binding type used. It then | |||
then computes it's own copy of the channel binding payload and | computes it's own copy of the channel binding payload and compares | |||
compares that to the payload sent by the client in the cbdata key/ | that to the payload sent by the client in the cbdata key/value. | |||
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 authorization scheme MUST carry | completing the SASL negotiation. The authorization scheme MUST carry | |||
the user ID to be used as the authorization identity (identity to act | the user ID to be used as the authorization identity (identity to act | |||
as). The server MUST use the ID obtained from the credential as the | as). The server MUST use the ID obtained from the credential as the | |||
user being authorized. | user being authorized. | |||
3.2.1. Mapping to SASL Identities | 3.2.1. Mapping to SASL Identities | |||
Some OAuth mechanisms can provide both an authorization identity and | Some OAuth mechanisms can provide both an authorization identity and | |||
skipping to change at page 12, line 18 | skipping to change at page 11, line 38 | |||
3.2.2. Server response to failed authentication. | 3.2.2. Server response to failed authentication. | |||
For a failed authentication the server returns a JSON [RFC4627] | For a failed authentication the server returns a JSON [RFC4627] | |||
formatted error result, and fails the authentication. The error | formatted error result, and fails the authentication. The error | |||
result consists of the following values: | result consists of the following values: | |||
status (REQUIRED): The authorization error code. Valid error | status (REQUIRED): The authorization error code. Valid error | |||
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. | |||
schemes (REQUIRED): A space separated list of the OAuth | ||||
authorization schemes supported by the server, i.e. "bearer" or | ||||
"bearer mac". | ||||
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 the client SHOULD always | |||
request scoped tokens from the token endpoint. The client MAY use a | request scoped tokens from the token endpoint. The client MAY use a | |||
scope other than the one provided by the resource server. Scopes | scope other than the one provided by the resource server. Scopes | |||
other than those advertised by the resource server are be defined by | other than those advertised by the resource server are be defined by | |||
the resource owner and provided in service documentation or discovery | the resource owner and provided in service documentation or discovery | |||
skipping to change at page 12, line 44 | skipping to change at page 12, line 14 | |||
needed. | 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.3. Completing an error message sequence. | 3.2.3. Completing an error message sequence. | |||
If the client gets an error message form the server it MUST send an | If the client gets an error message from the server it MUST send an | |||
empty client response consisting of a single %x01 (control A) | empty client response consisting of a single %x01 (control A) | |||
character, which is a correctly formatted client response with no | character, which is a correctly formatted client response with no | |||
key/value pairs. The server then completes the SASL negotiation with | key/value pairs. The server then completes the SASL negotiation with | |||
a failure result. | a failure result. | |||
3.3. Use of Signature Type Authorization | 3.3. Use of Signature Type Authorization | |||
This mechanism supports authorization using signatures, which | This mechanism supports authorization using signatures, which | |||
requires that both client and server construct the string to be | requires that both client and server construct the string to be | |||
signed. OAuth 2 is designed for authentication/authorization to | signed. OAuth 2 is designed for authentication/authorization to | |||
skipping to change at page 13, line 27 | skipping to change at page 12, line 42 | |||
specific resource authorization, e.g. IMAP access to a specific | specific resource authorization, e.g. IMAP access to a specific | |||
folder or FTP access limited to a specific directory. | 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 | ||||
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%3D"^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 | |||
skipping to change at page 14, line 15 | skipping to change at page 13, line 30 | |||
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 in an OAUTH- | the-middle attacks. All authorization schemes offered with "-PLUS" | |||
PLUS mechanism MUST provide integrity protection. It should be noted | mechanisms MUST provide integrity protection. It should be noted | |||
that while the Bearer token scheme specifies SSL for normal usage it | that while the Bearer token scheme specifies SSL for normal usage it | |||
offers no integrity protection and is not suitable for use in OAUTH- | offers no integrity protection and is not suitable for use with | |||
PLUS. | channel binding. | |||
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. | |||
The SASL OAuth mechanism is also a GSS-API mechanism and the messages | The SASL OAuth mechanism is also a GSS-API mechanism and the messages | |||
described in Section 3 are the same, but | described in Section 3 are the same with the following changes to the | |||
GS2 related elements: | ||||
1. the initial context token header is prefixed to the client's | 1. the GS2 header on the client's first message and the following | |||
%x01 (control A) are excluded when used as a GSS-API mechanism. | ||||
2. the initial context token header is prefixed to the client's | ||||
first authentication message (context token), as described in | first authentication message (context token), as described in | |||
Section 3.1 of RFC 2743, | Section 3.1 of RFC 2743, | |||
The GSS-API mechanism OID for OAuth is [[TBD: IANA]]. | The GSS-API mechanism OID for OAuth is [[TBD: IANA]]. | |||
OAuth security contexts always have the mutual_state flag | OAuth security contexts always have the mutual_state flag | |||
(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. | |||
skipping to change at page 16, line 21 | skipping to change at page 15, line 21 | |||
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: * IMAP4rev1 Server Ready | |||
C: t0 CAPABILITY | C: t0 CAPABILITY | |||
S: * CAPABILITY IMAP4rev1 AUTH=OAUTH | S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER | |||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE OAUTH bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2VydmVy | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZX | |||
LmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk5 | J2ZXIuZXhhbXBsZS5jb20BdXNlcj11c2VyQGV4YW1wbGUuY29tAXBvcnQ9MTQzA | |||
2YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | WF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZ | |||
Mjl0Q2c9PQEB | ||||
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^Auser=user@example.com^A | |||
auth=Bearer vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==^A^A | port=143^Aauth=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 OAUTH | S: 250-AUTH LOGIN PLAIN OAUTHBEARER | |||
S: 250-ENHANCEDSTATUSCODES | S: 250-ENHANCEDSTATUSCODES | |||
S: 250-PIPELINING | S: 250-PIPELINING | |||
C: t1 AUTHENTICATE OAUTH bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2VydmVy | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZX | |||
LmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk5 | J2ZXIuZXhhbXBsZS5jb20BdXNlcj11c2VyQGV4YW1wbGUuY29tAXBvcnQ9MTQzA | |||
2YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB | WF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZ | |||
Mjl0Q2c9PQEB | ||||
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 | signed authorization request. Note that line breaks are inserted for | |||
readability. | readability. | |||
S: * CAPABILITY IMAP4rev1 AUTH=OAUTH SASL-IR IMAP4rev1 Server Ready | S: * CAPABILITY IMAP4rev1 AUTH=OAUTH10A-PLUS SASL-IR IMAP4rev1 Server | |||
S: t0 OK Completed | Ready | |||
C: t1 AUTHENTICATE OAUTH-PLUS eSxhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vydm | S: t0 OK Completed | |||
VyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9T0F1dGggcmVhbG09IkV4YW1wbGUi | C: t1 AUTHENTICATE OAUTH10A-PLUS eSxhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD1zZ | |||
LG9hdXRoX2NvbnN1bWVyX2tleT0iOWRqZGo4Mmg0OGRqczlkMiIsb2F1dGhfdG9rZW | XJ2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMBYXV0aD1PQXV0aCByZWFsbT0iRXhhb | |||
49ImtrazlkN2RoM2szOXNqdjciLG9hdXRoX3NpZ25hdHVyZV9tZXRob2Q9IkhNQUMt | XBsZSIsb2F1dGhfY29uc3VtZXJfa2V5PSI5ZGpkajgyaDQ4ZGpzOWQyIixvYXV0a | |||
U0hBMSIsb2F1dGhfdGltZXN0YW1wPSIxMzcxMzEyMDEiLG9hdXRoX25vbmNlPSI3ZD | F90b2tlbj0ia2trOWQ3ZGgzazM5c2p2NyIsb2F1dGhfc2lnbmF0dXJlX21ldGhvZ | |||
hmM2U0YSIsb2F1dGhfc2lnbmF0dXJlPSJTU2R0SUdFZ2JHbDBkR3hsSUhSbFlTQndi | D0iSE1BQy1TSEExIixvYXV0aF90aW1lc3RhbXA9IjEzNzEzMTIwMSIsb2F1dGhfb | |||
M1F1IgFxcz1jYmRhdGE9dGxzLXVuaXF1ZTpTRzkzSUdKcFp5QnBjeUJoSUZSTVV5Qm | m9uY2U9IjdkOGYzZTRhIixvYXV0aF9zaWduYXR1cmU9IlNTZHRJR0VnYkdsMGRHe | |||
1hVzVoYkNCdFpYTnpZV2RsUHdvPQEB | GxJSFJsWVNCd2IzUXUiAXFzPWNiZGF0YT10bHMtdW5pcXVlOlNHOTNJR0pwWnlCc | |||
S: t1 OK SASL authentication succeeded | GN5QmhJRlJNVXlCbWFXNWhiQ0J0WlhOellXZGxQd289AQE= | |||
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 | decoded initial client response (with %x01 represented as ^A and | |||
lines wrapped for readability) is: | lines wrapped for readability) is: | |||
y,a=user@example.com,^A | y,a=user@example.com^A | |||
host=server.example.com^A | host=server.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="SSdtIGEgbGl0dGxlIHRlYSBwb3Qu"^A | oauth_signature="SSdtIGEgbGl0dGxlIHRlYSBwb3Qu"^A | |||
qs=cbdata=tls-unique:SG93IGJpZyBpcyBhIFRMUyBmaW5hbCBtZXNzYWdlPwo=^A^A | qs=cbdata=tls-unique:SG93IGJpZyBpcyBhIFRMUyBmaW5hbCBtZXNzYWdlPwo=^A^A | |||
skipping to change at page 18, line 32 | skipping to change at page 17, line 33 | |||
j82h48djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHM | j82h48djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHM | |||
AC-SHA1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk9d7dh3k39s | AC-SHA1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk9d7dh3k39s | |||
jv7 | jv7 | |||
5.3. Failed Exchange | 5.3. Failed Exchange | |||
This example shows a failed exchange because of the empty | This example shows a failed exchange because of the empty | |||
Authorization header, which is how a client can query for 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=OAUTH SASL-IR IMAP4rev1 Server Ready | S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR IMAP4rev1 Server | |||
Ready | ||||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE OAUTH bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vy | C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20BaG9zdD | |||
dmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AQE= | 1zZXJ2ZXIuZXhhbXBsZS5jb20BdXNlcj11c2VyQGV4YW1wbGUuY29tAXBvc | |||
S: + ewoic3RhdHVzIjoiNDAxIiwKInNjaGVtZXMiOiJiZWFyZXIiLAoic2NvcGUi | nQ9MTQzAWF1dGg9AQE= | |||
OiJleGFtcGxlX3Njb3BlIgp9 | S: + ewoic3RhdHVzIjoiNDAxIgoic2NvcGUiOiJleGFtcGxlX3Njb3BlIgp9 | |||
C: + AQ== | C: + AQ== | |||
S: t1 NO SASL authentication failed | S: t1 NO SASL authentication failed | |||
The decoded initial client response is: | The decoded initial client response is: | |||
n,a=user@example.com,^Ahost=server.example.com^Aport=143^Aauth=^A^A | n,a=user@example.com,^Ahost=server.example.com^Auser=user@example. | |||
com^Aport=143^Aauth=^A^A | ||||
The decoded server error response is: | The decoded server error response is: | |||
{ | { | |||
"status":"401", | "status":"401", | |||
"schemes":"bearer", | ||||
"scope":"example_scope" | "scope":"example_scope" | |||
} | } | |||
The client responds with the required empty response. | The client responds with the required empty response. | |||
5.4. Failed Channel Binding | 5.4. Failed Channel Binding | |||
This example shows a channel binding failure in an empty request. | This example shows a channel binding failure in an empty request. | |||
The channel binding information is empty. Note that line breaks are | The channel binding information is empty. Note that line breaks are | |||
inserted for readability. | inserted for readability. | |||
S: * CAPABILITY IMAP4rev1 AUTH=OAUTH OAUTH-PLUS SASL-IR IMAP4rev1 Server | S: * CAPABILITY IMAP4rev1 AUTH=OAUTH10A-PLUS SASL-IR IMAP4rev1 Server | |||
Ready | Ready | |||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE OAUTH-PLUS eSxhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vydm | C: t1 AUTHENTICATE OAUTH10A-PLUS eSxhPXVzZXJAZXhhbXBsZS5jb20sAWhv | |||
VyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AWNiZGF0YT0BAQ== | c3Q9c2VydmVyLmV4YW1wbGUuY29tAXVzZXI9dXNlckBleGFtcGxlLmNvbQF | |||
S: + ewoic3RhdHVzIjoiNDEyIiwKInNjaGVtZXMiOiJiZWFyZXIgb2F1dGgiLAoi | wb3J0PTE0MwFhdXRoPQFjYmRhdGE9AQE= | |||
c2NvcGUiOiJleGFtcGxlX3Njb3BlIgp9 | S: + ewoic3RhdHVzIjoiNDEyIiwKInNjb3BlIjoiZXhhbXBsZV9zY29wZSIKfQ== | |||
C: + AQ== | C: + AQ== | |||
S: t1 NO SASL authentication failed | S: t1 NO SASL authentication failed | |||
The decoded initial client response is: | The decoded initial client response is: | |||
y,a=user@example.com,^A | y,a=user@example.com,^Ahost=server.example.com^A | |||
host=server.example.com^Aport=143^A | user=user@example.com^Aport=143^Aauth=^Acbdata=^A^A | |||
auth=^Acbdata=^A^A | ||||
The decoded server response is: | The decoded server response is: | |||
{ | { | |||
"status":"412", | "status":"412", | |||
"schemes":"bearer oauth", | ||||
"scope":"example_scope" | "scope":"example_scope" | |||
} | } | |||
The client responds with the required empty response. | The client responds with the required empty 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 OAUTH | S: 250-AUTH LOGIN PLAIN OAUTHBEARER | |||
S: 250-ENHANCEDSTATUSCODES | S: 250-ENHANCEDSTATUSCODES | |||
S: 250-PIPELINING | S: 250-PIPELINING | |||
C: AUTH OAUTH dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB2RjlkZn | C: AUTH OAUTHBEARER dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB2 | |||
Q0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQo= | RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQo= | |||
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 client responds with the required empty response. | The server returned an error message in the 334 SASL message, the | |||
client responds with the required empty response, and the server | ||||
finalizes the negotiation. | ||||
6. Security Considerations | 6. Security Considerations | |||
This mechanism does not provide a security layer, but does provide a | This mechanism does not provide a security layer, but does provide a | |||
provision for channel binding. The OAuth 2 specification | provision for channel binding. The OAuth 2 specification | |||
[I-D.ietf-oauth-v2] allows for a variety of usages, and the security | [I-D.ietf-oauth-v2] allows for a variety of usages, and the security | |||
properties of these profiles vary. The usage of bearer tokens, for | properties of these profiles vary. The usage of bearer tokens, for | |||
example, provide security features similar to cookies. Applications | example, provide security features similar to cookies. Applications | |||
using this mechanism SHOULD exercise the same level of care using | using this mechanism SHOULD exercise the same level of care using | |||
this mechanism as they would in using the SASL PLAIN mechanism. In | this mechanism as they would in using the SASL PLAIN mechanism. In | |||
skipping to change at page 22, line 11 | skipping to change at page 21, line 11 | |||
invalid at any time. The client MAY request a new access token for | 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 | 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. IANA Considerations | |||
7.1. SASL Registration | 7.1. SASL Registration | |||
The IANA is requested to register the following SASL profile: | The IANA is requested to register the following SASL profile: | |||
SASL mechanism profile: OAUTH | SASL mechanism profile: 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. | |||
Owner/Change controller: the IETF | Owner/Change controller: the IETF | |||
Note: None | Note: None | |||
The IANA is requested to register the following SASL profile: | The IANA is requested to register the following SASL profile: | |||
SASL mechanism profile: OAUTH-PLUS | SASL mechanism profile: OAUTH10A | |||
Security Considerations: See this document | ||||
Published Specification: See this document | ||||
For further information: Contact the authors of this document. | ||||
Owner/Change controller: the IETF | ||||
Note: None | ||||
The IANA is requested to register the following SASL profile: | ||||
SASL mechanism profile: OAUTH10A-PLUS | ||||
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 | 7.2. GSS-API Registration | |||
IANA is further requested to assign an OID for this GSS mechanism in | IANA is further requested to assign an OID for thESE GSS mechanismS | |||
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 | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[I-D.ietf-oauth-v2] | [I-D.ietf-oauth-v2] | |||
Hardt, D., "The OAuth 2.0 Authorization Framework", | Hardt, D., "The OAuth 2.0 Authorization Framework", | |||
draft-ietf-oauth-v2-31 (work in progress), August 2012. | draft-ietf-oauth-v2-31 (work in progress), August 2012. | |||
skipping to change at page 26, line 9 | skipping to change at page 26, line 9 | |||
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, and Nico Williams. | |||
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 ]] | |||
-05 | ||||
o Fixed the GS2 header language again. | ||||
o Separated out different OAuth schemes into different SASL | ||||
mechanisms. Took out the scheme in the error return. Tuned up | ||||
the IANA registrations. | ||||
o Added the user field back into the SASL message. | ||||
o Fixed the examples (again). | ||||
o | ||||
-04 | -04 | |||
o Changed user field to be carried in the gs2-header, and made gs2 | o Changed user field to be carried in the gs2-header, and made gs2 | |||
header explicit in all cases. | header explicit in all cases. | |||
o Converted MAC examples to OAuth 1.0a. Moved MAC to an informative | o Converted MAC examples to OAuth 1.0a. Moved MAC to an informative | |||
reference. | reference. | |||
o Changed to sending an empty client response (single control-A) as | o Changed to sending an empty client response (single control-A) as | |||
the second message of a failed sequence. | the second message of a failed sequence. | |||
End of changes. 53 change blocks. | ||||
143 lines changed or deleted | 184 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |