draft-ietf-kitten-sasl-oauth-00.txt | draft-ietf-kitten-sasl-oauth-01.txt | |||
---|---|---|---|---|
KITTEN W. Mills | KITTEN W. Mills | |||
Internet-Draft T. Showalter | Internet-Draft Yahoo! Inc. | |||
Intended status: Standards Track Yahoo! Inc. | Intended status: Standards Track T. Showalter | |||
Expires: May 17, 2012 H. Tschofenig | Expires: December 1, 2012 | |||
H. Tschofenig | ||||
Nokia Siemens Networks | Nokia Siemens Networks | |||
November 14, 2011 | May 30, 2012 | |||
A SASL and GSS-API Mechanism for OAuth | A SASL and GSS-API Mechanism for OAuth | |||
draft-ietf-kitten-sasl-oauth-00.txt | draft-ietf-kitten-sasl-oauth-01 | |||
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 OAuth over the | |||
Simple Authentication and Security Layer (SASL) or the Generic | Simple Authentication and Security Layer (SASL) or the Generic | |||
Security Service Application Program Interface (GSS-API) to access a | Security Service Application Program Interface (GSS-API) to access a | |||
protected resource at a resource serve, and additionally defines | protected resource at a resource serve. Thereby, it enables schemes | |||
authorization and token issuing endpoint discovery. Thereby, it | defined within the OAuth framework for non-HTTP-based application | |||
enables schemes defined within the OAuth framework for non-HTTP-based | protocols. | |||
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 May 17, 2012. | This Internet-Draft will expire on December 1, 2012. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 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 . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. OAuth SASL Mechanism Specification . . . . . . . . . . . . . . 8 | 3. OAuth SASL Mechanism Specification . . . . . . . . . . . . . . 8 | |||
3.1. Channel Binding . . . . . . . . . . . . . . . . . . . . . 8 | 3.1. Initial Client Response . . . . . . . . . . . . . . . . . 8 | |||
3.2. Initial Client Response . . . . . . . . . . . . . . . . . 8 | 3.1.1. Reserved Key/Values in OAUTH . . . . . . . . . . . . . 8 | |||
3.2.1. Query String in OAUTH-PLUS . . . . . . . . . . . . . . 9 | 3.2. Server's Response . . . . . . . . . . . . . . . . . . . . 9 | |||
3.3. Server's Response . . . . . . . . . . . . . . . . . . . . 9 | 3.2.1. Mapping to SASL Identities . . . . . . . . . . . . . . 9 | |||
3.4. Mapping to SASL Identities . . . . . . . . . . . . . . . . 10 | 3.2.2. Server response to failed authentication. . . . . . . 10 | |||
3.5. Discovery Information . . . . . . . . . . . . . . . . . . 10 | 3.3. Use of Signature Type Authorization . . . . . . . . . . . 10 | |||
3.6. Use of Signature Type Authorization . . . . . . . . . . . 12 | 3.4. Channel Binding . . . . . . . . . . . . . . . . . . . . . 11 | |||
4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 14 | 4. GSS-API OAuth Mechanism Specification . . . . . . . . . . . . 12 | |||
5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 15 | 5.1. Successful Bearer Token Exchange . . . . . . . . . . . . . 13 | |||
5.2. MAC Authentication with Channel Binding . . . . . . . . . 15 | 5.2. MAC Authentication with Channel Binding . . . . . . . . . 13 | |||
5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 16 | 5.3. Failed Exchange . . . . . . . . . . . . . . . . . . . . . 14 | |||
5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 17 | 5.4. Failed Channel Binding . . . . . . . . . . . . . . . . . . 15 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 19 | 7.1. SASL Registration . . . . . . . . . . . . . . . . . . . . 17 | |||
7.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 19 | 7.2. GSS-API Registration . . . . . . . . . . . . . . . . . . . 17 | |||
7.3. Link Type Registration . . . . . . . . . . . . . . . . . . 19 | 8. Appendix A -- Document History . . . . . . . . . . . . . . . . 18 | |||
7.3.1. OAuth 2 Authentication Endpoint . . . . . . . . . . . 19 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
7.3.2. OAuth 2 Token Endpoint . . . . . . . . . . . . . . . . 20 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 19 | |||
7.3.3. OAuth 1.0a Request Initiation Endpoint . . . . . . . . 20 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 20 | |||
7.3.4. OAuth 1.0a Authorization Endpoint . . . . . . . . . . 21 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
7.3.5. OAuth 1.0a Token Endpoint . . . . . . . . . . . . . . 21 | ||||
8. Appendix A -- Document History . . . . . . . . . . . . . . . . 22 | ||||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
9.1. Normative References . . . . . . . . . . . . . . . . . . . 23 | ||||
9.2. Informative References . . . . . . . . . . . . . . . . . . 24 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
1. Introduction | 1. Introduction | |||
OAuth [I-D.ietf-oauth-v2] enables a third-party application to obtain | OAuth [I-D.ietf-oauth-v2] enables a third-party application to obtain | |||
limited access to a protected resource, either on behalf of a | limited access to a protected resource, either on behalf of a | |||
resource owner by orchestrating an approval interaction, or by | resource owner by orchestrating an approval interaction, or by | |||
allowing the third-party application to obtain access on its own | allowing the third-party application to obtain access on its own | |||
behalf. The core OAuth specification [I-D.ietf-oauth-v2] does not | behalf. The core OAuth specification [I-D.ietf-oauth-v2] does not | |||
define the interaction between the client and the resource server | define the interaction between the client and the resource server | |||
with the access to a protected resource using an Access Token. This | with the access to a protected resource using an Access Token. This | |||
skipping to change at page 6, line 4 | skipping to change at page 6, line 4 | |||
validates the authorization grant, and if valid issues an access | validates the authorization grant, and if valid issues an access | |||
token. | token. | |||
(E) The client requests the protected resource from the resource | (E) The client requests the protected resource from the resource | |||
server and authenticates by presenting the access token. | server and authenticates by presenting the access token. | |||
(F) The resource server validates the access token, and if valid, | (F) The resource server validates the access token, and if valid, | |||
serves the request. | serves the request. | |||
Steps (E) and (F) are not defined in [I-D.ietf-oauth-v2] and are the | Steps (E) and (F) are not defined in [I-D.ietf-oauth-v2] and are the | |||
main functionality specified within this document. Additionally, an | main functionality specified within this document. Consequently, the | |||
optional discovery exchange is defined. Consequently, the message | message exchange shown in Figure 2 is the result of this | |||
exchange shown in Figure 2 is the result of this specification. (1) | specification. The client will genrally need to determine the | |||
and (2) denote the optional discovery exchange steps that may happen | authentication endpoints (and perhaps the service endpoints) before | |||
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. Steps (E) and (F) also defined in this specification. | executed. The discovery of the resource owner and authorization | |||
server endpoints is outside the scope of this specification. The | ||||
client must discover those endpoints using a discovery mechanisms | ||||
such as Webfinger using host-meta [I-D.jones-appsawg-webfinger]. In | ||||
band discovery is not tenable if clients support the OAuth 2.0 | ||||
password grant. Once credentials are obtained the client proceeds to | ||||
steps (E) and (F) defined in this specification. | ||||
----+ | ----+ | |||
+--------+ +---------------+ | | +--------+ +---------------+ | | |||
| |--(A)-- Authorization Request --->| Resource | | | | |--(A)-- Authorization Request --->| Resource | | | |||
| | | Owner | |Plain | | | | Owner | |Plain | |||
| |<-(B)------ Access Grant ---------| | |OAuth | | |<-(B)------ Access Grant ---------| | |OAuth | |||
| | +---------------+ |2.0 | | | +---------------+ |2.0 | |||
| | | | | | | | |||
| | Client Credentials & +---------------+ | | | | Client Credentials & +---------------+ | | |||
| |--(C)------ Access Grant -------->| Authorization | | | | |--(C)------ Access Grant -------->| Authorization | | | |||
| Client | | Server | | | | Client | | Server | | | |||
| |<-(D)------ Access Token ---------| | | | | |<-(D)------ Access Token ---------| | | | |||
| | (w/ Optional Refresh Token) +---------------+ | | | | (w/ Optional Refresh Token) +---------------+ | | |||
| | ----+ | | | ----+ | |||
| | | ||||
| | ----+ | | | ----+ | |||
| | (Optional discovery) +---------------+ | | | | +---------------+ | | |||
| |--(1)------- User Name --------->| | | | | | | | |OAuth | |||
| Client | | | | | | |--(E)------ Access Token -------->| Resource | |over | |||
| |<-(2)------ Authentication -------| | | | | | | Server | |SASL/ | |||
| | endpoint information | Resource | |OAuth | | |<-(F)---- Protected Resource -----| | |GSS- | |||
| | | Server | |over | | | | | |API | |||
| |--(E)------ Access Token -------->| | |SASL/ | ||||
| | | | |GSS- | ||||
| |<-(F)---- Protected Resource -----| | |API | ||||
+--------+ +---------------+ | | +--------+ +---------------+ | | |||
----+ | ----+ | |||
Figure 2: OAuth SASL Architecture | Figure 2: OAuth SASL Architecture | |||
Note: The discovery procedure in OAuth is still work in progress. | ||||
Hence, the discovery components described in this document should | ||||
be considered incomplete and a tentative proposal. In general, | ||||
there is a trade off between a generic, externally available | ||||
defined discovery mechanisms (such as Webfinger using host-meta | ||||
[I-D.hammer-hostmeta], or [I-D.jones-simple-web-discovery]) and | ||||
configuration information exchanged in-band between the SASL | ||||
communication endpoints. | ||||
It is worthwhile to note that this specification is also compatible | It is worthwhile to note that this specification is also compatible | |||
with OAuth 1.0a [RFC5849]. | with OAuth 1.0a [RFC5849]. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
The reader is assumed to be familiar with the terms used in the OAuth | The reader is assumed to be familiar with the terms used in the OAuth | |||
skipping to change at page 8, line 10 | skipping to change at page 8, line 10 | |||
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 two SASL | |||
mechanisms for usage with OAuth: "OAUTH" and "OAUTH-PLUS". The | mechanisms for usage with OAuth: "OAUTH" and "OAUTH-PLUS". The | |||
"OAUTH" SASL mechanism provides bearer token alike semantic for SASL | "OAUTH" SASL mechanism enables OAuth authorizattion schemes for SASL, | |||
while "OAUTH-PLUS" provides a semantic similar to OAuth MAC | "OAUTH-PLUS" adds channel binding [RFC5056] capability for additional | |||
authentication by utilizing a channel binding mechanism [RFC5056]. | security guarantees. | |||
3.1. Channel Binding | ||||
If the specification for the underlying authorization scheme requires | ||||
a security layer, such as TLS [RFC5246], the server SHOULD only offer | ||||
a mechanism where channel binding can be enabled. | ||||
The channel binding data is computed by the client based on it's | 3.1. Initial Client Response | |||
choice of preferred channel binding type. As specified in [RFC5056], | ||||
the channel binding information MUST start with the channel binding | ||||
unique prefix, followed by a colon (ASCII 0x3A), followed by a base64 | ||||
encoded channel binding payload. The channel binding payload is the | ||||
raw data from the channel binding type if the raw channel binding | ||||
data is less than 500 bytes. If the raw channel binding data is 500 | ||||
bytes or larger then a SHA-1 [RFC3174] hash of the raw channel | ||||
binding data is computed. | ||||
If the client is using tls-unique for a channel binding then the raw | Client responses are a key/value pair sequence. These key/value | |||
channel binding data equals the first TLS finished message. This is | pairs carry the equivalent values form an HTTP context in order to be | |||
under the 500 byte limit, so the channel binding payload sent to the | able to complete an OAuth style HTTP authorization. The ABNF | |||
server would be the base64 encoded first TLS finished message. | [RFC2234] syntax is: | |||
In the case where the client has chosen tls-endpoint, the raw channel | kvsep = %x01 | |||
binding data is the certificate of the server the client connected | key = 1*ALPHA | |||
to, which will frequently be 500 bytes or more. If it is then the | value = *(VCHAR | SP | HTAB | CR | LF ) | |||
channel binding payload is the base64 encoded SHA-1 hash of the | kvpair = key "=" value kvsep | |||
server certificate. | client_resp = 1*kvpair kvsep | |||
3.2. Initial Client Response | The following key/value pairs are defined in the client response: | |||
The SASL client response is formatted as an HTTP [RFC2616] request. | auth (REQUIRED): The payload of the HTTP Authorization header for | |||
The HTTP request is limited in that the path MUST be "/". In the | an equivalent HTTP OAuth authroization. | |||
OAUTH mechanism no query string is allowed. The following header | ||||
lines are defined in the client response: | ||||
User (OPTIONAL): Contains the user identifier being | host: Contains the host name to which the client connected. | |||
authenticated, and is provided to allow correct discovery | ||||
information to be returned. | ||||
Host (REQUIRED): Contains the host name to which the client | port: Contains the port number represented as a decimal positive | |||
integer string without leading zeros to which the client | ||||
connected. | connected. | |||
Authorization (REQUIRED): An HTTP Authorization header. | In authorization schemes that use signatures, the client MUST send | |||
host and port number key/values, and the server MUST fail | ||||
authorization request requiring signatures that do not have host and | ||||
port values. | ||||
The user name is provided by the client to allow the discovery | 3.1.1. Reserved Key/Values in OAUTH | |||
information to be customized for the user, a given server could allow | ||||
multiple authenticators and it needs to return the correct one. For | ||||
instance, a large ISP could provide mail service for several domains | ||||
who manage their own user information. For instance, users at foo- | ||||
example.com could be authenticated by an OAuth service at | ||||
https://oauth.foo-example.com/, and users at bar-example.com could be | ||||
authenticated by https://oauth.bar-example.com, but both could be | ||||
served by a hypothetical IMAP server running at a third domain, | ||||
imap.example.net. | ||||
3.2.1. Query String in OAUTH-PLUS | In the OAUTH mechanism values for path, query string and post body | |||
are assigned default values. OAuth authorization schemes MAY define | ||||
usage of these in the SASL context and extend this specification. | ||||
For OAuth schemes that use request signatures the default values MUST | ||||
be used unless explict values are provided in the client response. | ||||
The following key values are reserved for future use: | ||||
In the OAUTH-PLUS mechanism the channel binding information is | path (RESERVED): HTTP path data, the default value is "/". | |||
carried in the query string. OAUTH-PLUS defines following query | ||||
parameter(s): | ||||
cbdata (REQUIRED): Contains the base64 encoded channel binding | qs (RESERVED): HTTP query string, the default value is "". | |||
data, properly escaped as an HTML query parameter value. | ||||
3.3. Server's Response | post (RESERVED): HTTP post data, the default value is "". | |||
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 complete | signing of the request parameters the client must provide a client | |||
HTTP style request that satisfies the data requirements for the | response that satisfies the data requirements for the scheme in use. | |||
scheme in use. | ||||
In the OAUTH-PLUS mechanism the server examines the channel binding | In the OAUTH-PLUS mechanism the server examines the channel binding | |||
data, extracts the channel binding unique prefix, and extracts the | data, extracts the channel binding unique prefix, and extracts the | |||
raw channel biding data based on the channel binding type used. It | raw channel biding data based on the channel binding type used. It | |||
then computes it's own copy of the channel binding payload and | then computes it's own copy of the channel binding payload and | |||
compares that to the payload sent by the client in the query | compares that to the payload sent by the client in the cbdata key/ | |||
parameters of the tunneled HTTP request. Those two must be equal for | value. Those two must be equal for channel binding to succeed. | |||
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 authentication scheme MUST | completing the SASL negotiation. The authentication scheme MUST | |||
carry the user ID to be used as the authorization identity (identity | carry the user ID to be used as the authorization identity (identity | |||
to act as). The server MUST use that ID as the user being | to act as). The server MUST use the ID obtained from the credential | |||
authorized, that is the user assertion we accept and not other | as the user being authorized. | |||
information such as from the URL or "User:" header. | ||||
The server responds to failed authentication by sending discovery | ||||
information in an HTTP style response with the HTTP status code set | ||||
to 401, and then failing the authentication. | ||||
If channel binding is in use and the channel binding fails the server | ||||
responds with a minimal HTTP response without discovery information | ||||
and the HTTP status code set to 412 to indicate that the channel | ||||
binding precondition failed. If the authentication scheme in use | ||||
does not include signing the server SHOULD revoke the presented | ||||
credential and the client SHOULD discard that credential. | ||||
3.4. 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 | |||
an authentication identity. An example of this is OAuth 1.0a | an authentication identity. An example of this is OAuth 1.0a | |||
[RFC5849] where the consumer key (oauth_consumer_key) identifies the | [RFC5849] where the consumer key (oauth_consumer_key) identifies the | |||
entity using to token which equates to the SASL authentication | entity using to token which equates to the SASL authentication | |||
identity, and is authenticated using the shared secret. The | identity, and is authenticated using the shared secret. The | |||
authorization identity in the OAuth 1.0a case is carried in the token | authorization identity in the OAuth 1.0a case is carried in the token | |||
(per the requirement above), which SHOULD validated independently. | (per the requirement above), which SHOULD validated independently. | |||
The server MAY use a consumer key or other comparable identity in the | The server MAY use a consumer key, a value derived from it, or other | |||
OAuth authorization scheme as the SASL authentication identity. If | comparable identity in the OAuth authorization scheme as the SASL | |||
an appropriate authentication identity is not available the server | authentication identity. If an appropriate authentication identity | |||
MUST use the identity asserted in the token. | is not available the server MUST use the authorization identity as | |||
the wuthentication identity. | ||||
3.5. Discovery Information | ||||
The server MUST send discovery information in response to a failed | ||||
authentication exchange or a request with an empty Authorization | ||||
header. If discovery information is returned it MUST include an | ||||
authentication endpoint appropriate for the user. If the "User" | ||||
header is present the discovery information MUST be for that user. | ||||
Discovery information is provided by the server to the client to | ||||
allow a client to discover the appropriate OAuth authentication and | ||||
token endpoints. The client then uses that information to obtain the | ||||
access token needed for OAuth authentication. The client SHOULD | ||||
cache and re-use the user specific discovery information for service | ||||
endpoints. | ||||
Discovery information makes use of both the WWW-Authenticate header | ||||
as defined in HTTP Authentication: Basic and Digest Access | ||||
Authentication [RFC2617] and Link headers as defined in [RFC5988]. | ||||
The following elements are defined for discovery information: | ||||
WWW-Authenticate A WWW-Authenticate header for each authentication | ||||
scheme supported by the server. Authentication scheme names are | ||||
case insensitive. The following [RFC2617] authentication | ||||
parameters are defined: | ||||
realm REQUIRED -- (as defined by RFC2617) | ||||
scope OPTIONAL -- A quoted string. This provides the client an | ||||
OAuth 2 scope known to be valid for the resource. | ||||
oauth2-authenticator An [RFC5988] Link header specifying the | ||||
[I-D.ietf-oauth-v2] authentication endpoint. This link has an | ||||
OPTIONAL link-extension "scheme", if included this link applies | ||||
ONLY to the specified scheme. | ||||
oauth2-token An [RFC5988] Link header specifying the | ||||
[I-D.ietf-oauth-v2] token endpoint. This link has an OPTIONAL | ||||
link-extension "scheme", if included this link applies ONLY to the | ||||
specified scheme. | ||||
oauth-initiate (Optional) An [RFC5988] Link header specifying the | 3.2.2. Server response to failed authentication. | |||
OAuth1.0a [RFC5849] initiation endpoint. The server MUST send | ||||
this if "OAuth" is included in the supported list of HTTP | ||||
authentication schemes for the server. | ||||
oauth-authorize (Optional) An [RFC5988] Link header specifying the | For a failed authentication the server returns a JSON [RFC4627] | |||
OAuth1.0a [RFC5849] authentication endpoint. The server MUST send | formatted error result, and fails the authentication. The error | |||
this if "OAuth" is included in the supported list of HTTP | result consists of the following values: | |||
authentication schemes for the server. | ||||
oauth-token (Optional) An [RFC5988] Link header specifying the | status (REQUIRED): The authorization error code. Valid error | |||
OAuth1.0a [RFC5849] token endpoint. The server MUST send this if | codes are defined in the IANA [[need registry name]] registry | |||
"OAuth" is included in the supported list of HTTP authentication | specified in the OAuth 2 core specification. | |||
schemes for the server. This link type has one link-extension | ||||
"grant-types" which is a space separated list of the OAuth 2.0 | ||||
grant types that can be used at the token endpoint to obtain a | ||||
token. | ||||
Usage of the URLs provided in the discovery information is defined in | scope (OPTIONAL): The OAuth scope required to access the service. | |||
the relevant specifications. If the server supports multiple | ||||
authenticators the discovery information returned for unknown users | ||||
MUST be consistent with the discovery information for known users to | ||||
prevent user enumeration. The OAuth 2.0 specification | ||||
[I-D.ietf-oauth-v2] supports multiple types of authentication schemes | ||||
and the server MUST specify at least one supported authentication | ||||
scheme in the discovery information. The server MAY support multiple | ||||
schemes and MAY support schemes not listed in the discovery | ||||
information. | ||||
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 must be defined by | other than those advertised by the resource server are be defined by | |||
the resource owner and provided in service documentation (which is | the resource owner and provided in service documentation or discovery | |||
beyond the scope of this memo). | information (which is beyond the scope of this memo). If not present | |||
then the client SHOULD presume an empty scope (unscoped token) is | ||||
needed. | ||||
3.6. Use of Signature Type Authorization | 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 | ||||
binding precondition failed. If the authentication scheme in use | ||||
does not include signing the server SHOULD revoke the presented | ||||
credential and the client SHOULD discard that credential. | ||||
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 | |||
access specific URIs. SASL is designed for user authentication, and | access specific URIs. SASL is designed for user authentication, and | |||
has no facility for being more specific. In this mechanism we | has no facility for being more specific. In this mechanism we | |||
require an HTTP style format specifically to support signature type | require or define default values for the data elements from an HTTP | |||
authentication, but this is extremely limited. The HTTP style | request which allow the signature base string to be constructed | |||
request is limited to a path of "/". This mechanism is in the SASL | properly. The default HTTP path is "/" and the default post body is | |||
model, but is designed so that no changes are needed if there is a | empty. These atoms are defined as extension points so that no | |||
revision of SASL which supports more specific resource authorization, | changes are needed if there is a revision of SASL which supports more | |||
e.g. IMAP access to a specific folder or FTP access limited to a | specific resource authorization, e.g. IMAP access to a specific | |||
specific directory. | folder or FTP access limited to a specific directory. | |||
Using the example in the MAC specification | Using the example in the MAC specification | |||
[I-D.ietf-oauth-v2-http-mac] as a starting point, on an IMAP server | [I-D.ietf-oauth-v2-http-mac] as a starting point, on an IMAP server | |||
running on port 143 and given the MAC style authorization request | running on port 143 and given the MAC style authorization request | |||
(with long lines wrapped for readability) below: | (with %x01 shown as ^A and long lines wrapped for readability) below: | |||
GET / HTTP/1.1 | host=server.example.com^A | |||
Host: server.example.com | port=143^A | |||
User: user@example.com | auth=MAC token="h480djs93hd8",timestamp="137131200",nonce="dj83hs9s", | |||
Authorization: MAC token="h480djs93hd8",timestamp="137131200", | signature="YTVjyNSujYs1WsDurFnvFi4JK6o="^A^A | |||
nonce="dj83hs9s",signature="YTVjyNSujYs1WsDurFnvFi4JK6o=" | ||||
The normalized request string would be constructed per the MAC | The normalized request string would be constructed per the MAC | |||
specification [I-D.ietf-oauth-v2-http-mac]. In this example the | specification [I-D.ietf-oauth-v2-http-mac]. In this example the | |||
normalized request string with the new line separator character is | normalized request string with the new line separator character is | |||
represented by "\n" for display purposes only would be: | represented by "\n" for display purposes only would be: | |||
h480djs93hi8\n | h480djs93hi8\n | |||
137131200\n | 137131200\n | |||
dj83hs9s\n | dj83hs9s\n | |||
\n | \n | |||
GET\n | GET\n | |||
server.example.com\n | server.example.com\n | |||
143\n | 143\n | |||
/\n | /\n | |||
\n | \n | |||
3.4. Channel Binding | ||||
If the specification for the underlying authorization scheme requires | ||||
a security layer, such as TLS [RFC5246], the server SHOULD only offer | ||||
a mechanism where channel binding can be enabled. | ||||
The channel binding data is computed by the client based on it's | ||||
choice of preferred channel binding type. As specified in [RFC5056], | ||||
the channel binding information MUST start with the channel binding | ||||
unique prefix, followed by a colon (ASCII 0x3A), followed by a base64 | ||||
encoded channel binding payload. The channel binding payload is the | ||||
raw data from the channel binding type if the raw channel binding | ||||
data is less than 500 bytes. If the raw channel binding data is 500 | ||||
bytes or larger then a SHA-1 [RFC3174] hash of the raw channel | ||||
binding data is computed. | ||||
If the client is using tls-unique for a channel binding then the raw | ||||
channel binding data equals the first TLS finished message. This is | ||||
under the 500 byte limit, so the channel binding payload sent to the | ||||
server would be the base64 encoded first TLS finished message. | ||||
In the case where the client has chosen tls-endpoint, the raw channel | ||||
binding data is the certificate of the server the client connected | ||||
to, which will frequently be 500 bytes or more. If it is then the | ||||
channel binding payload is the base64 encoded SHA-1 hash of the | ||||
server certificate. | ||||
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, but | |||
1. the GS2 header on the client's first message is excluded when | 1. the GS2 header on the client's first message is excluded when | |||
OAUTH is used as a GSS-API mechanism, and | OAUTH is used as a GSS-API mechanism, and | |||
skipping to change at page 15, line 20 | skipping to change at page 13, line 20 | |||
5.1. Successful Bearer Token Exchange | 5.1. Successful Bearer Token Exchange | |||
This example shows a successful OAuth 2.0 bearer token exchange with | This example shows a successful OAuth 2.0 bearer token exchange with | |||
an initial client response. Note that line breaks are inserted for | an initial client response. Note that line breaks are inserted for | |||
readability. | readability. | |||
S: * IMAP4rev1 Server Ready | S: * IMAP4rev1 Server Ready | |||
C: t0 CAPABILITY | C: t0 CAPABILITY | |||
S: * CAPABILITY IMAP4rev1 AUTH=OAUTH | S: * CAPABILITY IMAP4rev1 AUTH=OAUTH | |||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE OAUTH R0VUIC8gSFRUUC8xLjENCkhvc3Q6IGltYXAuZXhhbXBs | C: t1 AUTHENTICATE OAUTH aG9zdD1zZXJ2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMB | |||
ZS5jb20NCkF1dGhvcml6YXRpb246IEJFQVJFUiAidkY5ZGZ0NHFtVGMyTnZiM1J | YXV0aD1CRUFSRVIgdkY5ZGZ0NHFtVGMyTnZiM1JsY2tCaGJIUmhkbWx6ZEdFdVk | |||
sY2tCaGJIUmhkbWx6ZEdFdVkyOXRDZz09Ig0KDQo= | yOXRDZz09AQE= | |||
S: + | S: + | |||
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 is: | decoded initial client response (with %x01 represented as ^A and long | |||
lines wrapped for readability) is: | ||||
GET / HTTP/1.1 | host=server.example.com^Aport=143^A | |||
Host: imap.example.com | auth=BEARER "vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg=="^A^A | |||
Authorization: BEARER "vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==" | ||||
The line containing just a "+" and a space is an empty response from | The line containing just a "+" and a space is an empty response from | |||
the server. This response contains discovery information, and in the | the server. This response contains error information, and in the | |||
success case no discovery information is necessary so the response is | success case the error response is empty. Like other messages, and | |||
empty. Like other messages, and in accordance with the IMAP SASL | in accordance with the IMAP SASL binding, the empty response is | |||
binding, the empty response is base64-encoded. | base64-encoded. | |||
5.2. MAC Authentication with Channel Binding | 5.2. MAC Authentication with Channel Binding | |||
This example shows a channel binding failure. The example sends the | This example shows a channel binding failure. The example sends the | |||
same request as above, but in the context of an OAUTH-PLUS exchange | same request as above, but in the context of an OAUTH-PLUS exchange | |||
the channel binding information is missing. Note that line breaks | the channel binding information is missing. Note that line breaks | |||
are inserted for readability. | are inserted for readability. | |||
S: * CAPABILITY IMAP4rev1 AUTH=OAUTH SASL-IR IMAP4rev1 Server Ready | S: * CAPABILITY IMAP4rev1 AUTH=OAUTH SASL-IR IMAP4rev1 Server Ready | |||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE MAC R0VUIC8/Y2JkYXRhPSJTRzkzSUdKcFp5QnBjeUJoSUZSTVV5Q | C: t1 AUTHENTICATE MAC aG9zdD1zZXJ2ZXIuZXhhbXBsZS5jb20BcG9ydD0xNDMBYXV0a | |||
m1hVzVoYkNCdFpYTnpZV2RsUHdvPSIgSFRUUC8xLjENCkhvc3Q6IHNlcnZlci5leGFtcG | D1NQUMgdG9rZW49Img0ODBkanM5M2hkOCIsdGltZXN0YW1wPSIxMzcxMzEyMDAiLG5vbm | |||
xlLmNvbQ0KVXNlcjogdXNlckBleGFtcGxlLmNvbQ0KQXV0aG9yaXphdGlvbjogTUFDIHR | NlPSJkajgzaHM5cyIsc2lnbmF0dXJlPSJZVFZqeU5TdWpZczFXc0R1ckZudkZpNEpLNm8 | |||
va2VuPSJoNDgwZGpzOTNoZDgiLHRpbWVzdGFtcD0iMTM3MTMxMjAwIixub25jZT0iZGo4 | 9IgFjYmRhdGE9U0c5M0lHSnBaeUJwY3lCaElGUk1VeUJtYVc1aGJDQnRaWE56WVdkbFB3 | |||
M2hzOXMiLHNpZ25hdHVyZT0iV1c5MUlHMTFjM1FnWW1VZ1ltOXlaV1F1SUFvPSINCg0K | bz0BAQ== | |||
S: + | S: + | |||
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 is: | decoded initial client response (with %x01 represented as ^A and long | |||
lines wrapped for readability) is: | ||||
GET /?cbdata="SG93IGJpZyBpcyBhIFRMUyBmaW5hbCBtZXNzYWdlPwo=" HTTP/1.1 | - | |||
Host: server.example.com | host=server.example.com^A | |||
User: user@example.com | port=143^A | |||
Authorization: MAC token="h480djs93hd8",timestamp="137131200", | auth=MAC token="h480djs93hd8",timestamp="137131200",nonce="dj83hs9s", | |||
nonce="dj83hs9s",signature="WW91IG11c3QgYmUgYm9yZWQuIAo=" | signature="YTVjyNSujYs1WsDurFnvFi4JK6o="^A | |||
cbdata=SG93IGJpZyBpcyBhIFRMUyBmaW5hbCBtZXNzYWdlPwo=^A^A | ||||
The line containing just a "+" and a space is an empty response from | The line containing just a "+" and a space is an empty response from | |||
the server. This response contains discovery information, and in the | the server. This response contains discovery information, and in the | |||
success case no discovery information is necessary so the response is | success case no discovery information is necessary so the response is | |||
empty. Like other messages, and in accordance with the IMAP SASL | empty. Like other messages, and in accordance with the IMAP SASL | |||
binding, the empty response is base64-encoded. | binding, the empty response is base64-encoded. | |||
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 discovery | Authorization header, which is how a client can query for the needed | |||
information. 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=OAUTH SASL-IR IMAP4rev1 Server Ready | |||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE OAUTH R0VUIC8gSFRUUC8xLjENClVzZXI6IHNjb290ZXJAYW | C: t1 AUTHENTICATE OAUTH aG9zdD1zZXJ2ZXIuZXhhbXBsZS5jb20BcG9ydD0xND | |||
x0YXZpc3RhLmNvbQ0KSG9zdDogaW1hcC55YWhvby5jb20NCkF1dGhlbnRpY2F0ZT | MBYXV0aD0BAQ== | |||
ogDQoNCg== | S: + ewoic3RhdHVzIjoiNDAxIiwKInNjb3BlIjoiZXhhbXBsZV9zY29wZSIKfQo= | |||
S: + SFRUUC8xLjEgNDAxIFVuYXV0aG9yaXplZA0KV1dXLUF1dGhlbnRpY2F0ZTogQk | ||||
VBUkVSIHJlYWxtPSJleGFtcGxlLmNvbSINCkxpbms6IDxodHRwczovL2xvZ2luLn | ||||
lhaG9vLmNvbS9vYXV0aD4gcmVsPSJvYXV0aDItYXV0aGVudGljYXRvciIgIA0KTG | ||||
luazogPGh0dHBzOi8vbG9naW4ueWFob28uY29tL29hdXRoPiByZWw9Im91YXRoMi | ||||
10b2tlbiINCg0K | ||||
S: t1 NO SASL authentication failed | S: t1 NO SASL authentication failed | |||
The decoded initial client response is: | The decoded initial client response is: | |||
GET / HTTP/1.1 | host=server.example.com^Aport=143^Aauth=^A^A | |||
User: alice@example.com | ||||
Host: imap.example.com | ||||
Authorization: | ||||
The decoded server discovery response is: | The decoded server error response is: | |||
HTTP/1.1 401 Unauthorized | { | |||
WWW-Authenticate: BEARER realm="example.com" | "status":"401", | |||
Link: <https://login.example.com/oauth> rel="oauth2-authenticator" | "scope":"example_scope" | |||
Link: <https://login.example.com/oauth> rel="oauth2-token" | } | |||
5.4. Failed Channel Binding | 5.4. Failed Channel Binding | |||
This example shows a channel binding failure in a discovery 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 SASL-IR IMAP4rev1 Server Ready | S: * CAPABILITY IMAP4rev1 AUTH=OAUTH SASL-IR IMAP4rev1 Server Ready | |||
S: t0 OK Completed | S: t0 OK Completed | |||
C: t1 AUTHENTICATE OAUTH R0VUIC8/Y2JkYXRhPSIiIEhUVFAvMS4xDQpVc2VyOi | C: t1 AUTHENTICATE OAUTH aG9zdD1zZXJ2ZXIuZXhhbXBsZS5jb20BcG9ydD0xND | |||
BhbGljZUBleGFtcGxlLmNvbQ0KSG9zdDogaW1hcC5leGFtcGxlLmNvbQ0KQXV0aG | MBYXV0aD0BY2JkYXRhPQEB | |||
9yaXphdGlvbjoNCg0K | S: + ewoic3RhdHVzIjoiNDEyIiwKInNjb3BlIjoiZXhhbXBsZV9zY29wZSIKfQ== | |||
S: + SFRUUC8xLjEgNDEyIFByZWNvbmRpdGlvbiBGYWlsZWQNCg0KDQo= | ||||
S: t1 NO SASL authentication failed | S: t1 NO SASL authentication failed | |||
The decoded initial client response is: | The decoded initial client response is: | |||
GET /?cbdata="" HTTP/1.1 | host=server.example.com^Aport=143^Aauth=^Acbdata=^A^A | |||
User: alice@example.com | ||||
Host: imap.example.com | ||||
Authorization: | ||||
The decoded server response is: | The decoded server response is: | |||
HTTP/1.1 412 Precondition Failed | { | |||
"status":"412", | ||||
"scope":"example_scope" | ||||
} | ||||
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 | |||
particular, TLS 1.2 or an equivalent secure channel MUST be | particular, TLS 1.2 or an equivalent secure channel MUST be | |||
implemented and its usage is RECOMMENDED. | implemented and its usage is RECOMMENDED. | |||
Channel binding in this mechanism has different properties based on | Channel binding in this mechanism has different properties based on | |||
the authentication scheme used. Channel binding to TLS with a bearer | the authentication scheme used. Channel binding to TLS with a bearer | |||
token provides only a binding to the TLS layer. Authentication | token provides only a binding to the TLS layer. Authentication | |||
schemes like MAC tokens have a signature over the channel binding | schemes like MAC tokens can implement a signature over the channel | |||
information. These provide additional protection against a man in | binding information. These provide additional protection against a | |||
the middle attacks, and the MAC authorization header is bound to the | man in the middle attacks, and the MAC authorization header is bound | |||
channel and only valid in that context. | to the channel and only valid in that context. | |||
It is possible that SASL will be authenticating a connection and the | It is possible that SASL will be authenticating a connection and the | |||
life of that connection may outlast the life of the token used to | life of that connection may outlast the life of the token used to | |||
authenticate it. This is a common problem in application protocols | authenticate it. This is a common problem in application protocols | |||
where connections are long-lived, and not a problem with this | where connections are long-lived, and not a problem with this | |||
mechanism per se. Servers MAY unilaterally disconnect clients in | mechanism per se. Servers MAY unilaterally disconnect clients in | |||
accordance with the application protocol. | accordance with the application protocol. | |||
An OAuth credential is not equivalent to the password or primary | An OAuth credential is not equivalent to the password or primary | |||
account credential. There are protocols like XMPP that allow actions | account credential. There are protocols like XMPP that allow actions | |||
like change password. The server SHOULD ensure that actions taken in | like change password. The server SHOULD ensure that actions taken in | |||
the authenticated channel are appropriate to the strength of the | the authenticated channel are appropriate to the strength of the | |||
presented credential. | presented credential. | |||
It is possible for an application server running on Evil.example.com | Tokens have a lifetime associated with them. Reducing the lifetime | |||
to tell a client to request a token from Good.example.org. A client | of a token provides security benefits in case that tokens leak. In | |||
following these instructions will pass a token from Good to Evil. | addition a previously obtained token MAY be revoked or rendered | |||
This is by design, since it is possible that Good and Evil are merely | invalid at any time. The client MAY request a new access token for | |||
names, not descriptive, and that this is an innocuous activity | each connection to a resource server, but it SHOULD cache and re-use | |||
between cooperating two servers in different domains. For instance, | access credentials that appear to be valid. | |||
a site might operate their authentication service in-house, but | ||||
outsource their mail systems to an external entity. | ||||
Tokens have a lifetime associated with them. Reducing both the | ||||
lifetime of a token provides security benefits in case that tokens | ||||
leak. In addition a previously obtained token MAY be revoked or | ||||
rendered invalid at any time. The client MAY request a new access | ||||
token for each connection to a resource server, but it SHOULD cache | ||||
and re-use access credentials that appear to be valid. | ||||
7. 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: OAUTH | |||
Security Considerations: See this document | Security Considerations: See this document | |||
skipping to change at page 19, line 44 | skipping to change at page 18, line 5 | |||
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 this GSS mechanism in | |||
the SMI numbers registry, with the prefix of | 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. | |||
7.3. Link Type Registration | ||||
Pursuant to [RFC5988] The following link type registrations [[will | ||||
be]] registered by mail to link-relations@ietf.org. | ||||
7.3.1. OAuth 2 Authentication Endpoint | ||||
o Relation Name: oauth2-authenticator | ||||
o Description: An OAuth 2.0 authentication endpoint. | ||||
o Reference: | ||||
o Notes: This link type indicates an OAuth 2.0 authentication | ||||
endpoint that can be used for user authentication/authorization | ||||
for the endpoint providing the link. | ||||
o Application Data: [optional] | ||||
7.3.2. OAuth 2 Token Endpoint | ||||
o Relation Name: oauth2-token | ||||
o Description: The OAuth token endpoint used to get tokens for | ||||
access. | ||||
o Reference: | ||||
o Notes: The OAuth 2.0 token endpoint to be used for obtaining | ||||
tokens to access the endpoint providing the link. | ||||
o Application Data: This link type has one link-extension "grant- | ||||
types", which is the OAuth 2.0 grant types that can be used at the | ||||
token endpoint to obtain a token. This is not an exclusive list, | ||||
it provides a hint to the application of what SHOULD be valid. A | ||||
token endpoint MAY support additional grant types not advertised | ||||
by a resource endpoint. | ||||
7.3.3. OAuth 1.0a Request Initiation Endpoint | ||||
o Relation Name: oauth-initiate | ||||
o Description: The OAuth 1.0a request initiation endpoint used to | ||||
get tokens for access. | ||||
o Reference: | ||||
o Notes: The OAuth 1.0a endpoint used to initiate the sequence, this | ||||
temporary request is what the user approves to grant access to the | ||||
resource. | ||||
o Application Data: | ||||
7.3.4. OAuth 1.0a Authorization Endpoint | ||||
o Relation Name: oauth-authorize | ||||
o Description: The OAuth 1.0a authorization endpoint used to approve | ||||
an access request. | ||||
o Reference: | ||||
o Notes: | ||||
o Application Data: | ||||
7.3.5. OAuth 1.0a Token Endpoint | ||||
o Relation Name: oauth-token | ||||
o Description: The OAuth 1.0a token endpoint used to get tokens for | ||||
access. | ||||
o Reference: | ||||
o Notes: | ||||
o Application Data: | ||||
8. Appendix A -- Document History | 8. Appendix A -- Document History | |||
[[ to be removed by RFC editor before publication as an RFC ]] | [[ to be removed by RFC editor before publication as an RFC ]] | |||
-04 | -01 | |||
o Editorial clean-up and text in introduction improved. | ||||
o Added GSS-API support | ||||
-03 | ||||
o Fixing channel binding, not tls-unique specific. Also defining | ||||
how the CB data is properly generated. | ||||
o Various small editorial changes and embarassing spelling fixes. | ||||
-02 | ||||
o Filling out Channel Binding | ||||
o Added text clarifying how to bind to the 2 kinds of SASL | o Ripping out discovery. Changed to refer to I-D.jones-appsawg- | |||
identities. | webfinger instead of WF and SWD older drafts. | |||
-01 | o Replacing HTTP as the message format and adjusted all examples. | |||
o Bringing this into line with draft 12 of the core spec, the bearer | -00 | |||
token spec, and references the MAC token spec | ||||
o Changing discovery over to using the Link header construct from | o Renamed draft into proper IETF naming format now that it's | |||
RFC5988. | adopted. | |||
o Added the seeds of channel binding. | o Minor fixes. | |||
-00 | -00 | |||
o Initial revision | o Initial revision | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[I-D.ietf-oauth-v2] | [I-D.ietf-oauth-v2] | |||
Hammer-Lahav, E., Recordon, D., and D. Hardt, "The OAuth | Hammer-Lahav, E., Recordon, D., and D. Hardt, "The OAuth | |||
2.0 Authorization Protocol", draft-ietf-oauth-v2-22 (work | 2.0 Authorization Framework", draft-ietf-oauth-v2-26 (work | |||
in progress), September 2011. | in progress), May 2012. | |||
[I-D.ietf-oauth-v2-bearer] | [I-D.ietf-oauth-v2-bearer] | |||
Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 | Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 | |||
Authorization Protocol: Bearer Tokens", | Authorization Protocol: Bearer Tokens", | |||
draft-ietf-oauth-v2-bearer-14 (work in progress), | draft-ietf-oauth-v2-bearer-19 (work in progress), | |||
November 2011. | April 2012. | |||
[I-D.ietf-oauth-v2-http-mac] | [I-D.ietf-oauth-v2-http-mac] | |||
Hammer-Lahav, E., Barth, A., and B. Adida, "HTTP | Hammer-Lahav, E., "HTTP Authentication: MAC Access | |||
Authentication: MAC Access Authentication", | Authentication", draft-ietf-oauth-v2-http-mac-01 (work in | |||
draft-ietf-oauth-v2-http-mac-00 (work in progress), | progress), February 2012. | |||
May 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. | |||
[RFC2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | ||||
Specifications: ABNF", RFC 2234, November 1997. | ||||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
RFC 2617, June 1999. | RFC 2617, June 1999. | |||
[RFC2743] Linn, J., "Generic Security Service Application Program | [RFC2743] Linn, J., "Generic Security Service Application Program | |||
Interface Version 2, Update 1", RFC 2743, January 2000. | Interface Version 2, Update 1", RFC 2743, January 2000. | |||
[RFC3174] Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1 | [RFC3174] Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1 | |||
(SHA1)", RFC 3174, September 2001. | (SHA1)", RFC 3174, September 2001. | |||
[RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | [RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | |||
Security Layer (SASL)", RFC 4422, June 2006. | Security Layer (SASL)", RFC 4422, June 2006. | |||
[RFC4627] Crockford, D., "The application/json Media Type for | ||||
JavaScript Object Notation (JSON)", RFC 4627, July 2006. | ||||
[RFC5056] Williams, N., "On the Use of Channel Bindings to Secure | [RFC5056] Williams, N., "On the Use of Channel Bindings to Secure | |||
Channels", RFC 5056, November 2007. | Channels", RFC 5056, November 2007. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
(TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
[RFC5801] Josefsson, S. and N. Williams, "Using Generic Security | [RFC5801] Josefsson, S. and N. Williams, "Using Generic Security | |||
Service Application Program Interface (GSS-API) Mechanisms | Service Application Program Interface (GSS-API) Mechanisms | |||
in Simple Authentication and Security Layer (SASL): The | in Simple Authentication and Security Layer (SASL): The | |||
GS2 Mechanism Family", RFC 5801, July 2010. | GS2 Mechanism Family", RFC 5801, July 2010. | |||
skipping to change at page 24, line 26 | skipping to change at page 20, line 30 | |||
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | |||
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | |||
Verification of Domain-Based Application Service Identity | Verification of Domain-Based Application Service Identity | |||
within Internet Public Key Infrastructure Using X.509 | within Internet Public Key Infrastructure Using X.509 | |||
(PKIX) Certificates in the Context of Transport Layer | (PKIX) Certificates in the Context of Transport Layer | |||
Security (TLS)", RFC 6125, March 2011. | Security (TLS)", RFC 6125, March 2011. | |||
9.2. Informative References | 9.2. Informative References | |||
[I-D.hammer-hostmeta] | [I-D.jones-appsawg-webfinger] | |||
Hammer-Lahav, E. and B. Cook, "Web Host Metadata", | Jones, P., Salgueiro, G., and J. Smarr, "WebFinger", | |||
draft-hammer-hostmeta-17 (work in progress), | draft-jones-appsawg-webfinger-05 (work in progress), | |||
September 2011. | May 2012. | |||
[I-D.jones-simple-web-discovery] | ||||
Jones, M. and Y. Goland, "Simple Web Discovery (SWD)", | ||||
draft-jones-simple-web-discovery-01 (work in progress), | ||||
July 2011. | ||||
[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. | |||
Authors' Addresses | Authors' Addresses | |||
William Mills | William Mills | |||
Yahoo! Inc. | Yahoo! Inc. | |||
Phone: | Phone: | |||
Email: wmills@yahoo-inc.com | Email: wmills@yahoo-inc.com | |||
Tim Showalter | Tim Showalter | |||
Yahoo! Inc. | ||||
Phone: | Phone: | |||
Email: timshow@yahoo-inc.com | Email: tjs@psaux.com | |||
Hannes Tschofenig | Hannes Tschofenig | |||
Nokia Siemens Networks | Nokia Siemens Networks | |||
Linnoitustie 6 | Linnoitustie 6 | |||
Espoo 02600 | Espoo 02600 | |||
Finland | Finland | |||
Phone: +358 (50) 4871445 | Phone: +358 (50) 4871445 | |||
Email: Hannes.Tschofenig@gmx.net | Email: Hannes.Tschofenig@gmx.net | |||
URI: http://www.tschofenig.priv.at | URI: http://www.tschofenig.priv.at | |||
End of changes. 73 change blocks. | ||||
416 lines changed or deleted | 237 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/ |