diff options
Diffstat (limited to 'doc/specs/draft-ietf-oauth-v2-16.txt')
-rw-r--r-- | doc/specs/draft-ietf-oauth-v2-16.txt | 3080 |
1 files changed, 0 insertions, 3080 deletions
diff --git a/doc/specs/draft-ietf-oauth-v2-16.txt b/doc/specs/draft-ietf-oauth-v2-16.txt deleted file mode 100644 index e997172..0000000 --- a/doc/specs/draft-ietf-oauth-v2-16.txt +++ /dev/null @@ -1,3080 +0,0 @@ - - - -Network Working Group E. Hammer-Lahav, Ed. -Internet-Draft Yahoo! -Obsoletes: 5849 (if approved) D. Recordon -Intended status: Standards Track Facebook -Expires: November 20, 2011 D. Hardt - Microsoft - May 19, 2011 - - - The OAuth 2.0 Authorization Protocol - draft-ietf-oauth-v2-16 - -Abstract - - The OAuth 2.0 authorization protocol enables a third-party - application to obtain limited access to an HTTP service, either on - behalf of an end-user by orchestrating an approval interaction - between the end-user and the HTTP service, or by allowing the third- - party application to obtain access on its own behalf. - -Status of this Memo - - This Internet-Draft is submitted in full conformance with the - provisions of BCP 78 and BCP 79. - - Internet-Drafts are working documents of the Internet Engineering - Task Force (IETF). Note that other groups may also distribute - working documents as Internet-Drafts. The list of current Internet- - Drafts is at http://datatracker.ietf.org/drafts/current/. - - Internet-Drafts are draft documents valid for a maximum of six months - and may be updated, replaced, or obsoleted by other documents at any - time. It is inappropriate to use Internet-Drafts as reference - material or to cite them other than as "work in progress." - - This Internet-Draft will expire on November 20, 2011. - -Copyright Notice - - Copyright (c) 2011 IETF Trust and the persons identified as the - document authors. All rights reserved. - - This document is subject to BCP 78 and the IETF Trust's Legal - Provisions Relating to IETF Documents - (http://trustee.ietf.org/license-info) in effect on the date of - publication of this document. Please review these documents - carefully, as they describe your rights and restrictions with respect - to this document. Code Components extracted from this document must - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 1] - -Internet-Draft OAuth 2.0 May 2011 - - - include Simplified BSD License text as described in Section 4.e of - the Trust Legal Provisions and are provided without warranty as - described in the Simplified BSD License. - - -Table of Contents - - 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 - 1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 5 - 1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 5 - 1.3. Access Token . . . . . . . . . . . . . . . . . . . . . . 6 - 1.4. Authorization Grant . . . . . . . . . . . . . . . . . . . 7 - 1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 9 - 1.6. Document Structure . . . . . . . . . . . . . . . . . . . 11 - 1.7. Notational Conventions . . . . . . . . . . . . . . . . . 11 - 2. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . . 11 - 2.1. Authorization Endpoint . . . . . . . . . . . . . . . . . 12 - 2.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . 13 - 3. Client Authentication . . . . . . . . . . . . . . . . . . . . 14 - 3.1. Client Password Authentication . . . . . . . . . . . . . 15 - 3.2. Other Client Authentication Methods . . . . . . . . . . . 16 - 4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 16 - 4.1. Authorization Code . . . . . . . . . . . . . . . . . . . 16 - 4.2. Implicit Grant . . . . . . . . . . . . . . . . . . . . . 22 - 4.3. Resource Owner Password Credentials . . . . . . . . . . . 28 - 4.4. Client Credentials . . . . . . . . . . . . . . . . . . . 30 - 4.5. Extensions . . . . . . . . . . . . . . . . . . . . . . . 32 - 5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 33 - 5.1. Successful Response . . . . . . . . . . . . . . . . . . . 33 - 5.2. Error Response . . . . . . . . . . . . . . . . . . . . . 34 - 6. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 36 - 7. Accessing Protected Resources . . . . . . . . . . . . . . . . 37 - 7.1. Access Token Types . . . . . . . . . . . . . . . . . . . 38 - 8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 38 - 8.1. Defining Access Token Types . . . . . . . . . . . . . . . 38 - 8.2. Defining New Endpoint Parameters . . . . . . . . . . . . 39 - 8.3. Defining New Authorization Grant Types . . . . . . . . . 39 - 8.4. Defining Additional Error Codes . . . . . . . . . . . . . 39 - 9. Native Applications . . . . . . . . . . . . . . . . . . . . . 40 - 10. Security Considerations . . . . . . . . . . . . . . . . . . . 41 - 10.1. Client Authentication . . . . . . . . . . . . . . . . . . 42 - 10.2. Client Impersonation . . . . . . . . . . . . . . . . . . 42 - 10.3. Access Token Credentials . . . . . . . . . . . . . . . . 43 - 10.4. Refresh Tokens . . . . . . . . . . . . . . . . . . . . . 43 - 10.5. Request Confidentiality . . . . . . . . . . . . . . . . . 44 - 10.6. Endpoints Authenticity . . . . . . . . . . . . . . . . . 44 - 10.7. Credentials Guessing Attacks . . . . . . . . . . . . . . 44 - 10.8. Phishing Attacks . . . . . . . . . . . . . . . . . . . . 44 - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 2] - -Internet-Draft OAuth 2.0 May 2011 - - - 10.9. Authorization Codes . . . . . . . . . . . . . . . . . . . 45 - 10.10. Session Fixation . . . . . . . . . . . . . . . . . . . . 45 - 10.11. Redirection URI Validation . . . . . . . . . . . . . . . 46 - 10.12. Resource Owner Password Credentials . . . . . . . . . . . 46 - 10.13. XSRF/CSRF Prevention . . . . . . . . . . . . . . . . . . 46 - 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 - 11.1. The OAuth Access Token Type Registry . . . . . . . . . . 46 - 11.2. The OAuth Parameters Registry . . . . . . . . . . . . . . 48 - 11.3. The OAuth Extensions Error Registry . . . . . . . . . . . 51 - 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 52 - Appendix A. Editor's Notes . . . . . . . . . . . . . . . . . . . 53 - 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 53 - 13.1. Normative References . . . . . . . . . . . . . . . . . . 53 - 13.2. Informative References . . . . . . . . . . . . . . . . . 54 - Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 55 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 3] - -Internet-Draft OAuth 2.0 May 2011 - - -1. Introduction - - In the traditional client-server authentication model, the client - accesses a protected resource on the server by authenticating with - the server using the resource owner's credentials. In order to - provide third-party applications access to protected resources, the - resource owner shares its credentials with the third-party. This - creates several problems and limitations: - - o Third-party applications are required to store the resource- - owner's credentials for future use, typically a password in clear- - text. - o Servers are required to support password authentication, despite - the security weaknesses created by passwords. - o Third-party applications gain overly broad access to the resource- - owner's protected resources, leaving resource owners without any - ability to restrict duration or access to a limited subset of - resources. - o Resource owners cannot revoke access to an individual third-party - without revoking access to all third-parties, and must do so by - changing their password. - - OAuth addresses these issues by introducing an authorization layer - and separating the role of the client from that of the resource - owner. In OAuth, the client requests access to resources controlled - by the resource owner and hosted by the resource server, and is - issued a different set of credentials than those of the resource - owner. - - Instead of using the resource owner's credentials to access protected - resources, the client obtains an access token - a string denoting a - specific scope, duration, and other access attributes. Access tokens - are issued to third-party clients by an authorization server with the - approval of the resource owner. The client uses the access token to - access the protected resources hosted by the resource server. - - For example, a web end-user (resource owner) can grant a printing - service (client) access to her protected photos stored at a photo - sharing service (resource server), without sharing her username and - password with the printing service. Instead, she authenticates - directly with a server trusted by the photo sharing service - (authorization server) which issues the printing service delegation- - specific credentials (access token). - - This specification is designed for use with HTTP [RFC2616]. The use - of OAuth with any transport protocol other than HTTP is undefined. - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 4] - -Internet-Draft OAuth 2.0 May 2011 - - -1.1. Roles - - OAuth includes four roles working together to grant and provide - access to protected resources - access restricted resources which - require authentication to access: - - resource owner - An entity capable of granting access to a protected resource. - When the resource owner is a person, it is referred to as an end- - user. - resource server - The server hosting the protected resources, capable of accepting - and responding to protected resource requests using access tokens. - client - An application making protected resource requests on behalf of the - resource owner and with its authorization. - authorization server - The server issuing access tokens to the client after successfully - authenticating the resource owner and obtaining authorization. - - The interaction between the authorization server and resource server - is beyond the scope of this specification. The authorization server - may be the same server as the resource server or a separate entity. - A single authorization server may issue access tokens accepted by - multiple resource servers. - -1.2. Protocol Flow - - When interacting with the authorization server, the client identifies - itself using a set of client credentials which include a client - identifier and other authentication attributes. The means through - which the client obtains its credentials are beyond the scope of this - specification, but typically involve registration with the - authorization server. - - - - - - - - - - - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 5] - -Internet-Draft OAuth 2.0 May 2011 - - - +--------+ +---------------+ - | |--(A)- Authorization Request ->| Resource | - | | | Owner | - | |<-(B)-- Authorization Grant ---| | - | | +---------------+ - | | - | | Authorization Grant & +---------------+ - | |--(C)--- Client Credentials -->| Authorization | - | Client | | Server | - | |<-(D)----- Access Token -------| | - | | +---------------+ - | | - | | +---------------+ - | |--(E)----- Access Token ------>| Resource | - | | | Server | - | |<-(F)--- Protected Resource ---| | - +--------+ +---------------+ - - - Figure 1: Abstract Protocol Flow - - The abstract flow illustrated in Figure 1 describes the interaction - between the four roles and includes the following steps: - - (A) The client requests authorization from the resource owner. The - authorization request can be made directly to the resource owner - (as shown), or preferably indirectly via an intermediary such as - an authorization server. - (B) The client receives an authorization grant which represents the - authorization provided by the resource owner. The authorization - grant type depends on the method used by the client and - supported by the authorization server to obtain it. - (C) The client requests an access token by authenticating with the - authorization server using its client credentials (prearranged - between the client and authorization server) and presenting the - authorization grant. - (D) The authorization server validates the client credentials and - the authorization grant, and if valid issues an access token. - (E) The client requests the protected resource from the resource - server and authenticates by presenting the access token. - (F) The resource server validates the access token, and if valid, - serves the request. - -1.3. Access Token - - An access token is a string representing an authorization issued to - the client. The string is usually opaque to the client. Tokens - represent specific scopes and durations of access, granted by the - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 6] - -Internet-Draft OAuth 2.0 May 2011 - - - resource owner, and enforced by the resource server and authorization - server. - - The token may denote an identifier used to retrieve the authorization - information, or self-contain the authorization information in a - verifiable manner (i.e. a token string consisting of some data and a - signature). Additional authentication credentials may be required in - order for the client to use a token. - - The access token provides an abstraction layer, replacing different - authorization constructs (e.g. username and password) with a single - token understood by the resource server. This abstraction enables - issuing access tokens more restrictive than the authorization grant - used to obtain them, as well as removing the resource server's need - to understand a wide range of authentication methods. - - Access tokens can have different formats, structures, and methods of - utilization (e.g. cryptographic properties) based on the resource - server security requirements. Access token attributes and the - methods used to access protected resources are beyond the scope of - this specification and are defined by companion specifications. - -1.4. Authorization Grant - - An authorization grant is a general term used to describe the - intermediate credentials representing the resource owner - authorization (to access its protected resources), and serves as an - abstraction layer. An authorization grant is used by the client to - obtain an access token. - - This specification defines four grant types: authorization code, - implicit, resource owner password credentials, and client - credentials, as well as an extensibility mechanism for defining - additional types. - -1.4.1. Authorization Code - - The authorization code is obtained by using an authorization server - as an intermediary between the client and resource owner. Instead of - requesting authorization directly from the resource owner, the client - directs the resource owner to an authorization server (via its user- - agent as defined in [RFC2616]), which in turn directs the resource - owner back to the client with the authorization code. - - Before directing the resource owner back to the client with the - authorization code, the authorization server authenticates the - resource owner and obtains authorization. Because the resource owner - only authenticates with the authorization server, the resource - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 7] - -Internet-Draft OAuth 2.0 May 2011 - - - owner's credentials are never shared with the client. - - The authorization code provides a few important security benefits - such as the ability to authenticate the client and issuing the access - token directly to the client without potentially exposing it to - others, including the resource owner. - -1.4.2. Implicit - - When an access token is issued to the client directly as the result - of the resource owner authorization, without an intermediary - authorization grant (such as an authorization code), the grant is - considered implicit. - - When issuing an implicit grant, the authorization server cannot - verify the identity of the client, and the access token may be - exposed to the resource owner or other applications with access to - the resource owner's user-agent. - - Implicit grants improve the responsiveness and efficiency of some - clients (such as a client implemented as an in-browser application) - since it reduces the number of round trips required to obtain an - access token. - -1.4.3. Resource Owner Password Credentials - - The resource owner password credentials (e.g. a username and - password) can be used directly as an authorization grant to obtain an - access token. The credentials should only be used when there is a - high degree of trust between the resource owner and the client (e.g. - its computer operating system or a highly privileged application), - and when other authorization grant types are not available (such as - an authorization code). - - Even though this grant type requires direct client access to the - resource owner credentials, the resource owner credentials are used - for a single request and are exchanged for an access token. Unlike - the HTTP Basic authentication scheme defined in [RFC2617], this grant - type (when combined with a refresh token) eliminates the need for the - client to store the resource-owner credentials for future use. - -1.4.4. Client Credentials - - The client credentials can be used as an authorization grant when the - authorization scope is limited to the protected resources under the - control of the client, or to protected resources previously arranged - with the authorization server. Client credentials are used as an - authorization grant typically when the client is acting on its own - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 8] - -Internet-Draft OAuth 2.0 May 2011 - - - behalf (the client is also the resource owner). - -1.4.5. Extensions - - Additional grant types may be defined to provide a bridge between - OAuth and other protocols. For example, - [I-D.ietf-oauth-saml2-bearer] defines a SAML 2.0 - [OASIS.saml-core-2.0-os] bearer assertion grant type, which can be - used to obtain an access token. - -1.5. Refresh Token - - A refresh token is optionally issued by the authorization server to - the client together with an access token. The client can use the - refresh token to request another access token based on the same - authorization, without having to involve the resource owner again, or - having to retain the original authorization grant used to obtain the - initial access token. - - A refresh token is a string representing the authorization granted to - the client by the resource owner. The string is usually opaque to - the client. The token may denote an identifier used to retrieve the - authorization information, or self-contain the authorization - information in a verifiable manner. The refresh token is bound to - the client it was issued to, and its usage requires client - authentication. - - The refresh token can be used to obtain a new access token when the - current access token expires (access tokens may have a shorter - lifetime than authorized by the resource owner), no longer valid, or - to obtain additional access tokens with identical or narrower scope. - - - - - - - - - - - - - - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 9] - -Internet-Draft OAuth 2.0 May 2011 - - - +--------+ Authorization Grant & +---------------+ - | |--(A)-------- Client Credentials --------->| | - | | | | - | |<-(B)----------- Access Token -------------| | - | | & Refresh Token | | - | | | | - | | +----------+ | | - | |--(C)---- Access Token ---->| | | | - | | | | | | - | |<-(D)- Protected Resource --| Resource | | Authorization | - | Client | | Server | | Server | - | |--(E)---- Access Token ---->| | | | - | | | | | | - | |<-(F)- Invalid Token Error -| | | | - | | +----------+ | | - | | | | - | | Refresh Token & | | - | |--(G)-------- Client Credentials --------->| | - | | | | - | |<-(H)----------- Access Token -------------| | - +--------+ & Optional Refresh Token +---------------+ - - - Figure 2: Refreshing an Expired Access Token - - The flow illustrated in Figure 2 includes the following steps: - - (A) The client requests an access token by authenticating with the - authorization server using its client credentials, and - presenting an authorization grant. - (B) The authorization server validates the client credentials and - the authorization grant, and if valid issues an access token and - a refresh token. - (C) The client makes a protected resource requests to the resource - server by presenting the access token. - (D) The resource server validates the access token, and if valid, - serves the request. - (E) Steps (C) and (D) repeat until the access token expires. If the - client knows the access token expired, it skips to step (G), - otherwise it makes another protected resource request. - (F) Since the access token is invalid, the resource server returns - an invalid token error. - (G) The client requests a new access token by authenticating with - the authorization server using its client credentials, and - presenting the refresh token. - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 10] - -Internet-Draft OAuth 2.0 May 2011 - - - (H) The authorization server validates the client credentials and - the refresh token, and if valid issues a new access token (and - optionally, a new refresh token). - -1.6. Document Structure - - This specification is organized into the following sections: - - o Section 2 - describes the two endpoints used to obtain and utilize - the various authorization grant types. - o Section 3 - describes client identification and authentication in - general, and provides one such method for client authentication - using password credentials. - o Section 4 - describes the complete flow for each authorization - grant type, including requesting authorization, authorization - response, and requesting an access token. - o Section 5 - describes the common access token response used for - all non-implicit authorization grant types. - o Section 6 - describes the use of a refresh token to obtain - additional access tokens using the same resource owner - authorization. - o Section 7 - describes how access tokens are used to access - protected resources. - o Section 8 - describes how to extend certain elements of the - protocol. - o Section 9 - provides a security analysis of the protocol. - -1.7. Notational Conventions - - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', - 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in this - specification are to be interpreted as described in [RFC2119]. - - This specification uses the Augmented Backus-Naur Form (ABNF) - notation of [RFC5234]. - - Unless otherwise noted, all the protocol parameter names and values - are case sensitive. - - -2. Protocol Endpoints - - The authorization process utilizes two endpoints (HTTP resources): - - o Authorization endpoint - used to obtain authorization from the - resource owner via user-agent redirection. - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 11] - -Internet-Draft OAuth 2.0 May 2011 - - - o Token endpoint - used to exchange an authorization grant for an - access token, typically with client authentication. - - Not every authorization grant type utilizes both endpoints. - Extension grant types MAY define additional endpoints as needed. - -2.1. Authorization Endpoint - - The authorization endpoint is used to interact with the resource - owner and obtain authorization which is expressed explicitly as an - authorization code (exchanged for an access token), or implicitly by - direct issuance of an access token. - - The authorization server MUST first verify the identity of the - resource owner. The way in which the authorization server - authenticates the resource owner (e.g. username and password login, - session cookies) is beyond the scope of this specification. - - The means through which the client obtains the location of the - authorization endpoint are beyond the scope of this specification but - is typically provided in the service documentation. The endpoint URI - MAY include a query component as defined by [RFC3986] section 3, - which MUST be retained when adding additional query parameters. - - Since requests to the authorization endpoint result in user - authentication and the transmission of clear-text credentials (in the - HTTP response), the authorization server MUST require the use of a - transport-layer security mechanism when sending requests to the - authorization endpoint. The authorization server MUST support TLS - 1.2 as defined in [RFC5246], and MAY support additional transport- - layer mechanisms meeting its security requirements. - - The authorization server MUST support the use of the HTTP "GET" - method [RFC2616] for the authorization endpoint, and MAY support the - use of the "POST" method as well. - - The REQUIRED "response_type" request parameter is used to identify - which grant type the client is requesting: authorization code or - implicit, described in Section 4.1.1 and Section 4.2.1 respectively. - If the request is missing the "response_type" parameter, the - authorization server SHOULD return an error response as described in - Section 4.1.2.1. - - Parameters sent without a value MUST be treated as if they were - omitted from the request. The authorization server SHOULD ignore - unrecognized request parameters. - - Request and response parameters MUST NOT repeat more than once, - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 12] - -Internet-Draft OAuth 2.0 May 2011 - - - unless noted otherwise. - -2.1.1. Redirection URI - - The client directs the resource owner's user-agent to the - authorization endpoint and includes a redirection URI to which the - authorization server will redirect the user-agent back once - authorization has been obtained (or denied). The client MAY omit the - redirection URI if one has been established between the client and - authorization server via other means, such as during the client - registration process. - - The redirection URI MUST be an absolute URI and MAY include a query - component, which MUST be retained by the authorization server when - adding additional query parameters. - - The authorization server SHOULD require the client to pre-register - their redirection URI or at least certain components such as the - scheme, host, port and path. If a redirection URI was registered, - the authorization server MUST compare any redirection URI received at - the authorization endpoint with the registered URI. - - The authorization server SHOULD NOT redirect the user-agent to - unregistered or untrusted URIs to prevent the endpoint from being - used as an open redirector. If no valid redirection URI is - available, the authorization server SHOULD inform the resource owner - directly of the error. - -2.2. Token Endpoint - - The token endpoint is used by the client to obtain an access token by - authenticating with the authorization server and presenting its - authorization grant or refresh token. The token endpoint is used - with every authorization grant except for the implicit grant type - (since an access token is issued directly). - - The means through which the client obtains the location of the token - endpoint are beyond the scope of this specification but is typically - provided in the service documentation. The endpoint URI MAY include - a query component, which MUST be retained when adding additional - query parameters. - - Since requests to the token endpoint result in the transmission of - clear-text credentials (in the HTTP request and response), the - authorization server MUST require the use of a transport-layer - security mechanism when sending requests to the token endpoint. The - authorization server MUST support TLS 1.2 as defined in [RFC5246], - and MAY support additional transport-layer mechanisms meeting its - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 13] - -Internet-Draft OAuth 2.0 May 2011 - - - security requirements. - - The token endpoint requires client authentication as described in - Section 3. The authorization server MAY accept any form of client - authentication meeting its security requirements. The client MUST - NOT use more than one authentication method in each request. - - The client MUST use the HTTP "POST" method when making access token - requests. - - Parameters sent without a value MUST be treated as if they were - omitted from the request. The authorization server SHOULD ignore - unrecognized request parameters. - - Request and response parameters MUST NOT repeat more than once, - unless noted otherwise. - - -3. Client Authentication - - Client credentials are used to identify and authenticate the client. - The client credentials include a client identifier - a unique string - issued to the client to identify itself to the authorization server. - The client identifier is not a secret, it is exposed to the resource - owner, and MUST NOT be used alone for client authentication. Client - authentication is accomplished via additional means such as a - matching client password. - - The methods through which the client obtains its client credentials - are beyond the scope of this specification. However, the client - registration process typically includes gathering relevant - information which is used to educate the resource owner about the - client when requesting authorization. - - Due to the nature of some clients, the authorization server should - not make assumptions about the confidentiality of client credentials - without establishing trust with the client. The authorization server - SHOULD NOT issue client credentials to clients incapable of keeping - their credentials confidential (typically determined during the - client registration process). - - In addition, the authorization server MAY allow unauthenticated - access token requests when the client identity does not matter (e.g. - anonymous client) or when the client identity is established via - other means. For readability purposes only, this specification is - written under the assumption that the authorization server requires - some form of client authentication. However, such language does not - affect the authorization server's discretion in allowing - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 14] - -Internet-Draft OAuth 2.0 May 2011 - - - unauthenticated client requests. - -3.1. Client Password Authentication - - [[ Pending Consensus ]] - - Clients in possession of client password credentials (the client - identifier together with a shared symmetric secret) MAY use the HTTP - Basic authentication scheme as defined in [RFC2617] to authenticate - with the authorization server. The client identifier is used as the - username, and the secret is used as the password. - - When using the HTTP Basic authentication scheme, the client - identifier is included twice in the request (in the "Authorization" - header and in the "client_id" parameter). The authorization server - MUST ensure the two identifiers belong to the same client. - - For example (extra line breaks are for display purposes only): - - - POST /token HTTP/1.1 - Host: server.example.com - Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW - Content-Type: application/x-www-form-urlencoded - - grant_type=authorization_code&client_id=s6BhdRkqt3& - code=i1WsRn1uB1& - redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb - - - Alternatively, the authorization server MAY allow including the - client secret in the request body using the following parameter: - - client_secret - REQUIRED. The client secret. - - The use of the "client_secret" parameter is NOT RECOMMENDED, and - should be limited to clients unable to directly utilize the HTTP - Basic authentication scheme. - - - - - - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 15] - -Internet-Draft OAuth 2.0 May 2011 - - - For example (extra line breaks are for display purposes only): - - - POST /token HTTP/1.1 - Host: server.example.com - Content-Type: application/x-www-form-urlencoded - - grant_type=authorization_code&client_id=s6BhdRkqt3& - client_secret=gX1fBat3bV&code=i1WsRn1uB1& - redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb - - - Since requests using this authentication method result in the - transmission of clear-text credentials, the authorization server MUST - require the use of a transport-layer security mechanism when sending - requests to the token endpoint. - -3.2. Other Client Authentication Methods - - The authorization server MAY support any suitable HTTP authentication - scheme matching its security requirements. When using other - authentication methods, the authorization server MUST define a - mapping between the client identifier and the credentials used to - authenticate. - - -4. Obtaining Authorization - - To request an access token, the client obtains authorization from the - resource owner. The authorization is expressed in the form of an - authorization grant which the client uses to request the access - token. OAuth defines four grant types: authorization code, implicit, - resource owner password credentials, and client credentials. It also - provides an extension mechanism for defining additional grant types. - -4.1. Authorization Code - - The authorization code grant type is suitable for clients capable of - maintaining their client credentials confidential (for authenticating - with the authorization server) such as a client implemented on a - secure server. As a redirection-based flow, the client must be - capable of interacting with the resource owner's user-agent - (typically a web browser) and capable of receiving incoming requests - (via redirection) from the authorization server. - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 16] - -Internet-Draft OAuth 2.0 May 2011 - - - +----------+ - | resource | - | owner | - | | - +----------+ - ^ - | - (B) - +----|-----+ Client Identifier +---------------+ - | -+----(A)--- & Redirect URI ------>| | - | User- | | Authorization | - | Agent -+----(B)-- User authenticates --->| Server | - | | | | - | -+----(C)-- Authorization Code ---<| | - +-|----|---+ +---------------+ - | | ^ v - (A) (C) | | - | | | | - ^ v | | - +---------+ | | - | |>---(D)-- Client Credentials, --------' | - | | Authorization Code, | - | Client | & Redirect URI | - | | | - | |<---(E)----- Access Token -------------------' - +---------+ (w/ Optional Refresh Token) - - - Figure 3: Authorization Code Flow - - The flow illustrated in Figure 3 includes the following steps: - - (A) The client initiates the flow by directing the resource owner's - user-agent to the authorization endpoint. The client includes - its client identifier, requested scope, local state, and a - redirection URI to which the authorization server will send the - user-agent back once access is granted (or denied). - (B) The authorization server authenticates the resource owner (via - the user-agent) and establishes whether the resource owner - grants or denies the client's access request. - (C) Assuming the resource owner grants access, the authorization - server redirects the user-agent back to the client using the - redirection URI provided earlier. The redirection URI includes - an authorization code and any local state provided by the client - earlier. - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 17] - -Internet-Draft OAuth 2.0 May 2011 - - - (D) The client requests an access token from the authorization - server's token endpoint by authenticating using its client - credentials, and includes the authorization code received in the - previous step. The client includes the redirection URI used to - obtain the authorization code for verification. - (E) The authorization server validates the client credentials, the - authorization code, and ensures the redirection URI received - matches the URI used to redirect the client in step (C). If - valid, responds back with an access token. - -4.1.1. Authorization Request - - The client constructs the request URI by adding the following - parameters to the query component of the authorization endpoint URI - using the "application/x-www-form-urlencoded" format as defined by - [W3C.REC-html401-19991224]: - - response_type - REQUIRED. Value MUST be set to "code". - client_id - REQUIRED. The client identifier as described in Section 3. - redirect_uri - REQUIRED, unless a redirection URI has been established between - the client and authorization server via other means. Described - in Section 2.1.1. - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. - state - OPTIONAL. An opaque value used by the client to maintain state - between the request and callback. The authorization server - includes this value when redirecting the user-agent back to the - client. - - The client directs the resource owner to the constructed URI using an - HTTP redirection response, or by other means available to it via the - user-agent. - - For example, the client directs the user-agent to make the following - HTTP request using transport-layer security (extra line breaks are - for display purposes only): - - - GET /authorize?response_type=code&client_id=s6BhdRkqt3& - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 18] - -Internet-Draft OAuth 2.0 May 2011 - - - redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 - Host: server.example.com - - - The authorization server validates the request to ensure all required - parameters are present and valid. If the request is valid, the - authorization server authenticates the resource owner and obtains an - authorization decision (by asking the resource owner or by - establishing approval via other means). - - When a decision is established, the authorization server directs the - user-agent to the provided client redirection URI using an HTTP - redirection response, or by other means available to it via the user- - agent. - -4.1.2. Authorization Response - - If the resource owner grants the access request, the authorization - server issues an authorization code and delivers it to the client by - adding the following parameters to the query component of the - redirection URI using the "application/x-www-form-urlencoded" format: - - code - REQUIRED. The authorization code generated by the - authorization server. The authorization code SHOULD expire - shortly after it is issued to minimize the risk of leaks. The - client MUST NOT reuse the authorization code. If an - authorization code is used more than once, the authorization - server MAY revoke all tokens previously issued based on that - authorization code. The authorization code is bound to the - client identifier and redirection URI. - state - REQUIRED if the "state" parameter was present in the client - authorization request. Set to the exact value received from - the client. - - For example, the authorization server redirects the user-agent by - sending the following HTTP response: - - - HTTP/1.1 302 Found - Location: https://client.example.com/cb?code=i1WsRn1uB1 - - - The client SHOULD ignore unrecognized response parameters. The - authorization code string size is left undefined by this - specification. The client should avoid making assumptions about code - value sizes. The authorization server should document the size of - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 19] - -Internet-Draft OAuth 2.0 May 2011 - - - any value it issues. - -4.1.2.1. Error Response - - If the request fails due to a missing, invalid, or mismatching - redirection URI, or if the client identifier provided is invalid, the - authorization server SHOULD inform the resource owner of the error, - and MUST NOT redirect the user-agent to the invalid redirection URI. - - If the resource owner denies the access request or if the request - fails for reasons other than a missing or invalid redirection URI, - the authorization server informs the client by adding the following - parameters to the query component of the redirection URI using the - "application/x-www-form-urlencoded" format: - - error - REQUIRED. A single error code from the following: - invalid_request - The request is missing a required parameter, includes an - unsupported parameter or parameter value, or is otherwise - malformed. - unauthorized_client - The client is not authorized to request an authorization - code using this method. - access_denied - The resource owner or authorization server denied the - request. - unsupported_response_type - The authorization server does not support obtaining an - authorization code using this method. - invalid_scope - The requested scope is invalid, unknown, or malformed. - a 4xx or 5xx HTTP status code (except for 400 and 401) - The authorization server MAY set the "error" parameter - value to a numerical HTTP status code from the 4xx or 5xx - range, with the exception of the 400 (Bad Request) and - 401 (Unauthorized) status codes. For example, if the - service is temporarily unavailable, the authorization - server MAY return an error response with "error" set to - "503". - error_description - OPTIONAL. A human-readable text providing additional - information, used to assist in the understanding and resolution - of the error occurred. [[ add language and encoding information - ]] - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 20] - -Internet-Draft OAuth 2.0 May 2011 - - - error_uri - OPTIONAL. A URI identifying a human-readable web page with - information about the error, used to provide the resource owner - with additional information about the error. - state - REQUIRED if a valid "state" parameter was present in the client - authorization request. Set to the exact value received from - the client. - - For example, the authorization server redirects the user-agent by - sending the following HTTP response: - - - HTTP/1.1 302 Found - Location: https://client.example.com/cb?error=access_denied - - -4.1.3. Access Token Request - - The client makes a request to the token endpoint by adding the - following parameters using the "application/x-www-form-urlencoded" - format in the HTTP request entity-body: - - grant_type - REQUIRED. Value MUST be set to "authorization_code". - client_id - REQUIRED. The client identifier as described in Section 3. - code - REQUIRED. The authorization code received from the - authorization server. - redirect_uri - REQUIRED. The redirection URI used by the authorization server - to return the authorization response in the previous step. - - The client includes its authentication credentials as described in - Section 3 - - For example, the client makes the following HTTP using transport- - layer security (extra line breaks are for display purposes only): - - - POST /token HTTP/1.1 - Host: server.example.com - Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW - Content-Type: application/x-www-form-urlencoded - - grant_type=authorization_code&client_id=s6BhdRkqt3& - code=i1WsRn1uB1& - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 21] - -Internet-Draft OAuth 2.0 May 2011 - - - redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb - - - The authorization server MUST: - - o Validate the client credentials and ensure that the authorization - code was issued to that client. - o Verify that the authorization code is valid, and that the - redirection URI matches the redirection URI used by the - authorization server to deliver the authorization code. - -4.1.4. Access Token Response - - If the access token request is valid and authorized, the - authorization server issues an access token and optional refresh - token as described in Section 5.1. If the request client - authentication failed or is invalid, the authorization server returns - an error response as described in Section 5.2. - - An example successful response: - - - HTTP/1.1 200 OK - Content-Type: application/json - Cache-Control: no-store - - { - "access_token":"SlAV32hkKG", - "token_type":"example", - "expires_in":3600, - "refresh_token":"8xLOxBtZp8", - "example_parameter":"example_value" - } - - -4.2. Implicit Grant - - The implicit grant type is suitable for clients incapable of - maintaining their client credentials confidential (for authenticating - with the authorization server) such as client applications residing - in a user-agent, typically implemented in a browser using a scripting - language such as JavaScript. - - As a redirection-based flow, the client must be capable of - interacting with the resource owner's user-agent (typically a web - browser) and capable of receiving incoming requests (via redirection) - from the authorization server. - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 22] - -Internet-Draft OAuth 2.0 May 2011 - - - Unlike the authorization code grant type in which the client makes - separate requests for authorization and access token, the client - receives the access token as the result of the authorization request. - - Using the implicit grant type does not include client authentication - since the client is unable to maintain their credential - confidentiality (the client resides on the resource owner's computer - or device which makes the client credentials accessible and - exploitable). Because the access token is encoded into the - redirection URI, it may be exposed to the resource owner and other - applications residing on its computer or device. - - - +----------+ - | Resource | - | Owner | - | | - +----------+ - ^ - | - (B) - +----|-----+ Client Identifier +---------------+ - | -+----(A)--- & Redirect URI ----->| | - | User- | | Authorization | - | Agent -|----(B)-- User authenticates -->| Server | - | | | | - | |<---(C)---- Redirect URI ------<| | - | | with Access Token +---------------+ - | | in Fragment - | | +---------------+ - | |----(D)---- Redirect URI ------>| Web Server | - | | without Fragment | with Client | - | | | Resource | - | (F) |<---(E)------- Script ---------<| | - | | +---------------+ - +-|--------+ - | | - (A) (G) Access Token - | | - ^ v - +---------+ - | | - | Client | - | | - +---------+ - - - Figure 4: Implicit Grant Flow - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 23] - -Internet-Draft OAuth 2.0 May 2011 - - - The flow illustrated in Figure 4 includes the following steps: - - (A) The client initiates the flow by directing the resource owner's - user-agent to the authorization endpoint. The client includes - its client identifier, requested scope, local state, and a - redirection URI to which the authorization server will send the - user-agent back once access is granted (or denied). - (B) The authorization server authenticates the resource owner (via - the user-agent) and establishes whether the resource owner - grants or denies the client's access request. - (C) Assuming the resource owner grants access, the authorization - server redirects the user-agent back to the client using the - redirection URI provided earlier. The redirection URI includes - the access token in the URI fragment. - (D) The user-agent follows the redirection instructions by making a - request to the web server (does not include the fragment). The - user-agent retains the fragment information locally. - (E) The web server returns a web page (typically an HTML document - with an embedded script) capable of accessing the full - redirection URI including the fragment retained by the user- - agent, and extracting the access token (and other parameters) - contained in the fragment. - (F) The user-agent executes the script provided by the web server - locally, which extracts the access token and passes it to the - client. - -4.2.1. Authorization Request - - The client constructs the request URI by adding the following - parameters to the query component of the authorization endpoint URI - using the "application/x-www-form-urlencoded" format: - - response_type - REQUIRED. Value MUST be set to "token". - client_id - REQUIRED. The client identifier as described in Section 3. - redirect_uri - REQUIRED, unless a redirection URI has been established between - the client and authorization server via other means. Described - in Section 2.1.1. - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 24] - -Internet-Draft OAuth 2.0 May 2011 - - - state - OPTIONAL. An opaque value used by the client to maintain state - between the request and callback. The authorization server - includes this value when redirecting the user-agent back to the - client. - - The client directs the resource owner to the constructed URI using an - HTTP redirection response, or by other means available to it via the - user-agent. - - For example, the client directs the user-agent to make the following - HTTP request using transport-layer security (extra line breaks are - for display purposes only): - - - GET /authorize?response_type=token&client_id=s6BhdRkqt3& - redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 - Host: server.example.com - - - The authorization server validates the request to ensure all required - parameters are present and valid. If the request is valid, the - authorization server authenticates the resource owner and obtains an - authorization decision (by asking the resource owner or by - establishing approval via other means). - - When a decision is established, the authorization server directs the - user-agent to the provided client redirection URI using an HTTP - redirection response, or by other means available to it via the user- - agent. - -4.2.2. Access Token Response - - If the resource owner grants the access request, the authorization - server issues an access token and delivers it to the client by adding - the following parameters to the fragment component of the redirection - URI using the "application/x-www-form-urlencoded" format: - - access_token - REQUIRED. The access token issued by the authorization server. - token_type - REQUIRED. The type of the token issued as described in - Section 7.1. Value is case insensitive. - expires_in - OPTIONAL. The duration in seconds of the access token - lifetime. For example, the value "3600" denotes that the - access token will expire in one hour from the time the response - was generated. - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 25] - -Internet-Draft OAuth 2.0 May 2011 - - - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. The authorization server SHOULD include the - parameter if the requested scope is different from the one - requested by the client. - state - REQUIRED if the "state" parameter was present in the client - authorization request. Set to the exact value received from - the client. - - For example, the authorization server redirects the user-agent by - sending the following HTTP response (URI extra line breaks are for - display purposes only): - - - HTTP/1.1 302 Found - Location: http://example.com/rd#access_token=FJQbwq9& - token_type=example&expires_in=3600 - - - The client SHOULD ignore unrecognized response parameters. The - access token string size is left undefined by this specification. - The client should avoid making assumptions about value sizes. The - authorization server should document the size of any value it issues. - -4.2.2.1. Error Response - - If the request fails due to a missing, invalid, or mismatching - redirection URI, or if the client identifier provided is invalid, the - authorization server SHOULD inform the resource owner of the error, - and MUST NOT redirect the user-agent to the invalid redirection URI. - - If the resource owner denies the access request or if the request - fails for reasons other than a missing or invalid redirection URI, - the authorization server informs the client by adding the following - parameters to the fragment component of the redirection URI using the - "application/x-www-form-urlencoded" format: - - error - REQUIRED. A single error code from the following: - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 26] - -Internet-Draft OAuth 2.0 May 2011 - - - invalid_request - The request is missing a required parameter, includes an - unsupported parameter or parameter value, or is otherwise - malformed. - unauthorized_client - The client is not authorized to request an access token - using this method. - access_denied - The resource owner or authorization server denied the - request. - unsupported_response_type - The authorization server does not support obtaining an - access token using this method. - invalid_scope - The requested scope is invalid, unknown, or malformed. - a 4xx or 5xx HTTP status code (except for 400 and 401) - The authorization server MAY set the "error" parameter - value to a numerical HTTP status code from the 4xx or 5xx - range, with the exception of the 400 (Bad Request) and - 401 (Unauthorized) status codes. For example, if the - service is temporarily unavailable, the authorization - server MAY return an error response with "error" set to - "503". - error_description - OPTIONAL. A human-readable text providing additional - information, used to assist in the understanding and resolution - of the error occurred. [[ add language and encoding information - ]] - error_uri - OPTIONAL. A URI identifying a human-readable web page with - information about the error, used to provide the resource owner - with additional information about the error. - state - REQUIRED if a valid "state" parameter was present in the client - authorization request. Set to the exact value received from - the client. - - For example, the authorization server redirects the user-agent by - sending the following HTTP response: - - - HTTP/1.1 302 Found - Location: https://client.example.com/cb#error=access_denied - - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 27] - -Internet-Draft OAuth 2.0 May 2011 - - -4.3. Resource Owner Password Credentials - - The resource owner password credentials grant type is suitable in - cases where the resource owner has a trust relationship with the - client, such as its computer operating system or a highly privileged - application. The authorization server should take special care when - enabling the grant type, and only when other flows are not viable. - - The grant type is suitable for clients capable of obtaining the - resource owner credentials (username and password, typically using an - interactive form). It is also used to migrate existing clients using - direct authentication schemes such as HTTP Basic or Digest - authentication to OAuth by converting the stored credentials with an - access token. - - - +----------+ - | Resource | - | Owner | - | | - +----------+ - v - | - (A) Password Credentials - | - v - +---------+ +---------------+ - | | Client Credentials | | - | |>--(B)---- & Resource Owner ----->| | - | Client | Password Credentials | Authorization | - | | | Server | - | |<--(C)---- Access Token ---------<| | - | | (w/ Optional Refresh Token) | | - +---------+ +---------------+ - - - Figure 5: Resource Owner Password Credentials Flow - - The flow illustrated in Figure 5 includes the following steps: - - (A) The resource owner provides the client with its username and - password. - (B) The client requests an access token from the authorization - server's token endpoint by authenticating using its client - credentials, and includes the credentials received from the - resource owner. - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 28] - -Internet-Draft OAuth 2.0 May 2011 - - - (C) The authorization server validates the resource owner - credentials and the client credentials and issues an access - token. - -4.3.1. Authorization Request and Response - - The method through which the client obtains the resource owner - credentials is beyond the scope of this specification. The client - MUST discard the credentials once an access token has been obtained. - -4.3.2. Access Token Request - - The client makes a request to the token endpoint by adding the - following parameters using the "application/x-www-form-urlencoded" - format in the HTTP request entity-body: - - grant_type - REQUIRED. Value MUST be set to "password". - client_id - REQUIRED. The client identifier as described in Section 3. - username - REQUIRED. The resource owner username, encoded as UTF-8. - password - REQUIRED. The resource owner password, encoded as UTF-8. - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. - - The client includes its authentication credentials as described in - Section 3 - - For example, the client makes the following HTTP request using - transport-layer security (extra line breaks are for display purposes - only): - - - POST /token HTTP/1.1 - Host: server.example.com - Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW - Content-Type: application/x-www-form-urlencoded - - grant_type=password&client_id=s6BhdRkqt3& - username=johndoe&password=A3ddj3w - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 29] - -Internet-Draft OAuth 2.0 May 2011 - - - The authorization server MUST: - - o Validate the client credentials. - o Validate the resource owner password credentials. - -4.3.3. Access Token Response - - If the access token request is valid and authorized, the - authorization server issues an access token and optional refresh - token as described in Section 5.1. If the request failed client - authentication or is invalid, the authorization server returns an - error response as described in Section 5.2. - - An example successful response: - - - HTTP/1.1 200 OK - Content-Type: application/json - Cache-Control: no-store - - { - "access_token":"SlAV32hkKG", - "token_type":"example", - "expires_in":3600, - "refresh_token":"8xLOxBtZp8", - "example_parameter":"example_value" - } - - -4.4. Client Credentials - - The client can request an access token using only its client - credentials when the client is requesting access to the protected - resources under its control, or those of another resource owner which - has been previously arranged with the authorization server (the - method of which is beyond the scope of this specification). - - - +---------+ +---------------+ - | | | | - | |>--(A)--- Client Credentials ---->| Authorization | - | Client | | Server | - | |<--(B)---- Access Token ---------<| | - | | (w/ Optional Refresh Token) | | - +---------+ +---------------+ - - - Figure 6: Client Credentials Flow - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 30] - -Internet-Draft OAuth 2.0 May 2011 - - - The flow illustrated in Figure 6 includes the following steps: - - (A) The client requests an access token from the token endpoint by - authenticating using its client credentials. - (B) The authorization server validates the client credentials and - issues an access token. - -4.4.1. Authorization Request and Response - - Since the client credentials are used as the authorization grant, no - additional authorization request is needed as the client is already - in the possession of its client credentials. - -4.4.2. Access Token Request - - The client makes a request to the token endpoint by adding the - following parameters using the "application/x-www-form-urlencoded" - format in the HTTP request entity-body: - - grant_type - REQUIRED. Value MUST be set to "client_credentials". - client_id - REQUIRED. The client identifier as described in Section 3. - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. - - The client includes its authentication credentials as described in - Section 3 - - For example, the client makes the following HTTP request using - transport-layer security (extra line breaks are for display purposes - only): - - - POST /token HTTP/1.1 - Host: server.example.com - Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW - Content-Type: application/x-www-form-urlencoded - - grant_type=client_credentials&client_id=s6BhdRkqt3 - - - The authorization server MUST validate the client credentials. - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 31] - -Internet-Draft OAuth 2.0 May 2011 - - -4.4.3. Access Token Response - - If the access token request is valid and authorized, the - authorization server issues an access token and optional refresh - token as described in Section 5.1. If the request failed client - authentication or is invalid, the authorization server returns an - error response as described in Section 5.2. - - An example successful response: - - - HTTP/1.1 200 OK - Content-Type: application/json - Cache-Control: no-store - - { - "access_token":"SlAV32hkKG", - "token_type":"example", - "expires_in":3600, - "refresh_token":"8xLOxBtZp8", - "example_parameter":"example_value" - } - - -4.5. Extensions - - The client uses an extension grant type by specifying the grant type - using an absolute URI (defined by the authorization server) as the - value of the "grant_type" parameter of the token endpoint, and by - adding any additional parameters necessary. - - For example, to request an access token using a SAML 2.0 assertion - grant type as defined by [I-D.ietf-oauth-saml2-bearer], the client - makes the following HTTP request using transport-layer security (line - breaks are for display purposes only): - - - POST /token HTTP/1.1 - Host: server.example.com - Content-Type: application/x-www-form-urlencoded - - grant_type=http%3A%2F%2Foauth.net%2Fgrant_type%2Fassertion%2F - saml%2F2.0%2Fbearer&assertion=PEFzc2VydGlvbiBJc3N1ZUluc3RhbnQ - [...omitted for brevity...]V0aG5TdGF0ZW1lbnQ-PC9Bc3NlcnRpb24- - - - If the access token request is valid and authorized, the - authorization server issues an access token and optional refresh - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 32] - -Internet-Draft OAuth 2.0 May 2011 - - - token as described in Section 5.1. If the request failed client - authentication or is invalid, the authorization server returns an - error response as described in Section 5.2. - - -5. Issuing an Access Token - - If the access token request is valid and authorized, the - authorization server issues an access token and optional refresh - token as described in Section 5.1. If the request failed client - authentication or is invalid, the authorization server returns an - error response as described in Section 5.2. - -5.1. Successful Response - - The authorization server issues an access token and optional refresh - token, and constructs the response by adding the following parameters - to the entity body of the HTTP response with a 200 (OK) status code: - - access_token - REQUIRED. The access token issued by the authorization server. - token_type - REQUIRED. The type of the token issued as described in - Section 7.1. Value is case insensitive. - expires_in - OPTIONAL. The duration in seconds of the access token - lifetime. For example, the value "3600" denotes that the - access token will expire in one hour from the time the response - was generated. - refresh_token - OPTIONAL. The refresh token which can be used to obtain new - access tokens using the same authorization grant as described - in Section 6. - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. The authorization server SHOULD include the - parameter if the requested scope is different from the one - requested by the client. - - The parameters are included in the entity body of the HTTP response - using the "application/json" media type as defined by [RFC4627]. The - parameters are serialized into a JSON structure by adding each - parameter at the highest structure level. Parameter names and string - values are included as JSON strings. Numerical values are included - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 33] - -Internet-Draft OAuth 2.0 May 2011 - - - as JSON numbers. - - The authorization server MUST include the HTTP "Cache-Control" - response header field [RFC2616] with a value of "no-store" in any - response containing tokens, secrets, or other sensitive information. - - For example: - - - HTTP/1.1 200 OK - Content-Type: application/json - Cache-Control: no-store - - { - "access_token":"SlAV32hkKG", - "token_type":"example", - "expires_in":3600, - "refresh_token":"8xLOxBtZp8", - "example_parameter":"example_value" - } - - - The client SHOULD ignore unrecognized response parameters. The sizes - of tokens and other values received from the authorization server are - left undefined. The client should avoid making assumptions about - value sizes. The authorization server should document the size of - any value it issues. - -5.2. Error Response - - The authorization server responds with an HTTP 400 (Bad Request) - status code and includes the following parameters with the response: - - error - REQUIRED. A single error code from the following: - invalid_request - The request is missing a required parameter, includes an - unsupported parameter or parameter value, repeats a - parameter, includes multiple credentials, utilizes more - than one mechanism for authenticating the client, or is - otherwise malformed. - invalid_client - Client authentication failed (e.g. unknown client, no - client credentials included, multiple client credentials - included, or unsupported credentials type). The - authorization server MAY return an HTTP 401 - (Unauthorized) status code to indicate which HTTP - authentication schemes are supported. If the client - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 34] - -Internet-Draft OAuth 2.0 May 2011 - - - attempted to authenticate via the "Authorization" request - header field, the authorization server MUST respond with - an HTTP 401 (Unauthorized) status code, and include the - "WWW-Authenticate" response header field matching the - authentication scheme used by the client. - invalid_grant - The provided authorization grant is invalid, expired, - revoked, does not match the redirection URI used in the - authorization request, or was issued to another client. - unauthorized_client - The authenticated client is not authorized to use this - authorization grant type. - unsupported_grant_type - The authorization grant type is not supported by the - authorization server. - invalid_scope - The requested scope is invalid, unknown, malformed, or - exceeds the scope granted by the resource owner. - error_description - OPTIONAL. A human-readable text providing additional - information, used to assist in the understanding and resolution - of the error occurred. [[ add language and encoding information - ]] - error_uri - OPTIONAL. A URI identifying a human-readable web page with - information about the error, used to provide the resource owner - with additional information about the error. - - The parameters are included in the entity body of the HTTP response - using the "application/json" media type as defined by [RFC4627]. The - parameters are serialized into a JSON structure by adding each - parameter at the highest structure level. Parameter names and string - values are included as JSON strings. Numerical values are included - as JSON numbers. - - For example: - - - HTTP/1.1 400 Bad Request - Content-Type: application/json - Cache-Control: no-store - - { - "error":"invalid_request" - } - - - If the authorization server encounters an error condition other than - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 35] - -Internet-Draft OAuth 2.0 May 2011 - - - the 400 (Bad Request) and 401 (Unauthorized) responses described - above (e.g. the service is temporarily unavailable), the - authorization server SHOULD include an error response in the entity - body, and set the "error" parameter value to the numerical HTTP - status code returned. - - For example: - - - HTTP/1.1 503 Service Unavailable - Content-Type: application/json - - { - "error":"503" - } - - - -6. Refreshing an Access Token - - If the authorization server issued a refresh token to the client, the - client makes a refresh request to the token endpoint by adding the - following parameters using the "application/x-www-form-urlencoded" - format in the HTTP request entity-body: - - grant_type - REQUIRED. Value MUST be set to "refresh_token". - client_id - REQUIRED. The client identifier as described in Section 3. - refresh_token - REQUIRED. The refresh token issued to the client. - scope - OPTIONAL. The scope of the access request expressed as a list - of space-delimited, case sensitive strings. The value is - defined by the authorization server. If the value contains - multiple space-delimited strings, their order does not matter, - and each string adds an additional access range to the - requested scope. The requested scope MUST be equal or lesser - than the scope originally granted by the resource owner, and if - omitted is treated as equal to the scope originally granted by - the resource owner. - - The client includes its authentication credentials as described in - Section 3. - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 36] - -Internet-Draft OAuth 2.0 May 2011 - - - For example, the client makes the following HTTP request using - transport-layer security (extra line breaks are for display purposes - only): - - - POST /token HTTP/1.1 - Host: server.example.com - Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW - Content-Type: application/x-www-form-urlencoded - - grant_type=refresh_token&client_id=s6BhdRkqt3& - refresh_token=n4E9O119d - - - The authorization server MUST validate the client credentials, ensure - that the refresh token was issued to the authenticated client, - validate the refresh token, and verify that the resource owner's - authorization is still valid. If valid and authorized, the - authorization server issues an access token as described in - Section 5.1. If the request failed verification or is invalid, the - authorization server returns an error response as described in - Section 5.2. - - The authorization server MAY issue a new refresh token, in which - case, the client MUST discard the old refresh token and replace it - with the new refresh token. - - -7. Accessing Protected Resources - - The client accesses protected resources by presenting the access - token to the resource server. The resource server MUST validate the - access token and ensure it has not expired and that its scope covers - the requested resource. The methods used by the resource server to - validate the access token (as well as any error responses) are beyond - the scope of this specification, but generally involve an interaction - or coordination between the resource server and the authorization - server. - - The method in which the client utilized the access token to - authenticate with the resource server depends on the type of access - token issued by the authorization server. Typically, it involves - using the HTTP "Authorization" request header field [RFC2617] with an - authentication scheme defined by the access token type specification. - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 37] - -Internet-Draft OAuth 2.0 May 2011 - - -7.1. Access Token Types - - The access token type provides the client with the information - required to successfully utilize the access token to make a protected - resource request (along with type-specific attributes). The client - MUST NOT use an access token if it does not understand the token - type. - - For example, the "bearer" token type defined in - [I-D.ietf-oauth-v2-bearer] is utilized by simply including the access - token string in the request: - - - GET /resource/1 HTTP/1.1 - Host: example.com - Authorization: Bearer 7Fjfp0ZBr1KtDRbnfVdmIw - - - while the "mac" token type defined in [I-D.ietf-oauth-v2-http-mac] is - utilized by issuing a MAC key together with the access token which is - used to sign certain components of the HTTP requests: - - - GET /resource/1 HTTP/1.1 - Host: example.com - Authorization: MAC id="h480djs93hd8", - nonce="274312:dj83hs9s", - mac="kDZvddkndxvhGRXZhvuDjEWhGeE=" - - - The above examples are provided for illustration purposes only. - Developers are advised to consult the [I-D.ietf-oauth-v2-bearer] and - [I-D.ietf-oauth-v2-http-mac] specifications before use. - - Each access token type definition specifies the additional attributes - (if any) sent to the client together with the "access_token" response - parameter. It also defines the HTTP authentication method used to - include the access token when making a protected resource request. - - -8. Extensibility - -8.1. Defining Access Token Types - - Access token types can be defined in one of two ways: registered in - the access token type registry (following the procedures in - Section 11.1), or use a unique absolute URI as its name. - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 38] - -Internet-Draft OAuth 2.0 May 2011 - - - Types utilizing a URI name SHOULD be limited to vendor-specific - implementations that are not commonly applicable, and are specific to - the implementation details of the resource server where they are - used. - - All other types MUST be registered. Type names MUST conform to the - type-name ABNF. If the type definition includes a new HTTP - authentication scheme, the type name SHOULD be identical to the HTTP - authentication scheme name (as defined by [RFC2617]). - - - type-name = 1*name-char - name-char = "-" / "." / "_" / DIGIT / ALPHA - - -8.2. Defining New Endpoint Parameters - - New request or response parameters for use with the authorization - endpoint or the token endpoint are defined and registered in the - parameters registry following the procedure in Section 11.2. - - Parameter names MUST conform to the param-name ABNF and parameter - values syntax MUST be well-defined (e.g., using ABNF, or a reference - to the syntax of an existing parameter). - - - param-name = 1*name-char - name-char = "-" / "." / "_" / DIGIT / ALPHA - - - Unregistered vendor-specific parameter extensions that are not - commonly applicable, and are specific to the implementation details - of the authorization server where they are used SHOULD utilize a - vendor-specific prefix that is not likely to conflict with other - registered values (e.g. begin with 'companyname_'). - -8.3. Defining New Authorization Grant Types - - New authorization grant types can be defined by assigning them a - unique absolute URI for use with the "grant_type" parameter. If the - extension grant type requires additional token endpoint parameters, - they MUST be registered in the OAuth parameters registry as described - by Section 11.2. - -8.4. Defining Additional Error Codes - - In cases where protocol extensions (i.e. access token types, - extension parameters, or extension grant types) require additional - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 39] - -Internet-Draft OAuth 2.0 May 2011 - - - error codes to be used with the authorization code grant error - response (Section 4.1.2.1), the implicit grant error response - (Section 4.2.2.1), or the token error response (Section 5.2), such - error codes MAY be defined. - - Extension error codes MUST be registered (following the procedures in - Section 11.3) if the extension they are used in conjunction with is a - registered access token type, a registered endpoint parameter, or an - extension grant type. Error codes used with unregistered extensions - MAY be registered. - - Error codes MUST conform to the error-code ABNF, and SHOULD be - prefixed by an identifying name when possible. For example, an error - identifying an invalid value set to the extension parameter "example" - should be named "example_invalid". - - - error-code = ALPHA *error-char - error-char = "-" / "." / "_" / DIGIT / ALPHA - - - -9. Native Applications - - [[ Pending consensus ]] - - A native application is a client which is installed and executes on - the end-user's device (i.e. desktop application, native mobile - application). Native applications are often capable of interacting - with (or embedding) a user-agent but are limited in how such - interactions affects their overall end-user experience. In many - cases, native applications are incapable of receiving redirection - requests from the authorization server (e.g. due to firewall rules, - operating system restrictions). - - Native applications can utilize OAuth in different ways, based on - their requirements and desired end-user experience: - - o Use the authorization code grant type flow described in - Section 4.1 by launching an external user-agent. The native - application can capture the response by providing a redirection - URI identifying a local (non-network) resource (registered with - the operating system to invoke the native application as handler), - or by providing a redirection URI identifying a server-hosted - resource under the native application's control, which in turn - makes the response available to the native application (e.g. using - the user-agent window title or other locations accessible from - outside the user-agent). - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 40] - -Internet-Draft OAuth 2.0 May 2011 - - - o Use the authorization code grant type flow described in - Section 4.1 by embedding a user-agent. The native application - obtains the response by directly communicating with the embedded - user-agent. Embedded user-agents are discouraged as they - typically provide a less consistent user experience and do not - enable the end-user to verify the authorization server's - authenticity. - - Native applications SHOULD use the authorization code grant type flow - without client password credentials (due to their inability to keep - the credentials confidential) to obtain short-lived access tokens, - and use refresh tokens to maintain access. - - When choosing between launching an external user-agent and an - embedding a user-agent, native application developers should consider - the following: - - o External user-agents may improve completion rate as the end-user - may already have an active session with the authorization server - removing the need to re-authenticate, and provide a familiar user- - agent user experience. The end-user may also rely on extensions - or add-ons to assist with authentication (e.g. password managers - or 2-factor device reader). - o Embedded user-agents often offer a better end-user flow, as they - remove the need to switch context and open new windows but also - may provide less familiar features than the external user-agent. - o Embedded user-agents pose a security challenge because end-users - are authenticating in an unidentified window without access to the - visual protections offered by many user-agents. Embedded user- - agents educate end-user to trust unidentified requests for - authentication (making phishing attacks easier to execute). - - -10. Security Considerations - - As a flexible and extensible framework, OAuth's security - considerations depend on many factors. The following sections - provide implementers with security guidelines focused on three common - client types: - - Web Application - A web application is a client running on a web server. End-users - access the client via an HTML user interface rendered in a user- - agent on the end-user's device. The client credentials as well as - any access token issued to the client are stored on the web server - and are not exposed to or accessible by the end-user. - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 41] - -Internet-Draft OAuth 2.0 May 2011 - - - User-Agent-based Application - A user-agent-based application is a client in which the client - code is downloaded from a web server and executes within a user- - agent on the end-user's device. The OAuth protocol data and - credentials are accessible to the end-user. Since such - applications directly reside within the user-agent, they can make - seamless use of the user-agent capabilities in the end-user - authorization process. - Native Application - A native application is a client which is installed and executes - on the end-user's device. The OAuth protocol data and credentials - are accessible to the end-user. It is assumed that such an - application can protect dynamically issued credentials, such as - refresh tokens, from eavesdropping by other applications residing - on the same device. - - A comprehensive OAuth security model and analysis, as well as - background for the protocol design is provided in - [I-D.lodderstedt-oauth-security]. - -10.1. Client Authentication - - The authorization server issues client credentials to web - applications for the purpose of authenticating them. The - authorization server is encouraged to consider using stronger client - authentication means than a client password. Application developers - MUST ensure confidentiality of client passwords and other - credentials. - - The authorization server MUST NOT issue client passwords or other - credentials to native or user-agent-based applications for the - purpose of client authentication. The authorization server MAY issue - a client password or other credentials for a specific installation of - a native application on a specific device. - -10.2. Client Impersonation - - Given the inability of some clients to keep their client credentials - confidential, a malicious client can impersonate another client and - obtain access to protected resources. The authorization server MUST - authenticate the client whenever possible. If the authorization - server cannot authenticate the a client due to the client's - limitations, the authorization server should utilize other means to - protect resource owners from such malicious clients, including but - not limited to engaging the end-user to assist in identifying the - client and its source. - - The authorization server SHOULD enforce explicit end-user - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 42] - -Internet-Draft OAuth 2.0 May 2011 - - - authentication, or prompt the end-user to authorize access again, - providing the end-user with information about the client, scope, and - duration of the authorization. It is up to the end-user to review - the information in the context of the current client, and authorize - the request. - - The authorization server SHOULD NOT automatically, without active - end-user interaction, process repeated authorization requests without - authenticating the client or relying on other measures to ensure the - repeated request comes from a valid client and not an impersonator. - - The authorization server SHOULD require the client to pre-register - its redirection URI and validate the value of the "redirect_uri" - against the pre-registered value. The client MUST NOT serve an open - redirector resource which can be used by an attacker to construct an - URI that will pass the authorization server's redirection URI - matching rules, and will redirect the end-user's user-agent to the - attacker's server. - - The authorization server SHOULD issue access tokens with limited - scope and duration to clients incapable of authenticating. - -10.3. Access Token Credentials - - Access token credentials MUST be kept confidential in transit and - storage, and shared only among the authorization server, the resource - servers the credentials are valid for, and the client to whom the - credentials were issued. - - When using the implicit grant type, the access token credentials are - transmitted in the URI fragment, which can expose the credentials to - unauthorized parties. - - The authorization server MUST ensure that access token credentials - cannot be generated, modified, or guessed to produce valid access - token credentials. - - The client SHOULD request access token credentials with the minimal - scope and duration necessary. The authorization server SHOULD take - the client identity into account when choosing to honor the requested - scope, and MAY issue credentials with a lesser scope than requested. - -10.4. Refresh Tokens - - Authorization servers MAY issue refresh tokens to web and native - applications. - - Refresh tokens MUST be kept confidential in transit and storage, and - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 43] - -Internet-Draft OAuth 2.0 May 2011 - - - shared only among the authorization server and the client to whom the - refresh tokens were issued. The authorization server MUST maintain - the link between a refresh token and the client to whom it was - issued. - - The authorization server MUST verify the link between the refresh - token and client identity whenever the client's identity can be - authenticated. When client authentication is not possible, the - authorization server SHOULD deploy other means to detect refresh - token abuse. - - The authorization server MUST ensure that refresh tokens cannot be - generated, modified, or guessed to produce valid refresh tokens. - -10.5. Request Confidentiality - - Access token credentials, refresh tokens, resource owner passwords, - and client secrets MUST NOT be transmitted in the clear. - Authorization codes SHOULD NOT be transmitted in the clear. - -10.6. Endpoints Authenticity - - In order to prevent man-in-the-middle and phishing attacks, the - authorization server MUST implement and require TLS with server-side - authentication in all exchanges. The client MUST verify the - authorization server's TLS certificate, as well as the respective - certificate chain. - -10.7. Credentials Guessing Attacks - - The authorization server MUST prevent attackers from guessing access - tokens, authorization codes, refresh tokens, resource owner - passwords, and client secrets. - - When generating tokens and other secrets not intended for direct - human utilization, the authorization server MUST use a reasonable - level of entropy in order to mitigate the risk of guessing attacks. - When creating secrets intended for human usage, the authorization - server MUST utilize other means to protect those secrets. - -10.8. Phishing Attacks - - Native applications SHOULD use external browsers instead of embedding - browsers within the application when requesting end-user - authorization. External browsers offer a familiar user experience - and a trusted environment in which end-users can confirm the - authenticity of the authorization server. - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 44] - -Internet-Draft OAuth 2.0 May 2011 - - - To reduce the risk of phishing attacks, the authorization servers - MUST utilize TLS to allow user-agents to validate the authorization - server's identity. Service providers should educate their end-users - about the risks of phishing attacks and how they can verify the - authorization server's identity. - -10.9. Authorization Codes - - The transmission of authorization codes SHOULD be made over a secure - channel, and the client SHOULD implement TLS for use with its - redirection URI if the URI identifies a network resource. - Authorization codes MUST be kept confidential. Since authorization - codes are transmitted via user-agent redirections, they could - potentially be disclosed through user-agent history and HTTP referrer - headers. - - Authorization codes operate as plaintext bearer credentials, used to - verify that the end-user who granted authorization at the - authorization server, is the same end-user returning to the client to - complete the process. Therefore, if the client relies on the - authorization code for its own end-user authentication, the client - redirection endpoint MUST require TLS. - - Authorization codes SHOULD be short lived and MUST be single use. If - the authorization server observes multiple attempts to exchange an - authorization code for an access token, the authorization server - SHOULD revoke all access tokens already granted based on the - compromised authorization code. - - If the client can be authenticated, the authorization servers MUST - authenticate the client and ensure that the authorization code was - issued to the same client. - -10.10. Session Fixation - - Session fixation attacks leverage the authorization code grant type, - by tricking an end-user to authorize access to a legitimate client, - but to a client account under the control of the attacker. The only - difference between a valid flow and the attack flow is in how the - victim reached the authorization server to grant access. Once at the - authorization server, the victim is prompted with a normal, valid - request on behalf of a legitimate and familiar client. The attacker - then uses the victim's authorization to gain access to the - information authorized by the victim. - - In order to prevent such an attack, authorization servers MUST ensure - that the redirection URI used to obtain the authorization code, is - the same as the redirection URI provided when exchanging the - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 45] - -Internet-Draft OAuth 2.0 May 2011 - - - authorization code for an access token. The authorization server - SHOULD require the client to pre-register their redirection URI and - if provided, MUST validate the redirection URI received in the - authorization request against the pre-registered value. - -10.11. Redirection URI Validation - - [[ Add specific recommendations about redirection validation and - matching ]] - -10.12. Resource Owner Password Credentials - - The resource owner password credentials grant type is often used for - legacy or migration reasons. It reduces the overall risk of storing - username and password in the client, but does not eliminate the need - to expose highly privileged credentials to the client. - - This grant type carries a higher risk than the other grant types - because it maintains the password anti-pattern OAuth seeks to avoid. - The client could abuse the password or the password could - unintentionally be disclosed to an attacker (e.g. via log files or - other records kept by the client). - - Additionally, because the resource owner does not have control over - the authorization process (the resource owner involvement ends when - it hands over its credentials to the client), the client can obtain - access tokens with a broader scope and longer duration than desired - by the resource owner. The authorization server SHOULD restrict the - scope and duration of access tokens issued via this grant type. - - The authorization server and client SHOULD minimize use of this grant - type and utilize other grant types whenever possible. - -10.13. XSRF/CSRF Prevention - - [[ Add text with reference to the 'state' parameter ]] - - -11. IANA Considerations - -11.1. The OAuth Access Token Type Registry - - This specification establishes the OAuth access token type registry. - - Access token types are registered on the advice of one or more - Designated Experts (appointed by the IESG or their delegate), with a - Specification Required (using terminology from [RFC5226]). However, - to allow for the allocation of values prior to publication, the - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 46] - -Internet-Draft OAuth 2.0 May 2011 - - - Designated Expert(s) may approve registration once they are satisfied - that such a specification will be published. - - Registration requests should be sent to the [TBD]@ietf.org mailing - list for review and comment, with an appropriate subject (e.g., - "Request for access toke type: example"). [[ Note to RFC-EDITOR: The - name of the mailing list should be determined in consultation with - the IESG and IANA. Suggested name: oauth-ext-review. ]] - - Within at most 14 days of the request, the Designated Expert(s) will - either approve or deny the registration request, communicating this - decision to the review list and IANA. Denials should include an - explanation and, if applicable, suggestions as to how to make the - request successful. - - Decisions (or lack thereof) made by the Designated Expert can be - first appealed to Application Area Directors (contactable using - app-ads@tools.ietf.org email address or directly by looking up their - email addresses on http://www.iesg.org/ website) and, if the - appellant is not satisfied with the response, to the full IESG (using - the iesg@iesg.org mailing list). - - IANA should only accept registry updates from the Designated - Expert(s), and should direct all requests for registration to the - review mailing list. - -11.1.1. Registration Template - - Type name: - The name requested (e.g., "example"). - Additional Token Endpoint Response Parameters: - Additional response parameters returned together with the - "access_token" parameter. New parameters MUST be separately - registered in the OAuth parameters registry as described by - Section 11.2. - HTTP Authentication Scheme(s): - The HTTP authentication scheme name(s), if any, used to - authenticate protected resources requests using access token of - this type. - Change controller: - For standards-track RFCs, state "IETF". For others, give the name - of the responsible party. Other details (e.g., postal address, - e-mail address, home page URI) may also be included. - Specification document(s): - Reference to document that specifies the parameter, preferably - including a URI that can be used to retrieve a copy of the - document. An indication of the relevant sections may also be - included, but is not required. - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 47] - -Internet-Draft OAuth 2.0 May 2011 - - -11.2. The OAuth Parameters Registry - - This specification establishes the OAuth parameters registry. - - Additional parameters for inclusion in the authorization endpoint - request, the authorization endpoint response, the token endpoint - request, or the token endpoint response, are registered on the advice - of one or more Designated Experts (appointed by the IESG or their - delegate), with a Specification Required (using terminology from - [RFC5226]). However, to allow for the allocation of values prior to - publication, the Designated Expert(s) may approve registration once - they are satisfied that such a specification will be published. - - Registration requests should be sent to the [TBD]@ietf.org mailing - list for review and comment, with an appropriate subject (e.g., - "Request for parameter: example"). [[ Note to RFC-EDITOR: The name of - the mailing list should be determined in consultation with the IESG - and IANA. Suggested name: oauth-ext-review. ]] - - Within at most 14 days of the request, the Designated Expert(s) will - either approve or deny the registration request, communicating this - decision to the review list and IANA. Denials should include an - explanation and, if applicable, suggestions as to how to make the - request successful. - - Decisions (or lack thereof) made by the Designated Expert can be - first appealed to Application Area Directors (contactable using - app-ads@tools.ietf.org email address or directly by looking up their - email addresses on http://www.iesg.org/ website) and, if the - appellant is not satisfied with the response, to the full IESG (using - the iesg@iesg.org mailing list). - - IANA should only accept registry updates from the Designated - Expert(s), and should direct all requests for registration to the - review mailing list. - -11.2.1. Registration Template - - Parameter name: - The name requested (e.g., "example"). - Parameter usage location: - The location(s) where parameter can be used. The possible - locations are: authorization request, authorization response, - token request, or token response. - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 48] - -Internet-Draft OAuth 2.0 May 2011 - - - Change controller: - For standards-track RFCs, state "IETF". For others, give the name - of the responsible party. Other details (e.g., postal address, - e-mail address, home page URI) may also be included. - Specification document(s): - Reference to document that specifies the parameter, preferably - including a URI that can be used to retrieve a copy of the - document. An indication of the relevant sections may also be - included, but is not required. - -11.2.2. Initial Registry Contents - - The OAuth Parameters Registry's initial contents are: - - o Parameter name: client_id - o Parameter usage location: authorization request, token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: client_secret - o Parameter usage location: token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: response_type - o Parameter usage location: authorization request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: redirect_uri - o Parameter usage location: authorization request, token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: scope - o Parameter usage location: authorization request, authorization - response, token request, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: state - o Parameter usage location: authorization request, authorization - response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 49] - -Internet-Draft OAuth 2.0 May 2011 - - - o Parameter name: code - o Parameter usage location: authorization response, token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: error_description - o Parameter usage location: authorization response, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: error_uri - o Parameter usage location: authorization response, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: grant_type - o Parameter usage location: token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: access_token - o Parameter usage location: authorization response, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: token_type - o Parameter usage location: authorization response, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: expires_in - o Parameter usage location: authorization response, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: username - o Parameter usage location: token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: password - o Parameter usage location: token request - o Change controller: IETF - o Specification document(s): [[ this document ]] - - o Parameter name: refresh_token - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 50] - -Internet-Draft OAuth 2.0 May 2011 - - - o Parameter usage location: token request, token response - o Change controller: IETF - o Specification document(s): [[ this document ]] - -11.3. The OAuth Extensions Error Registry - - This specification establishes the OAuth extensions error registry. - - Additional error codes used together with other protocol extensions - (i.e. extension grant types, access token types, or extension - parameters) are registered on the advice of one or more Designated - Experts (appointed by the IESG or their delegate), with a - Specification Required (using terminology from [RFC5226]). However, - to allow for the allocation of values prior to publication, the - Designated Expert(s) may approve registration once they are satisfied - that such a specification will be published. - - Registration requests should be sent to the [TBD]@ietf.org mailing - list for review and comment, with an appropriate subject (e.g., - "Request for error code: example"). [[ Note to RFC-EDITOR: The name - of the mailing list should be determined in consultation with the - IESG and IANA. Suggested name: oauth-ext-review. ]] - - Within at most 14 days of the request, the Designated Expert(s) will - either approve or deny the registration request, communicating this - decision to the review list and IANA. Denials should include an - explanation and, if applicable, suggestions as to how to make the - request successful. - - Decisions (or lack thereof) made by the Designated Expert can be - first appealed to Application Area Directors (contactable using - app-ads@tools.ietf.org email address or directly by looking up their - email addresses on http://www.iesg.org/ website) and, if the - appellant is not satisfied with the response, to the full IESG (using - the iesg@iesg.org mailing list). - - IANA should only accept registry updates from the Designated - Expert(s), and should direct all requests for registration to the - review mailing list. - -11.3.1. Registration Template - - Error name: - The name requested (e.g., "example"). - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 51] - -Internet-Draft OAuth 2.0 May 2011 - - - Error usage location: - The location(s) where the error can be used. The possible - locations are: authorization code grant error response - (Section 4.1.2.1), implicit grant error response - (Section 4.2.2.1), or token error response (Section 5.2). - Related protocol extension: - The name of the extension grant type, access token type, or - extension parameter, the error code is used in conjunction with. - Change controller: - For standards-track RFCs, state "IETF". For others, give the name - of the responsible party. Other details (e.g., postal address, - e-mail address, home page URI) may also be included. - Specification document(s): - Reference to document that specifies the error code, preferably - including a URI that can be used to retrieve a copy of the - document. An indication of the relevant sections may also be - included, but is not required. - - -12. Acknowledgements - - The initial OAuth 2.0 protocol specification was edited by David - Recordon, based on two previous publications: the OAuth 1.0 community - specification [RFC5849], and OAuth WRAP (OAuth Web Resource - Authorization Profiles) [I-D.draft-hardt-oauth-01]. The Security - Considerations section was drafted by Torsten Lodderstedt, Mark - McGloin, Phil Hunt, and Anthony Nadalin. - - The OAuth 1.0 community specification was edited by Eran Hammer-Lahav - and authored by Mark Atwood, Dirk Balfanz, Darren Bounds, Richard M. - Conlan, Blaine Cook, Leah Culver, Breno de Medeiros, Brian Eaton, - Kellan Elliott-McCrea, Larry Halff, Eran Hammer-Lahav, Ben Laurie, - Chris Messina, John Panzer, Sam Quigley, David Recordon, Eran - Sandler, Jonathan Sergent, Todd Sieling, Brian Slesinsky, and Andy - Smith. - - The OAuth WRAP specification was edited by Dick Hardt and authored by - Brian Eaton, Yaron Goland, Dick Hardt, and Allen Tom. - - This specification is the work of the OAuth Working Group which - includes dozens of active and dedicated participants. In particular, - the following individuals contributed ideas, feedback, and wording - which shaped and formed the final specification: - - Michael Adams, Andrew Arnott, Dirk Balfanz, Scott Cantor, Blaine - Cook, Brian Campbell, Leah Culver, Bill de hOra, Brian Eaton, Brian - Ellin, Igor Faynberg, George Fletcher, Tim Freeman, Evan Gilbert, - Yaron Goland, Brent Goldman, Kristoffer Gronowski, Justin Hart, Craig - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 52] - -Internet-Draft OAuth 2.0 May 2011 - - - Heath, Phil Hunt, Michael B. Jones, John Kemp, Mark Kent, Raffi - Krikorian, Chasen Le Hara, Rasmus Lerdorf, Torsten Lodderstedt, Hui- - Lan Lu, Paul Madsen, Alastair Mair, Eve Maler, James Manger, Mark - McGloin, Laurence Miao, Chuck Mortimore, Justin Richer, Peter Saint- - Andre, Nat Sakimura, Rob Sayre, Marius Scurtescu, Naitik Shah, Luke - Shepard, Vlad Skvortsov, Justin Smith, Jeremy Suriel, Christian - Stuebner, Paul Tarjan, Allen Tom, Franklin Tse, Nick Walker, Skylar - Woodward. - - -Appendix A. Editor's Notes - - While many people contributed to this specification throughout its - long journey, the editor would like to acknowledge and thank a few - individuals for their outstanding and invaluable efforts leading up - to the publication of this specification. It is these individuals - without whom this work would not have existed, or reached its - successful conclusion. - - David Recordon for continuously being one of OAuth's most valuable - assets, bringing pragmatism and urgency to the work, and helping - shape it from its very beginning, as well as being one of the best - collaborators I had the pleasure of working with. - - Mark Nottingham for introducing OAuth to the IETF and setting the - community on this course. Lisa Dusseault for her support and - guidance as the Application area director. Blaine Cook, Peter Saint- - Andre, and Hannes Tschofenig for their work as working group chairs. - - James Manger for his creative ideas and always insightful feedback. - Brian Campbell, Torsten Lodderstedt, Chuck Mortimore, Justin Richer, - Marius Scurtescu, and Luke Shepard for their continued participation - and valuable feedback. - - Special thanks goes to Mike Curtis and Yahoo! for their unconditional - support of this work for over three years. - - -13. References - -13.1. Normative References - - [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate - Requirement Levels", BCP 14, RFC 2119, March 1997. - - [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., - Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext - Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 53] - -Internet-Draft OAuth 2.0 May 2011 - - - [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., - Leach, P., Luotonen, A., and L. Stewart, "HTTP - Authentication: Basic and Digest Access Authentication", - RFC 2617, June 1999. - - [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform - Resource Identifier (URI): Generic Syntax", STD 66, - RFC 3986, January 2005. - - [RFC4627] Crockford, D., "The application/json Media Type for - JavaScript Object Notation (JSON)", RFC 4627, July 2006. - - [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an - IANA Considerations Section in RFCs", BCP 26, RFC 5226, - May 2008. - - [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax - Specifications: ABNF", STD 68, RFC 5234, January 2008. - - [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security - (TLS) Protocol Version 1.2", RFC 5246, August 2008. - - [W3C.REC-html401-19991224] - Hors, A., Jacobs, I., and D. Raggett, "HTML 4.01 - Specification", World Wide Web Consortium - Recommendation REC-html401-19991224, December 1999, - <http://www.w3.org/TR/1999/REC-html401-19991224>. - -13.2. Informative References - - [I-D.draft-hardt-oauth-01] - Hardt, D., Ed., Tom, A., Eaton, B., and Y. Goland, "OAuth - Web Resource Authorization Profiles", January 2010. - - [I-D.ietf-oauth-saml2-bearer] - Campbell, B. and C. Mortimore, "SAML 2.0 Bearer Assertion - Grant Type Profile for OAuth 2.0", - draft-ietf-oauth-saml2-bearer-03 (work in progress), - February 2011. - - [I-D.ietf-oauth-v2-bearer] - Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 - Protocol: Bearer Tokens", draft-ietf-oauth-v2-bearer-04 - (work in progress), March 2011. - - [I-D.ietf-oauth-v2-http-mac] - Hammer-Lahav, E., Barth, A., and B. Adida, "HTTP - Authentication: MAC Access Authentication", - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 54] - -Internet-Draft OAuth 2.0 May 2011 - - - draft-ietf-oauth-v2-http-mac-00 (work in progress), - May 2011. - - [I-D.lodderstedt-oauth-security] - Lodderstedt, T., McGloin, M., and P. Hunt, "OAuth 2.0 - Threat Model and Security Considerations", - draft-lodderstedt-oauth-security-01 (work in progress), - March 2011. - - [OASIS.saml-core-2.0-os] - Cantor, S., Kemp, J., Philpott, R., and E. Maler, - "Assertions and Protocol for the OASIS Security Assertion - Markup Language (SAML) V2.0", OASIS Standard saml-core- - 2.0-os, March 2005. - - [RFC5849] Hammer-Lahav, E., "The OAuth 1.0 Protocol", RFC 5849, - April 2010. - - -Authors' Addresses - - Eran Hammer-Lahav (editor) - Yahoo! - - Email: eran@hueniverse.com - URI: http://hueniverse.com - - - David Recordon - Facebook - - Email: dr@fb.com - URI: http://www.davidrecordon.com/ - - - Dick Hardt - Microsoft - - Email: dick.hardt@gmail.com - URI: http://dickhardt.org/ - - - - - - - - - - - -Hammer-Lahav, et al. Expires November 20, 2011 [Page 55] - |