draft-ietf-oauth-v2-20.txt   draft-ietf-oauth-v2-21.txt 
Network Working Group E. Hammer-Lahav, Ed. Network Working Group E. Hammer-Lahav, Ed.
Internet-Draft Yahoo! Internet-Draft Yahoo!
Obsoletes: 5849 (if approved) D. Recordon Obsoletes: 5849 (if approved) D. Recordon
Intended status: Standards Track Facebook Intended status: Standards Track Facebook
Expires: January 26, 2012 D. Hardt Expires: March 8, 2012 D. Hardt
Microsoft Microsoft
July 25, 2011 September 5, 2011
The OAuth 2.0 Authorization Protocol The OAuth 2.0 Authorization Protocol
draft-ietf-oauth-v2-20 draft-ietf-oauth-v2-21
Abstract Abstract
The OAuth 2.0 authorization protocol enables a third-party The OAuth 2.0 authorization protocol enables a third-party
application to obtain limited access to an HTTP service, either on application to obtain limited access to an HTTP service, either on
behalf of a resource owner by orchestrating an approval interaction behalf of a resource owner by orchestrating an approval interaction
between the resource owner and the HTTP service, or by allowing the between the resource owner and the HTTP service, or by allowing the
third-party application to obtain access on its own behalf. third-party application to obtain access on its own behalf.
Status of this Memo Status of this Memo
skipping to change at page 1, line 37 skipping to change at page 1, line 37
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 26, 2012. This Internet-Draft will expire on March 8, 2012.
Copyright Notice Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 13 skipping to change at page 2, line 13
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 6 1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Access Token . . . . . . . . . . . . . . . . . . . . . . 7 1.3. Authorization Grant . . . . . . . . . . . . . . . . . . . 7
1.4. Authorization Grant . . . . . . . . . . . . . . . . . . . 8 1.3.1. Authorization Code . . . . . . . . . . . . . . . . . . 7
1.4.1. Authorization Code . . . . . . . . . . . . . . . . . . 8 1.3.2. Implicit . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2. Implicit . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.3. Resource Owner Password Credentials . . . . . . . . . 8
1.4.3. Resource Owner Password Credentials . . . . . . . . . 9 1.3.4. Client Credentials . . . . . . . . . . . . . . . . . . 9
1.4.4. Client Credentials . . . . . . . . . . . . . . . . . . 9 1.4. Access Token . . . . . . . . . . . . . . . . . . . . . . 9
1.4.5. Extensions . . . . . . . . . . . . . . . . . . . . . . 9
1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 9 1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 9
1.6. Notational Conventions . . . . . . . . . . . . . . . . . 11 1.6. Notational Conventions . . . . . . . . . . . . . . . . . 11
2. Client Registration . . . . . . . . . . . . . . . . . . . . . 11 2. Client Registration . . . . . . . . . . . . . . . . . . . . . 11
2.1. Client Types . . . . . . . . . . . . . . . . . . . . . . 12 2.1. Client Types . . . . . . . . . . . . . . . . . . . . . . 12
2.2. Registration Requirements . . . . . . . . . . . . . . . . 13 2.2. Client Identifier . . . . . . . . . . . . . . . . . . . . 13
2.3. Client Identifier . . . . . . . . . . . . . . . . . . . . 13 2.3. Client Authentication . . . . . . . . . . . . . . . . . . 13
2.4. Client Authentication . . . . . . . . . . . . . . . . . . 13 2.3.1. Client Password . . . . . . . . . . . . . . . . . . . 14
2.4.1. Client Password . . . . . . . . . . . . . . . . . . . 14 2.3.2. Other Authentication Methods . . . . . . . . . . . . . 15
2.4.2. Other Authentication Methods . . . . . . . . . . . . . 15 2.4. Unregistered Clients . . . . . . . . . . . . . . . . . . 15
2.5. Unregistered Clients . . . . . . . . . . . . . . . . . . 15
3. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . . 15 3. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . . 15
3.1. Authorization Endpoint . . . . . . . . . . . . . . . . . 15 3.1. Authorization Endpoint . . . . . . . . . . . . . . . . . 15
3.1.1. Response Type . . . . . . . . . . . . . . . . . . . . 16 3.1.1. Response Type . . . . . . . . . . . . . . . . . . . . 16
3.1.2. Redirection Endpoint . . . . . . . . . . . . . . . . . 16 3.1.2. Redirection Endpoint . . . . . . . . . . . . . . . . . 16
3.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . 18 3.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . 18
3.2.1. Client Authentication . . . . . . . . . . . . . . . . 19 3.2.1. Client Authentication . . . . . . . . . . . . . . . . 19
4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 19 3.3. Access Token Scope . . . . . . . . . . . . . . . . . . . 20
4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 20
4.1. Authorization Code . . . . . . . . . . . . . . . . . . . 20 4.1. Authorization Code . . . . . . . . . . . . . . . . . . . 20
4.1.1. Authorization Request . . . . . . . . . . . . . . . . 21 4.1.1. Authorization Request . . . . . . . . . . . . . . . . 22
4.1.2. Authorization Response . . . . . . . . . . . . . . . . 22 4.1.2. Authorization Response . . . . . . . . . . . . . . . . 23
4.1.3. Access Token Request . . . . . . . . . . . . . . . . . 24 4.1.3. Access Token Request . . . . . . . . . . . . . . . . . 25
4.1.4. Access Token Response . . . . . . . . . . . . . . . . 25 4.1.4. Access Token Response . . . . . . . . . . . . . . . . 26
4.2. Implicit Grant . . . . . . . . . . . . . . . . . . . . . 26 4.2. Implicit Grant . . . . . . . . . . . . . . . . . . . . . 27
4.2.1. Authorization Request . . . . . . . . . . . . . . . . 28 4.2.1. Authorization Request . . . . . . . . . . . . . . . . 29
4.2.2. Access Token Response . . . . . . . . . . . . . . . . 29 4.2.2. Access Token Response . . . . . . . . . . . . . . . . 30
4.3. Resource Owner Password Credentials . . . . . . . . . . . 31 4.3. Resource Owner Password Credentials . . . . . . . . . . . 32
4.3.1. Authorization Request and Response . . . . . . . . . . 32 4.3.1. Authorization Request and Response . . . . . . . . . . 33
4.3.2. Access Token Request . . . . . . . . . . . . . . . . . 33 4.3.2. Access Token Request . . . . . . . . . . . . . . . . . 33
4.3.3. Access Token Response . . . . . . . . . . . . . . . . 34 4.3.3. Access Token Response . . . . . . . . . . . . . . . . 34
4.4. Client Credentials . . . . . . . . . . . . . . . . . . . 34 4.4. Client Credentials . . . . . . . . . . . . . . . . . . . 35
4.4.1. Authorization Request and Response . . . . . . . . . . 35 4.4.1. Authorization Request and Response . . . . . . . . . . 36
4.4.2. Access Token Request . . . . . . . . . . . . . . . . . 35 4.4.2. Access Token Request . . . . . . . . . . . . . . . . . 36
4.4.3. Access Token Response . . . . . . . . . . . . . . . . 36 4.4.3. Access Token Response . . . . . . . . . . . . . . . . 36
4.5. Extensions . . . . . . . . . . . . . . . . . . . . . . . 36 4.5. Extensions . . . . . . . . . . . . . . . . . . . . . . . 37
5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 37 5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 37
5.1. Successful Response . . . . . . . . . . . . . . . . . . . 37 5.1. Successful Response . . . . . . . . . . . . . . . . . . . 38
5.2. Error Response . . . . . . . . . . . . . . . . . . . . . 39 5.2. Error Response . . . . . . . . . . . . . . . . . . . . . 39
6. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 40 6. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 40
7. Accessing Protected Resources . . . . . . . . . . . . . . . . 41 7. Accessing Protected Resources . . . . . . . . . . . . . . . . 42
7.1. Access Token Types . . . . . . . . . . . . . . . . . . . 42 7.1. Access Token Types . . . . . . . . . . . . . . . . . . . 42
8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 43 8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 43
8.1. Defining Access Token Types . . . . . . . . . . . . . . . 43 8.1. Defining Access Token Types . . . . . . . . . . . . . . . 43
8.2. Defining New Endpoint Parameters . . . . . . . . . . . . 43 8.2. Defining New Endpoint Parameters . . . . . . . . . . . . 44
8.3. Defining New Authorization Grant Types . . . . . . . . . 44 8.3. Defining New Authorization Grant Types . . . . . . . . . 44
8.4. Defining New Authorization Endpoint Response Types . . . 44 8.4. Defining New Authorization Endpoint Response Types . . . 44
8.5. Defining Additional Error Codes . . . . . . . . . . . . . 44 8.5. Defining Additional Error Codes . . . . . . . . . . . . . 45
9. Native Applications . . . . . . . . . . . . . . . . . . . . . 45 9. Native Applications . . . . . . . . . . . . . . . . . . . . . 45
10. Security Considerations . . . . . . . . . . . . . . . . . . . 46 10. Security Considerations . . . . . . . . . . . . . . . . . . . 46
10.1. Client Authentication . . . . . . . . . . . . . . . . . . 46 10.1. Client Authentication . . . . . . . . . . . . . . . . . . 47
10.2. Client Impersonation . . . . . . . . . . . . . . . . . . 47 10.2. Client Impersonation . . . . . . . . . . . . . . . . . . 47
10.3. Access Tokens . . . . . . . . . . . . . . . . . . . . . . 47 10.3. Access Tokens . . . . . . . . . . . . . . . . . . . . . . 48
10.4. Refresh Tokens . . . . . . . . . . . . . . . . . . . . . 48 10.4. Refresh Tokens . . . . . . . . . . . . . . . . . . . . . 48
10.5. Authorization Codes . . . . . . . . . . . . . . . . . . . 48 10.5. Authorization Codes . . . . . . . . . . . . . . . . . . . 49
10.6. Authorization Code Leakage . . . . . . . . . . . . . . . 49 10.6. Authorization Code Redirection URI Manipulation . . . . . 49
10.7. Resource Owner Password Credentials . . . . . . . . . . . 49 10.7. Resource Owner Password Credentials . . . . . . . . . . . 50
10.8. Request Confidentiality . . . . . . . . . . . . . . . . . 50 10.8. Request Confidentiality . . . . . . . . . . . . . . . . . 51
10.9. Endpoints Authenticity . . . . . . . . . . . . . . . . . 50 10.9. Endpoints Authenticity . . . . . . . . . . . . . . . . . 51
10.10. Credentials Guessing Attacks . . . . . . . . . . . . . . 50 10.10. Credentials Guessing Attacks . . . . . . . . . . . . . . 51
10.11. Phishing Attacks . . . . . . . . . . . . . . . . . . . . 50 10.11. Phishing Attacks . . . . . . . . . . . . . . . . . . . . 51
10.12. Cross-Site Request Forgery . . . . . . . . . . . . . . . 51 10.12. Cross-Site Request Forgery . . . . . . . . . . . . . . . 52
10.13. Clickjacking . . . . . . . . . . . . . . . . . . . . . . 51 10.13. Clickjacking . . . . . . . . . . . . . . . . . . . . . . 53
10.14. Code Injection and Input Validation . . . . . . . . . . . 52 10.14. Code Injection and Input Validation . . . . . . . . . . . 53
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 10.15. Open Redirectors . . . . . . . . . . . . . . . . . . . . 53
11.1. The OAuth Access Token Type Registry . . . . . . . . . . 52 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54
11.1.1. Registration Template . . . . . . . . . . . . . . . . 53 11.1. The OAuth Access Token Type Registry . . . . . . . . . . 54
11.2. The OAuth Parameters Registry . . . . . . . . . . . . . . 53 11.1.1. Registration Template . . . . . . . . . . . . . . . . 54
11.2.1. Registration Template . . . . . . . . . . . . . . . . 54 11.2. The OAuth Parameters Registry . . . . . . . . . . . . . . 55
11.2.2. Initial Registry Contents . . . . . . . . . . . . . . 54 11.2.1. Registration Template . . . . . . . . . . . . . . . . 56
11.2.2. Initial Registry Contents . . . . . . . . . . . . . . 56
11.3. The OAuth Authorization Endpoint Response Type 11.3. The OAuth Authorization Endpoint Response Type
Registry . . . . . . . . . . . . . . . . . . . . . . . . 56 Registry . . . . . . . . . . . . . . . . . . . . . . . . 58
11.3.1. Registration Template . . . . . . . . . . . . . . . . 57 11.3.1. Registration Template . . . . . . . . . . . . . . . . 59
11.3.2. Initial Registry Contents . . . . . . . . . . . . . . 57 11.3.2. Initial Registry Contents . . . . . . . . . . . . . . 59
11.4. The OAuth Extensions Error Registry . . . . . . . . . . . 58 11.4. The OAuth Extensions Error Registry . . . . . . . . . . . 59
11.4.1. Registration Template . . . . . . . . . . . . . . . . 58 11.4.1. Registration Template . . . . . . . . . . . . . . . . 60
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 59 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 61
Appendix A. Editor's Notes . . . . . . . . . . . . . . . . . . . 60 Appendix A. Editor's Notes . . . . . . . . . . . . . . . . . . . 61
13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 60 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 62
13.1. Normative References . . . . . . . . . . . . . . . . . . 60 13.1. Normative References . . . . . . . . . . . . . . . . . . 62
13.2. Informative References . . . . . . . . . . . . . . . . . 61 13.2. Informative References . . . . . . . . . . . . . . . . . 63
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 62 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 64
1. Introduction 1. Introduction
In the traditional client-server authentication model, the client In the traditional client-server authentication model, the client
accesses a protected resource on the server by authenticating with accesses a protected resource on the server by authenticating with
the server using the resource owner's credentials. In order to the server using the resource owner's credentials. In order to
provide third-party applications access to protected resources, the provide third-party applications access to protected resources, the
resource owner shares its credentials with the third-party. This resource owner shares its credentials with the third-party. This
creates several problems and limitations: creates several problems and limitations:
skipping to change at page 7, line 13 skipping to change at page 7, line 13
+--------+ +---------------+ +--------+ +---------------+
Figure 1: Abstract Protocol Flow Figure 1: Abstract Protocol Flow
The abstract flow illustrated in Figure 1 describes the interaction The abstract flow illustrated in Figure 1 describes the interaction
between the four roles and includes the following steps: between the four roles and includes the following steps:
(A) The client requests authorization from the resource owner. The (A) The client requests authorization from the resource owner. The
authorization request can be made directly to the resource owner authorization request can be made directly to the resource owner
(as shown), or preferably indirectly via an intermediary such as (as shown), or preferably indirectly via an intermediary such as
an authorization server. an authorization server.
(B) The client receives an authorization grant which represents the (B) The client receives an authorization grant which is a credential
authorization provided by the resource owner. The authorization representing the resource owner's authorization, expressed using
grant type depends on the method used by the client and one of four grant types defined in this specification or using
supported by the authorization server to obtain it. an extension grant type. The authorization grant type depends
on the method used by the client to request authorization and
the types supported by the authorization server.
(C) The client requests an access token by authenticating with the (C) The client requests an access token by authenticating with the
authorization server and presenting the authorization grant. authorization server and presenting the authorization grant.
(D) The authorization server authenticates the client and validates (D) The authorization server authenticates the client and validates
the authorization grant, and if valid issues an access token. the authorization grant, and if valid issues an access token.
(E) The client requests the protected resource from the resource (E) The client requests the protected resource from the resource
server and authenticates by presenting the access token. server and authenticates by presenting the access token.
(F) The resource server validates the access token, and if valid, (F) The resource server validates the access token, and if valid,
serves the request. serves the request.
1.3. Access Token 1.3. Authorization Grant
Access tokens are credentials used to access protected resources. 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
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, which are beyond
the scope of this specification, 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, An authorization grant is a credential representing the resource
implicit, resource owner password credentials, and client owner's authorization (to access its protected resources) used by the
credentials, as well as an extensibility mechanism for defining client to obtain an access token. This specification defines four
additional types. 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 1.3.1. Authorization Code
The authorization code is obtained by using an authorization server The authorization code is obtained by using an authorization server
as an intermediary between the client and resource owner. Instead of as an intermediary between the client and resource owner. Instead of
requesting authorization directly from the resource owner, the client requesting authorization directly from the resource owner, the client
directs the resource owner to an authorization server (via its user- directs the resource owner to an authorization server (via its user-
agent as defined in [RFC2616]), which in turn directs the resource agent as defined in [RFC2616]), which in turn directs the resource
owner back to the client with the authorization code. owner back to the client with the authorization code.
Before directing the resource owner back to the client with the Before directing the resource owner back to the client with the
authorization code, the authorization server authenticates the authorization code, the authorization server authenticates the
resource owner and obtains authorization. Because the resource owner resource owner and obtains authorization. Because the resource owner
only authenticates with the authorization server, the resource only authenticates with the authorization server, the resource
owner's credentials are never shared with the client. owner's credentials are never shared with the client.
The authorization code provides a few important security benefits The authorization code provides a few important security benefits
such as the ability to authenticate the client and issuing the access such as the ability to authenticate the client, and the transmission
token directly to the client without potentially exposing it to of the the access token directly to the client without passing it
through the resource owner's user-agnet, potentially exposing it to
others, including the resource owner. others, including the resource owner.
1.4.2. Implicit 1.3.2. Implicit
The authorization grant is implicit when an access token is issued to The implicit grant is a simplified authorization code flow optimized
the client directly as the result of the resource owner for clients implemented in a browser using a scripting language such
authorization, without using intermediate credentials (such as an as JavaScript. In the implicit flow, instead of issuing the client
authorization code). an authorization code, the client is issued an access token directly
(as the result of the resource owner authorization). The grant type
is implicit as no intermediate credentials (such as an authorization
code) are issued (and later used to obtain an access token).
When issuing an implicit grant, the authorization server does not When issuing an implicit grant, the authorization server does not
authenticate the client and the client identity is verified via the authenticate the client and in some cases, the client identity can be
redirection URI used to deliver the access token to the client. The verified via the redirection URI used to deliver the access token to
access token may be exposed to the resource owner or other the client. The access token may be exposed to the resource owner or
applications with access to the resource owner's user-agent. other applications with access to the resource owner's user-agent.
Implicit grants improve the responsiveness and efficiency of some Implicit grants improve the responsiveness and efficiency of some
clients (such as a client implemented as an in-browser application) clients (such as a client implemented as an in-browser application)
since it reduces the number of round trips required to obtain an since it reduces the number of round trips required to obtain an
access token. However, this convenience should be weighted against access token. However, this convenience should be weighed against
the security implications of using implicit grants, especially when the security implications of using implicit grants, especially when
the authorization code grant type is available. the authorization code grant type is available.
1.4.3. Resource Owner Password Credentials 1.3.3. Resource Owner Password Credentials
The resource owner password credentials (e.g. a username and The resource owner password credentials (e.g. a username and
password) can be used directly as an authorization grant to obtain an password) can be used directly as an authorization grant to obtain an
access token. The credentials should only be used when there is a 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. high degree of trust between the resource owner and the client (e.g.
its device operating system or a highly privileged application), and its device operating system or a highly privileged application), and
when other authorization grant types are not available (such as an when other authorization grant types are not available (such as an
authorization code). authorization code).
Even though this grant type requires direct client access to the Even though this grant type requires direct client access to the
resource owner credentials, the resource owner credentials are used resource owner credentials, the resource owner credentials are used
for a single request and are exchanged for an access token. Unlike for a single request and are exchanged for an access token. This
the HTTP Basic authentication scheme defined in [RFC2617], this grant grant type can eliminate the need for the client to store the
type (when combined with a refresh token) eliminates the need for the resource owner credentials for future use, by exchanging the
client to store the resource owner credentials for future use. credentials with a long-lived access token or refresh token.
1.4.4. Client Credentials 1.3.4. Client Credentials
The client credentials (or other forms of client authentication) can The client credentials (or other forms of client authentication) can
be used as an authorization grant when the authorization scope is be used as an authorization grant when the authorization scope is
limited to the protected resources under the control of the client, limited to the protected resources under the control of the client,
or to protected resources previously arranged with the authorization or to protected resources previously arranged with the authorization
server. Client credentials are used as an authorization grant server. Client credentials are used as an authorization grant
typically when the client is acting on its own behalf (the client is typically when the client is acting on its own behalf (the client is
also the resource owner). also the resource owner), or is requesting access to protected
resources based on an authorization previously arranged with the
authorization server.
1.4.5. Extensions 1.4. Access Token
Additional grant types may be defined to provide a bridge between Access tokens are credentials used to access protected resources. An
OAuth and other protocols. 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
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, which are beyond
the scope of this specification, 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.5. Refresh Token 1.5. Refresh Token
Refresh tokens are credentials used to obtain access tokens. Refresh Refresh tokens are credentials used to obtain access tokens. Refresh
tokens are issued to the client by the authorization server and are tokens are issued to the client by the authorization server and are
used to obtain a new access token when the current access token used to obtain a new access token when the current access token
becomes invalid or expires, or to obtain additional access tokens becomes invalid or expires, or to obtain additional access tokens
with identical or narrower scope (access tokens may have a shorter with identical or narrower scope (access tokens may have a shorter
lifetime and fewer permissions than authorized by the resource lifetime and fewer permissions than authorized by the resource
owner). Issuing a refresh token is optional and is included when owner). Issuing a refresh token is optional and is included when
skipping to change at page 10, line 43 skipping to change at page 10, line 45
Figure 2: Refreshing an Expired Access Token Figure 2: Refreshing an Expired Access Token
The flow illustrated in Figure 2 includes the following steps: The flow illustrated in Figure 2 includes the following steps:
(A) The client requests an access token by authenticating with the (A) The client requests an access token by authenticating with the
authorization server, and presenting an authorization grant. authorization server, and presenting an authorization grant.
(B) The authorization server authenticates the client and validates (B) The authorization server authenticates the client and validates
the authorization grant, and if valid issues an access token and the authorization grant, and if valid issues an access token and
a refresh token. a refresh token.
(C) The client makes a protected resource requests to the resource (C) The client makes a protected resource request to the resource
server by presenting the access token. server by presenting the access token.
(D) The resource server validates the access token, and if valid, (D) The resource server validates the access token, and if valid,
serves the request. serves the request.
(E) Steps (C) and (D) repeat until the access token expires. If the (E) Steps (C) and (D) repeat until the access token expires. If the
client knows the access token expired, it skips to step (G), client knows the access token expired, it skips to step (G),
otherwise it makes another protected resource request. otherwise it makes another protected resource request.
(F) Since the access token is invalid, the resource server returns (F) Since the access token is invalid, the resource server returns
an invalid token error. an invalid token error.
(G) The client requests a new access token by authenticating with (G) The client requests a new access token by authenticating with
the authorization server and presenting the refresh token. the authorization server and presenting the refresh token. The
client authentication requirements are based on the client type
and on the authorization server policies.
(H) The authorization server authenticates the client and validates (H) The authorization server authenticates the client and validates
the refresh token, and if valid issues a new access token (and the refresh token, and if valid issues a new access token (and
optionally, a new refresh token). optionally, a new refresh token).
1.6. Notational Conventions 1.6. Notational Conventions
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT',
'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in this 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in this
specification are to be interpreted as described in [RFC2119]. specification are to be interpreted as described in [RFC2119].
skipping to change at page 12, line 5 skipping to change at page 12, line 7
Client registration does not require a direct interaction between the Client registration does not require a direct interaction between the
client and the authorization server. When supported by the client and the authorization server. When supported by the
authorization server, registration can rely on other means for authorization server, registration can rely on other means for
establishing trust and obtaining the required client properties (e.g. establishing trust and obtaining the required client properties (e.g.
redirection URI, client type). For example, registration can be redirection URI, client type). For example, registration can be
accomplished using a self-issued or third-party-issued assertion, or accomplished using a self-issued or third-party-issued assertion, or
by the authorization server performing client discovery using a by the authorization server performing client discovery using a
trusted channel. trusted channel.
When registering a client, the client developer:
o specifies the client type as described in Section 2.1,
o provides its client redirection URIs as described in
Section 3.1.2, and
o includes any other information required by the authorization
server (e.g. application name, website, description, logo image,
the acceptance of legal terms).
2.1. Client Types 2.1. Client Types
OAuth defines two client types, based on their ability to OAuth defines two client types, based on their ability to
authenticate securely with the authorization server (i.e. ability to authenticate securely with the authorization server (i.e. ability to
maintain the confidentiality of their client credentials): maintain the confidentiality of their client credentials):
confidential confidential
Clients capable of maintaining the confidentiality of their Clients capable of maintaining the confidentiality of their
credentials (e.g. client implemented on a secure server with credentials (e.g. client implemented on a secure server with
restricted access to the client credentials), or capable of secure restricted access to the client credentials), or capable of secure
client authentication using other means. client authentication using other means.
public public
Clients incapable of maintaining the confidentiality of their Clients incapable of maintaining the confidentiality of their
credentials (e.g. clients executing on the resource owner's device credentials (e.g. clients executing on the resource owner's device
such as an installed native application or a user-agent-based such as an installed native application or a web browser-based
application), and incapable of secure client authentication via application), and incapable of secure client authentication via
any other mean. any other mean.
The client type designation is based on the authorization server's The client type designation is based on the authorization server's
definition of secure authentication and its acceptable exposure definition of secure authentication and its acceptable exposure
levels of client credentials. levels of client credentials.
This specification has been designed around the following client This specification has been designed around the following client
profiles: profiles:
skipping to change at page 12, line 37 skipping to change at page 13, line 4
This specification has been designed around the following client This specification has been designed around the following client
profiles: profiles:
web application web application
A web application is a confidential client running on a web A web application is a confidential client running on a web
server. Resource owners access the client via an HTML user server. Resource owners access the client via an HTML user
interface rendered in a user-agent on the resource owner's device. interface rendered in a user-agent on the resource owner's device.
The client credentials as well as any access token issued to the 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 client are stored on the web server and are not exposed to or
accessible by the resource owner. accessible by the resource owner.
user-agent-based application user-agent-based application
A user-agent-based application is a public client in which the A user-agent-based application is a public client in which the
client code is downloaded from a web server and executes within a client code is downloaded from a web server and executes within a
user-agent on the resource owner's device. Protocol data and user-agent (e.g. web browser) on the resource owner's device.
credentials are easily accessible (and often visible) to the Protocol data and credentials are easily accessible (and often
resource owner. Since such applications reside within the user- visible) to the resource owner. Since such applications reside
agent, they can make seamless use of the user-agent capabilities within the user-agent, they can make seamless use of the user-
when requesting authorization. agent capabilities when requesting authorization.
native application native application
A native application is a public client installed and executed on A native application is a public client installed and executed on
the resource owner's device. Protocol data and credentials are the resource owner's device. Protocol data and credentials are
accessible to the resource owner. It is assumed that any client accessible to the resource owner. It is assumed that any client
authentication credentials included in the application can be authentication credentials included in the application can be
extracted. On the other hand, dynamically issued credentials such extracted. On the other hand, dynamically issued credentials such
access tokens or refresh tokens, can receive an acceptable level access tokens or refresh tokens, can receive an acceptable level
of protection. At a minimum, these credentials are protected from of protection. At a minimum, these credentials are protected from
hostile servers which the application may interact with. On some hostile servers which the application may interact with. On some
platform these credentials might be protected from other platform these credentials might be protected from other
applications residing on the same device. applications residing on the same device.
2.2. Registration Requirements 2.2. Client Identifier
When registering a client, the client developer:
o specifies the client type as described in Section 2.1,
o provides its client redirection URIs as described in
Section 3.1.2, and
o includes any other information required by the authorization
server (e.g. application name, website, description, logo image,
the acceptance of legal terms).
2.3. Client Identifier
The authorization server issues the registered client a client The authorization server issues the registered client a client
identifier - a unique string representing the registration identifier - a unique string representing the registration
information provided by the client. The client identifier is not a information provided by the client. The client identifier is not a
secret, it is exposed to the resource owner, and cannot be used alone secret, it is exposed to the resource owner, and MUST NOT be used
for client authentication. alone for client authentication.
2.4. Client Authentication 2.3. Client Authentication
If the client type is confidential, the client and authorization If the client type is confidential, the client and authorization
server establish a client authentication method suitable for the server establish a client authentication method suitable for the
security requirements of the authorization server. The authorization security requirements of the authorization server. The authorization
server MAY accept any form of client authentication meeting its server MAY accept any form of client authentication meeting its
security requirements. security requirements.
Confidential clients are typically issued (or establish) a set of Confidential clients are typically issued (or establish) a set of
client credentials used for authenticating with the authorization client credentials used for authenticating with the authorization
server (e.g. password, public/private key pair). server (e.g. password, public/private key pair).
skipping to change at page 14, line 5 skipping to change at page 14, line 6
The authorization server SHOULD NOT make assumptions about the client The authorization server SHOULD NOT make assumptions about the client
type or accept the type information provided without establishing type or accept the type information provided without establishing
trust with the client or its developer. The authorization server MAY trust with the client or its developer. The authorization server MAY
establish a client authentication method with public clients. establish a client authentication method with public clients.
However, the authorization server MUST NOT rely on public client However, the authorization server MUST NOT rely on public client
authentication for the purpose of identifying the client. authentication for the purpose of identifying the client.
The client MUST NOT use more than one authentication method in each The client MUST NOT use more than one authentication method in each
request. request.
2.4.1. Client Password 2.3.1. Client Password
Clients in possession of a client password MAY use the HTTP Basic Clients in possession of a client password MAY use the HTTP Basic
authentication scheme as defined in [RFC2617] to authenticate with authentication scheme as defined in [RFC2617] to authenticate with
the authorization server. The client identifier is used as the the authorization server. The client identifier is used as the
username, and the client password is used as the password. username, and the client password is used as the password.
For example (extra line breaks are for display purposes only): For example (extra line breaks are for display purposes only):
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Alternatively, the authorization server MAY allow including the Alternatively, the authorization server MAY allow including the
client credentials in the request body using the following client credentials in the request body using the following
parameters: parameters:
client_id client_id
REQUIRED. The client identifier issued to the client during REQUIRED. The client identifier issued to the client during
the registration process described by Section 2.3. the registration process described by Section 2.2.
client_secret client_secret
REQUIRED. The client secret. REQUIRED. The client secret. The client MAY omit the
parameter if the client secret is an empty string.
Including the client credentials in the request body using the two Including the client credentials in the request body using the two
parameters is NOT RECOMMENDED, and should be limited to clients parameters is NOT RECOMMENDED, and should be limited to clients
unable to directly utilize the HTTP Basic authentication scheme (or unable to directly utilize the HTTP Basic authentication scheme (or
other password-based HTTP authentication schemes). other password-based HTTP authentication schemes).
For example, requesting to refresh an access token (Section 6) using For example, requesting to refresh an access token (Section 6) using
the body parameters (extra line breaks are for display purposes the body parameters (extra line breaks are for display purposes
only): only):
skipping to change at page 15, line 5 skipping to change at page 15, line 5
Content-Type: application/x-www-form-urlencoded;charset=UTF-8 Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
&client_id=s6BhdRkqt3&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw &client_id=s6BhdRkqt3&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw
The authorization server MUST require the use of a transport-layer The authorization server MUST require the use of a transport-layer
security mechanism when sending requests to the token endpoint, as security mechanism when sending requests to the token endpoint, as
requests using this authentication method result in the transmission requests using this authentication method result in the transmission
of clear-text credentials. of clear-text credentials.
2.4.2. Other Authentication Methods Since this client authentication method involves a password, the
authorization server MUST protect any endpoint utilizing it against
brute force attacks.
2.3.2. Other Authentication Methods
The authorization server MAY support any suitable HTTP authentication The authorization server MAY support any suitable HTTP authentication
scheme matching its security requirements. When using other scheme matching its security requirements. When using other
authentication methods, the authorization server MUST define a authentication methods, the authorization server MUST define a
mapping between the client identifier (registration record) and mapping between the client identifier (registration record) and
authentication scheme. authentication scheme.
2.5. Unregistered Clients 2.4. Unregistered Clients
This specification does not exclude the use of unregistered clients. This specification does not exclude the use of unregistered clients.
However, the use with such clients is beyond the scope of this However, the use with such clients is beyond the scope of this
specification, and requires additional security analysis and review specification, and requires additional security analysis and review
of its interoperability impact. of its interoperability impact.
3. Protocol Endpoints 3. Protocol Endpoints
The authorization process utilizes two endpoints (HTTP resources): The authorization process utilizes two endpoints (HTTP resources):
skipping to change at page 15, line 35 skipping to change at page 15, line 39
resource owner via user-agent redirection. resource owner via user-agent redirection.
o Token endpoint - used to exchange an authorization grant for an o Token endpoint - used to exchange an authorization grant for an
access token, typically with client authentication. access token, typically with client authentication.
Not every authorization grant type utilizes both endpoints. Not every authorization grant type utilizes both endpoints.
Extension grant types MAY define additional endpoints as needed. Extension grant types MAY define additional endpoints as needed.
3.1. Authorization Endpoint 3.1. Authorization Endpoint
The authorization endpoint is used to interact with the resource The authorization endpoint is used to interact with the resource
owner and obtain authorization which is expressed explicitly as an owner and obtain an authorization grant. The authorization server
authorization code (later exchanged for an access token), or MUST first verify the identity of the resource owner. The way in
implicitly by direct issuance of an access token. which the authorization server authenticates the resource owner (e.g.
username and password login, session cookies) is beyond the scope of
The authorization server MUST first verify the identity of the this specification.
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 The means through which the client obtains the location of the
authorization endpoint are beyond the scope of this specification but authorization endpoint are beyond the scope of this specification but
the location is typically provided in the service documentation. The the location is typically provided in the service documentation.
endpoint URI MAY include a query component as defined by [RFC3986]
section 3, which MUST be retained when adding additional query The endpoint URI MAY include an "application/x-www-form-urlencoded"
formatted ([W3C.REC-html401-19991224]) query component ([RFC3986]
section 3.4), which MUST be retained when adding additional query
parameters. The endpoint URI MUST NOT include a fragment component. parameters. The endpoint URI MUST NOT include a fragment component.
Since requests to the authorization endpoint result in user Since requests to the authorization endpoint result in user
authentication and the transmission of clear-text credentials (in the authentication and the transmission of clear-text credentials (in the
HTTP response), the authorization server MUST require the use of a HTTP response), the authorization server MUST require the use of a
transport-layer security mechanism when sending requests to the transport-layer security mechanism when sending requests to the
authorization endpoint. The authorization server MUST support TLS authorization endpoint. The authorization server MUST support TLS
1.2 as defined in [RFC5246], and MAY support additional transport- 1.0 ([RFC2246]), SHOULD support TLS 1.2 ([RFC5246]) and its future
layer mechanisms meeting its security requirements. replacements, and MAY support additional transport-layer mechanisms
meeting its security requirements.
The authorization server MUST support the use of the HTTP "GET" The authorization server MUST support the use of the HTTP "GET"
method [RFC2616] for the authorization endpoint, and MAY support the method [RFC2616] for the authorization endpoint, and MAY support the
use of the "POST" method as well. use of the "POST" method as well.
Parameters sent without a value MUST be treated as if they were Parameters sent without a value MUST be treated as if they were
omitted from the request. The authorization server SHOULD ignore omitted from the request. The authorization server SHOULD ignore
unrecognized request parameters. Request and response parameters unrecognized request parameters. Request and response parameters
MUST NOT be included more than once. MUST NOT be included more than once.
skipping to change at page 16, line 48 skipping to change at page 17, line 4
the authorization server SHOULD return an error response as described the authorization server SHOULD return an error response as described
in Section 4.1.2.1. in Section 4.1.2.1.
3.1.2. Redirection Endpoint 3.1.2. Redirection Endpoint
After completing its interaction with the resource owner, the After completing its interaction with the resource owner, the
authorization server directs the resource owner's user-agent back to authorization server directs the resource owner's user-agent back to
the client. The authorization server redirects the user-agent to the the client. The authorization server redirects the user-agent to the
client's redirection endpoint previously established with the client's redirection endpoint previously established with the
authorization server during the client registration process or when authorization server during the client registration process or when
initiating the authorization request. making the authorization request.
The redirection endpoint URI MUST be an absolute URI as defined by The redirection endpoint URI MUST be an absolute URI as defined by
[RFC3986] section 4.3, MAY include a query component which MUST be [RFC3986] section 4.3. The endpoint URI MAY include an
retained by the authorization server when adding additional query "application/x-www-form-urlencoded" formatted
parameters, and MUST NOT include a fragment component. ([W3C.REC-html401-19991224]) query component ([RFC3986] section 3.4),
which MUST be retained when adding additional query parameters. The
endpoint URI MUST NOT include a fragment component.
3.1.2.1. Endpoint Request Confidentiality 3.1.2.1. Endpoint Request Confidentiality
If a redirection request will result in the transmission of an If a redirection request will result in the transmission of an
authorization code or access token over an open network (between the authorization code or access token over an open network (between the
resource owner's user-agent and the client), the client SHOULD resource owner's user-agent and the client), the client SHOULD
require the use of a transport-layer security mechanism. require the use of a transport-layer security mechanism.
Lack of transport-layer security can have a severe impact on the Lack of transport-layer security can have a severe impact on the
security of the client and the protected resources it is authorized security of the client and the protected resources it is authorized
to access. The use of transport-layer security is particularly to access. The use of transport-layer security is particularly
critical when the authorization process is used as a form of critical when the authorization process is used as a form of
delegated end-user authentication by the client (e.g. third-party delegated end-user authentication by the client (e.g. third-party
sign-in service). sign-in service).
3.1.2.2. Registration Requirements 3.1.2.2. Registration Requirements
The authorization server MUST require public clients to register The authorization server SHOULD require all clients to register their
their redirection URI, MUST require all clients to register their redirection URI prior to using the authorization endpoint, and MUST
redirection URI prior to utilizing the implicit grant type, and require the following clients to register their redirection URI:
SHOULD require all clients to register their redirection URI prior to
utilizing the authorization code grant type. o Public clients.
o Confidential clients utilizing the implicit grant type.
The authorization server SHOULD require the client to provide the The authorization server SHOULD require the client to provide the
complete redirection URI (the client MAY use the "state" request complete redirection URI (the client MAY use the "state" request
parameter to achieve per-request customization). The authorization parameter to achieve per-request customization). The authorization
server MAY allow the client to register multiple redirection URIs. server MAY allow the client to register multiple redirection URIs.
If requiring the registration of the complete redirection URI is not If requiring the registration of the complete redirection URI is not
possible, the authorization server SHOULD require the registration of possible, the authorization server SHOULD require the registration of
the URI scheme, authority, and path. the URI scheme, authority, and path (allowing the client to
dynamically change only the query component of the redirection URI
when requesting authorization).
3.1.2.3. Dynamic Configuration 3.1.2.3. Dynamic Configuration
If multiple redirection URIs have been registered, if only part of If multiple redirection URIs have been registered, if only part of
the redirection URI has been registered, or if no redirection URI has the redirection URI has been registered, or if no redirection URI has
been registered, the client MUST include a redirection URI with the been registered, the client MUST include a redirection URI with the
authorization request using the "redirect_uri" request parameter. authorization request using the "redirect_uri" request parameter.
When a redirection URI is included in an authorization request, the When a redirection URI is included in an authorization request, the
authorization server MUST compare and match the value received authorization server MUST compare and match the value received
against at least one of the registered redirection URIs (or URI against at least one of the registered redirection URIs (or URI
components) as defined in [RFC3986] section 6, if any redirection components) as defined in [RFC3986] section 6, if any redirection
URIs were registered. URIs were registered. If the client registration included the full
redirection URI, the authorization server MUST compare the two URIs
using simple string comparison as defined in [RFC3986] section 6.2.1.
If the authorization server allows the client to dynamically change If the authorization server allows the client to dynamically change
the query component of the redirection URI, the client MUST ensure the query component of the redirection URI, the client MUST ensure
that manipulation of the query component by an attacker cannot lead that manipulation of the query component by an attacker cannot lead
to an abuse of the redirection endpoint as an open redirector. to an abuse of the redirection endpoint as described in
Section 10.15.
3.1.2.4. Invalid Endpoint 3.1.2.4. Invalid Endpoint
If an authorization request fails validation due to a missing, If an authorization request fails validation due to a missing,
invalid, or mismatching redirection URI, the authorization server invalid, or mismatching redirection URI, the authorization server
SHOULD inform the resource owner of the error, and MUST NOT SHOULD inform the resource owner of the error, and MUST NOT
automatically redirect the user-agent to the invalid redirection URI. automatically redirect the user-agent to the invalid redirection URI.
The authorization server SHOULD NOT redirect the user-agent to The authorization server SHOULD NOT redirect the user-agent to
unregistered or untrusted URIs to prevent the authorization endpoint unregistered or untrusted URIs to prevent the authorization endpoint
skipping to change at page 18, line 46 skipping to change at page 19, line 9
3.2. Token Endpoint 3.2. Token Endpoint
The token endpoint is used by the client to obtain an access token by The token endpoint is used by the client to obtain an access token by
presenting its authorization grant or refresh token. The token presenting its authorization grant or refresh token. The token
endpoint is used with every authorization grant except for the endpoint is used with every authorization grant except for the
implicit grant type (since an access token is issued directly). implicit grant type (since an access token is issued directly).
The means through which the client obtains the location of the token The means through which the client obtains the location of the token
endpoint are beyond the scope of this specification but is typically endpoint are beyond the scope of this specification but is typically
provided in the service documentation. The endpoint URI MAY include provided in the service documentation.
a query component, which MUST be retained when adding additional
query parameters. The endpoint URI MAY include an "application/x-www-form-urlencoded"
formatted ([W3C.REC-html401-19991224]) query component ([RFC3986]
section 3.4), which MUST be retained when adding additional query
parameters. The endpoint URI MUST NOT include a fragment component.
Since requests to the token endpoint result in the transmission of Since requests to the token endpoint result in the transmission of
clear-text credentials (in the HTTP request and response), the clear-text credentials (in the HTTP request and response), the
authorization server MUST require the use of a transport-layer authorization server MUST require the use of a transport-layer
security mechanism when sending requests to the token endpoint. The security mechanism when sending requests to the token endpoint. The
authorization server MUST support TLS 1.2 as defined in [RFC5246], authorization server MUST support TLS 1.0 ([RFC2246]), SHOULD support
and MAY support additional transport-layer mechanisms meeting its TLS 1.2 ([RFC5246]) and its future replacements, and MAY support
security requirements. additional transport-layer mechanisms meeting its security
requirements.
The client MUST use the HTTP "POST" method when making access token The client MUST use the HTTP "POST" method when making access token
requests. requests.
Parameters sent without a value MUST be treated as if they were Parameters sent without a value MUST be treated as if they were
omitted from the request. The authorization server SHOULD ignore omitted from the request. The authorization server SHOULD ignore
unrecognized request parameters. Request and response parameters unrecognized request parameters. Request and response parameters
MUST NOT be included more than once. MUST NOT be included more than once.
3.2.1. Client Authentication 3.2.1. Client Authentication
Confidential clients, clients issued client credentials, or clients Confidential clients, clients issued client credentials, or clients
assigned other authentication requirements, MUST authenticate with assigned other authentication requirements, MUST authenticate with
the authorization server as described in Section 2.4 when making the authorization server as described in Section 2.3 when making
requests to the token endpoint. Client authentication is used for: requests to the token endpoint. Client authentication is used for:
o Enforcing the binding of refresh tokens and authorization codes to o Enforcing the binding of refresh tokens and authorization codes to
the client they are issued. Client authentication is critical the client they are issued. Client authentication is critical
when an authorization code is transmitted to the redirection when an authorization code is transmitted to the redirection
endpoint over an insecure channel, or when the redirection URI has endpoint over an insecure channel, or when the redirection URI has
not been registered in full. not been registered in full.
o Recovery from a compromised client by disabling the client or o Recovering from a compromised client by disabling the client or
changing its credentials, by preventing an attacker from abusing changing its credentials, thus preventing an attacker from abusing
stolen refresh tokens. Changing a single set of client stolen refresh tokens. Changing a single set of client
credentials is significantly faster than revoking an entire set of credentials is significantly faster than revoking an entire set of
refresh tokens. refresh tokens.
o Implementing authentication management best practices which o Implementing authentication management best practices which
require periodic credentials rotation. Rotation of an entire set require periodic credential rotation. Rotation of an entire set
of refresh tokens can be challenging, while rotation of a single of refresh tokens can be challenging, while rotation of a single
set of client credentials is significantly easier. set of client credentials is significantly easier.
A public client that was not issued a client password MAY use the
"client_id" request parameter to identify itself when sending
requests to the token endpoint.
The security ramifications of allowing unauthenticated access by The security ramifications of allowing unauthenticated access by
public clients to the token endpoint MUST be considered, as well as public clients to the token endpoint, as well as the issuance of
the issuance of refresh tokens to public clients, their scope, and refresh tokens to public clients MUST be taken into consideration.
lifetime.
3.3. Access Token Scope
The authorization and token endpoints allow the client to specify the
scope of the access request using the "scope" request parameter. In
turn, the authorization server uses the "scope" response parameter to
inform the client of the scope of the access token issued.
The value of the scope parameter is expressed as a list of space-
delimited, case sensitive strings. The strings are 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 MAY fully or partially ignore the scope
requested by the client based on the authorization server policy or
the resource owner's instructions. If the issued access token scope
is different from the one requested by the client, the authorization
server SHOULD include the "scope" response parameter to inform the
client of the actual scope granted.
4. Obtaining Authorization 4. Obtaining Authorization
To request an access token, the client obtains authorization from the To request an access token, the client obtains authorization from the
resource owner. The authorization is expressed in the form of an resource owner. The authorization is expressed in the form of an
authorization grant which the client uses to request the access authorization grant which the client uses to request the access
token. OAuth defines four grant types: authorization code, implicit, token. OAuth defines four grant types: authorization code, implicit,
resource owner password credentials, and client credentials. It also resource owner password credentials, and client credentials. It also
provides an extension mechanism for defining additional grant types. provides an extension mechanism for defining additional grant types.
skipping to change at page 21, line 27 skipping to change at page 22, line 19
earlier. earlier.
(D) The client requests an access token from the authorization (D) The client requests an access token from the authorization
server's token endpoint by including the authorization code server's token endpoint by including the authorization code
received in the previous step. When making the request, the received in the previous step. When making the request, the
client authenticates with the authorization server. The client client authenticates with the authorization server. The client
includes the redirection URI used to obtain the authorization includes the redirection URI used to obtain the authorization
code for verification. code for verification.
(E) The authorization server authenticates the client, validates the (E) The authorization server authenticates the client, validates the
authorization code, and ensures the redirection URI received authorization code, and ensures the redirection URI received
matches the URI used to redirect the client in step (C). If matches the URI used to redirect the client in step (C). If
valid, responds back with an access token. valid, responds back with an access token and optional refresh
token.
4.1.1. Authorization Request 4.1.1. Authorization Request
The client constructs the request URI by adding the following The client constructs the request URI by adding the following
parameters to the query component of the authorization endpoint URI parameters to the query component of the authorization endpoint URI
using the "application/x-www-form-urlencoded" format as defined by using the "application/x-www-form-urlencoded" format as defined by
[W3C.REC-html401-19991224]: [W3C.REC-html401-19991224]:
response_type response_type
REQUIRED. Value MUST be set to "code". REQUIRED. Value MUST be set to "code".
client_id client_id
REQUIRED. The client identifier as described in Section 2.3. REQUIRED. The client identifier as described in Section 2.2.
redirect_uri redirect_uri
OPTIONAL, as described in Section 3.1.2. OPTIONAL, as described in Section 3.1.2.
scope scope
OPTIONAL. The scope of the access request expressed as a list OPTIONAL. The scope of the access request as described by
of space-delimited, case sensitive strings. The value is Section 3.3.
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 state
OPTIONAL. An opaque value used by the client to maintain state RECOMMENDED. An opaque value used by the client to maintain
between the request and callback. The authorization server state between the request and callback. The authorization
includes this value when redirecting the user-agent back to the server includes this value when redirecting the user-agent back
client. to the client. The parameter SHOULD be used for preventing
cross-site request forgery as described in Section 10.12.
The client directs the resource owner to the constructed URI using an The client directs the resource owner to the constructed URI using an
HTTP redirection response, or by other means available to it via the HTTP redirection response, or by other means available to it via the
user-agent. user-agent.
For example, the client directs the user-agent to make the following For example, the client directs the user-agent to make the following
HTTP request using transport-layer security (extra line breaks are HTTP request using transport-layer security (extra line breaks are
for display purposes only): for display purposes only):
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
skipping to change at page 25, line 18 skipping to change at page 26, line 7
redirect_uri redirect_uri
REQUIRED, if the "redirect_uri" parameter was included in the REQUIRED, if the "redirect_uri" parameter was included in the
authorization request described in Section 4.1.1, and their authorization request described in Section 4.1.1, and their
values MUST be identical. values MUST be identical.
If the client type is confidential or was issued client credentials If the client type is confidential or was issued client credentials
(or assigned other authentication requirements), the client MUST (or assigned other authentication requirements), the client MUST
authenticate with the authorization server as described in authenticate with the authorization server as described in
Section 3.2.1. Section 3.2.1.
For example, the client makes the following HTTP using transport- For example, the client makes the following HTTP request using
layer security (extra line breaks are for display purposes only): transport-layer security (extra line breaks are for display purposes
only):
POST /token HTTP/1.1 POST /token HTTP/1.1
Host: server.example.com Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded;charset=UTF-8 Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
The authorization server MUST: The authorization server MUST:
skipping to change at page 28, line 31 skipping to change at page 29, line 31
4.2.1. Authorization Request 4.2.1. Authorization Request
The client constructs the request URI by adding the following The client constructs the request URI by adding the following
parameters to the query component of the authorization endpoint URI parameters to the query component of the authorization endpoint URI
using the "application/x-www-form-urlencoded" format: using the "application/x-www-form-urlencoded" format:
response_type response_type
REQUIRED. Value MUST be set to "token". REQUIRED. Value MUST be set to "token".
client_id client_id
REQUIRED. The client identifier as described in Section 2.3. REQUIRED. The client identifier as described in Section 2.2.
redirect_uri redirect_uri
OPTIONAL, as described in Section 3.1.2. OPTIONAL, as described in Section 3.1.2.
scope scope
OPTIONAL. The scope of the access request expressed as a list OPTIONAL. The scope of the access request as described by
of space-delimited, case sensitive strings. The value is Section 3.3.
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 state
OPTIONAL. An opaque value used by the client to maintain state RECOMMENDED. An opaque value used by the client to maintain
between the request and callback. The authorization server state between the request and callback. The authorization
includes this value when redirecting the user-agent back to the server includes this value when redirecting the user-agent back
client. to the client. The parameter SHOULD be used for preventing
cross-site request forgery as described in Section 10.12.
The client directs the resource owner to the constructed URI using an The client directs the resource owner to the constructed URI using an
HTTP redirection response, or by other means available to it via the HTTP redirection response, or by other means available to it via the
user-agent. user-agent.
For example, the client directs the user-agent to make the following For example, the client directs the user-agent to make the following
HTTP request using transport-layer security (extra line breaks are HTTP request using transport-layer security (extra line breaks are
for display purposes only): for display purposes only):
GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz
skipping to change at page 29, line 45 skipping to change at page 30, line 41
access_token access_token
REQUIRED. The access token issued by the authorization server. REQUIRED. The access token issued by the authorization server.
token_type token_type
REQUIRED. The type of the token issued as described in REQUIRED. The type of the token issued as described in
Section 7.1. Value is case insensitive. Section 7.1. Value is case insensitive.
expires_in expires_in
OPTIONAL. The lifetime in seconds of the access token. For OPTIONAL. The lifetime in seconds of the access token. For
example, the value "3600" denotes that the access token will example, the value "3600" denotes that the access token will
expire in one hour from the time the response was generated. expire in one hour from the time the response was generated.
scope scope
OPTIONAL. The scope of the access token expressed as a list of OPTIONAL. The scope of the access request as described by
space-delimited, case sensitive strings. The value is defined Section 3.3.
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
access token scope is different from the one requested by the
client.
state state
REQUIRED if the "state" parameter was present in the client REQUIRED if the "state" parameter was present in the client
authorization request. Set to the exact value received from authorization request. Set to the exact value received from
the client. the client.
For example, the authorization server redirects the user-agent by For example, the authorization server redirects the user-agent by
sending the following HTTP response (URI extra line breaks are for sending the following HTTP response (URI extra line breaks are for
display purposes only): display purposes only):
HTTP/1.1 302 Found HTTP/1.1 302 Found
skipping to change at page 32, line 5 skipping to change at page 32, line 45
HTTP/1.1 302 Found HTTP/1.1 302 Found
Location: https://client.example.com/cb#error=access_denied&state=xyz Location: https://client.example.com/cb#error=access_denied&state=xyz
4.3. Resource Owner Password Credentials 4.3. Resource Owner Password Credentials
The resource owner password credentials grant type is suitable in The resource owner password credentials grant type is suitable in
cases where the resource owner has a trust relationship with the cases where the resource owner has a trust relationship with the
client, such as its device operating system or a highly privileged client, such as its device operating system or a highly privileged
application. The authorization server should take special care when application. The authorization server should take special care when
enabling the grant type, and only when other flows are not viable. enabling this grant type, and only allow it when other flows are not
viable.
The grant type is suitable for clients capable of obtaining the The grant type is suitable for clients capable of obtaining the
resource owner credentials (username and password, typically using an resource owner's credentials (username and password, typically using
interactive form). It is also used to migrate existing clients using an interactive form). It is also used to migrate existing clients
direct authentication schemes such as HTTP Basic or Digest using direct authentication schemes such as HTTP Basic or Digest
authentication to OAuth by converting the stored credentials to an authentication to OAuth by converting the stored credentials to an
access token. access token.
+----------+ +----------+
| Resource | | Resource |
| Owner | | Owner |
| | | |
+----------+ +----------+
v v
| Resource Owner | Resource Owner
skipping to change at page 33, line 19 skipping to change at page 34, line 13
following parameters using the "application/x-www-form-urlencoded" following parameters using the "application/x-www-form-urlencoded"
format in the HTTP request entity-body: format in the HTTP request entity-body:
grant_type grant_type
REQUIRED. Value MUST be set to "password". REQUIRED. Value MUST be set to "password".
username username
REQUIRED. The resource owner username, encoded as UTF-8. REQUIRED. The resource owner username, encoded as UTF-8.
password password
REQUIRED. The resource owner password, encoded as UTF-8. REQUIRED. The resource owner password, encoded as UTF-8.
scope scope
OPTIONAL. The scope of the access request expressed as a list OPTIONAL. The scope of the access request as described by
of space-delimited, case sensitive strings. The value is Section 3.3.
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.
If the client type is confidential or was issued client credentials If the client type is confidential or was issued client credentials
(or assigned other authentication requirements), the client MUST (or assigned other authentication requirements), the client MUST
authenticate with the authorization server as described in authenticate with the authorization server as described in
Section 3.2.1. Section 3.2.1.
For example, the client makes the following HTTP request using For example, the client makes the following HTTP request using
transport-layer security (extra line breaks are for display purposes transport-layer security (extra line breaks are for display purposes
only): only):
skipping to change at page 35, line 36 skipping to change at page 36, line 24
4.4.2. Access Token Request 4.4.2. Access Token Request
The client makes a request to the token endpoint by adding the The client makes a request to the token endpoint by adding the
following parameters using the "application/x-www-form-urlencoded" following parameters using the "application/x-www-form-urlencoded"
format in the HTTP request entity-body: format in the HTTP request entity-body:
grant_type grant_type
REQUIRED. Value MUST be set to "client_credentials". REQUIRED. Value MUST be set to "client_credentials".
scope scope
OPTIONAL. The scope of the access request expressed as a list OPTIONAL. The scope of the access request as described by
of space-delimited, case sensitive strings. The value is Section 3.3.
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 MUST authenticate with the authorization server as The client MUST authenticate with the authorization server as
described in Section 3.2.1. described in Section 3.2.1.
For example, the client makes the following HTTP request using For example, the client makes the following HTTP request using
transport-layer security (extra line breaks are for display purposes transport-layer security (extra line breaks are for display purposes
only): only):
POST /token HTTP/1.1 POST /token HTTP/1.1
Host: server.example.com Host: server.example.com
skipping to change at page 38, line 4 skipping to change at page 38, line 24
access_token access_token
REQUIRED. The access token issued by the authorization server. REQUIRED. The access token issued by the authorization server.
token_type token_type
REQUIRED. The type of the token issued as described in REQUIRED. The type of the token issued as described in
Section 7.1. Value is case insensitive. Section 7.1. Value is case insensitive.
expires_in expires_in
OPTIONAL. The lifetime in seconds of the access token. For OPTIONAL. The lifetime in seconds of the access token. For
example, the value "3600" denotes that the access token will example, the value "3600" denotes that the access token will
expire in one hour from the time the response was generated. expire in one hour from the time the response was generated.
refresh_token refresh_token
OPTIONAL. The refresh token which can be used to obtain new OPTIONAL. The refresh token which can be used to obtain new
access tokens using the same authorization grant as described access tokens using the same authorization grant as described
in Section 6. in Section 6.
scope scope
OPTIONAL. The scope of the access token expressed as a list of OPTIONAL. The scope of the access request as described by
space-delimited, case sensitive strings. The value is defined Section 3.3.
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
access token scope is different from the one requested by the
client.
The parameters are included in the entity body of the HTTP response The parameters are included in the entity body of the HTTP response
using the "application/json" media type as defined by [RFC4627]. The using the "application/json" media type as defined by [RFC4627]. The
parameters are serialized into a JSON structure by adding each parameters are serialized into a JSON structure by adding each
parameter at the highest structure level. Parameter names and string parameter at the highest structure level. Parameter names and string
values are included as JSON strings. Numerical values are included values are included as JSON strings. Numerical values are included
as JSON numbers. as JSON numbers. The order of parameters does not matter and can
vary.
The authorization server MUST include the HTTP "Cache-Control" The authorization server MUST include the HTTP "Cache-Control"
response header field [RFC2616] with a value of "no-store" in any response header field [RFC2616] with a value of "no-store" in any
response containing tokens, credentials, or other sensitive response containing tokens, credentials, or other sensitive
information, as well as the "Pragma" response header field [RFC2616] information, as well as the "Pragma" response header field [RFC2616]
with a value of "no-cache". with a value of "no-cache".
For example: For example:
HTTP/1.1 200 OK HTTP/1.1 200 OK
skipping to change at page 39, line 21 skipping to change at page 39, line 41
error error
REQUIRED. A single error code from the following: REQUIRED. A single error code from the following:
invalid_request invalid_request
The request is missing a required parameter, includes an The request is missing a required parameter, includes an
unsupported parameter or parameter value, repeats a unsupported parameter or parameter value, repeats a
parameter, includes multiple credentials, utilizes more parameter, includes multiple credentials, utilizes more
than one mechanism for authenticating the client, or is than one mechanism for authenticating the client, or is
otherwise malformed. otherwise malformed.
invalid_client invalid_client
Client authentication failed (e.g. unknown client, no Client authentication failed (e.g. unknown client, no
client authentication included, multiple client client authentication included, or unsupported
authentications included, or unsupported authentication authentication method). The authorization server MAY
method). The authorization server MAY return an HTTP 401 return an HTTP 401 (Unauthorized) status code to indicate
(Unauthorized) status code to indicate which HTTP which HTTP authentication schemes are supported. If the
authentication schemes are supported. If the client client attempted to authenticate via the "Authorization"
attempted to authenticate via the "Authorization" request request header field, the authorization server MUST
header field, the authorization server MUST respond with respond with an HTTP 401 (Unauthorized) status code, and
an HTTP 401 (Unauthorized) status code, and include the include the "WWW-Authenticate" response header field
"WWW-Authenticate" response header field matching the matching the authentication scheme used by the client.
authentication scheme used by the client.
invalid_grant invalid_grant
The provided authorization grant is invalid, expired, The provided authorization grant is invalid, expired,
revoked, does not match the redirection URI used in the revoked, does not match the redirection URI used in the
authorization request, or was issued to another client. authorization request, or was issued to another client.
unauthorized_client unauthorized_client
The authenticated client is not authorized to use this The authenticated client is not authorized to use this
authorization grant type. authorization grant type.
unsupported_grant_type unsupported_grant_type
The authorization grant type is not supported by the The authorization grant type is not supported by the
authorization server. authorization server.
skipping to change at page 40, line 15 skipping to change at page 40, line 32
error_uri error_uri
OPTIONAL. A URI identifying a human-readable web page with OPTIONAL. A URI identifying a human-readable web page with
information about the error, used to provide the client information about the error, used to provide the client
developer with additional information about the error. developer with additional information about the error.
The parameters are included in the entity body of the HTTP response The parameters are included in the entity body of the HTTP response
using the "application/json" media type as defined by [RFC4627]. The using the "application/json" media type as defined by [RFC4627]. The
parameters are serialized into a JSON structure by adding each parameters are serialized into a JSON structure by adding each
parameter at the highest structure level. Parameter names and string parameter at the highest structure level. Parameter names and string
values are included as JSON strings. Numerical values are included values are included as JSON strings. Numerical values are included
as JSON numbers. as JSON numbers. The order of parameters does not matter and can
vary.
For example: For example:
HTTP/1.1 400 Bad Request HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8 Content-Type: application/json;charset=UTF-8
Cache-Control: no-store Cache-Control: no-store
Pragma: no-cache Pragma: no-cache
{ {
"error":"invalid_request" "error":"invalid_request"
skipping to change at page 40, line 40 skipping to change at page 41, line 12
If the authorization server issued a refresh token to the client, the If the authorization server issued a refresh token to the client, the
client makes a refresh request to the token endpoint by adding the client makes a refresh request to the token endpoint by adding the
following parameters using the "application/x-www-form-urlencoded" following parameters using the "application/x-www-form-urlencoded"
format in the HTTP request entity-body: format in the HTTP request entity-body:
grant_type grant_type
REQUIRED. Value MUST be set to "refresh_token". REQUIRED. Value MUST be set to "refresh_token".
refresh_token refresh_token
REQUIRED. The refresh token issued to the client. REQUIRED. The refresh token issued to the client.
scope scope
OPTIONAL. The scope of the access request expressed as a list OPTIONAL. The scope of the access request as described by
of space-delimited, case sensitive strings. The value is Section 3.3. The requested scope MUST be equal or lesser than
defined by the authorization server. If the value contains the scope originally granted by the resource owner, and if
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 omitted is treated as equal to the scope originally granted by
the resource owner. the resource owner.
Because refresh tokens are typically long-lasting credentials used to Because refresh tokens are typically long-lasting credentials used to
request additional access tokens, the refresh token is bound to the request additional access tokens, the refresh token is bound to the
client it was issued. If the client type is confidential or was client it was issued. If the client type is confidential or was
issued client credentials (or assigned other authentication issued client credentials (or assigned other authentication
requirements), the client MUST authenticate with the authorization requirements), the client MUST authenticate with the authorization
server as described in Section 3.2.1. server as described in Section 3.2.1.
skipping to change at page 41, line 30 skipping to change at page 41, line 43
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
The authorization server MUST: The authorization server MUST:
o require client authentication for confidential clients or for any o require client authentication for confidential clients or for any
client issued client credentials (or with other authentication client issued client credentials (or with other authentication
requirements), requirements),
o authenticate the client if client authentication is included and o authenticate the client if client authentication is included and
ensure the refresh token was issued to the authenticated client, ensure the refresh token was issued to the authenticated client,
o validate the refresh token, and and
o validate the refresh token.
If valid and authorized, the authorization server issues an access If valid and authorized, the authorization server issues an access
token as described in Section 5.1. If the request failed token as described in Section 5.1. If the request failed
verification or is invalid, the authorization server returns an error verification or is invalid, the authorization server returns an error
response as described in Section 5.2. response as described in Section 5.2.
The authorization server MAY issue a new refresh token, in which case 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 the client MUST discard the old refresh token and replace it with the
new refresh token. The authorization server MAY revoke the old new refresh token. The authorization server MAY revoke the old
refresh token after issuing a new refresh token to the client. If a refresh token after issuing a new refresh token to the client. If a
new refresh token is issued, its scope MUST be identical to that of new refresh token is issued, the refresh token scope MUST be
the refresh token included in the request. identical to that of the refresh token included by the client in the
request.
7. Accessing Protected Resources 7. Accessing Protected Resources
The client accesses protected resources by presenting the access The client accesses protected resources by presenting the access
token to the resource server. The resource server MUST validate the token to the resource server. The resource server MUST validate the
access token and ensure it has not expired and that its scope covers access token and ensure it has not expired and that its scope covers
the requested resource. The methods used by the resource server to the requested resource. The methods used by the resource server to
validate the access token (as well as any error responses) are beyond validate the access token (as well as any error responses) are beyond
the scope of this specification, but generally involve an interaction the scope of this specification, but generally involve an interaction
or coordination between the resource server and the authorization or coordination between the resource server and the authorization
skipping to change at page 43, line 12 skipping to change at page 43, line 30
(if any) sent to the client together with the "access_token" response (if any) sent to the client together with the "access_token" response
parameter. It also defines the HTTP authentication method used to parameter. It also defines the HTTP authentication method used to
include the access token when making a protected resource request. include the access token when making a protected resource request.
8. Extensibility 8. Extensibility
8.1. Defining Access Token Types 8.1. Defining Access Token Types
Access token types can be defined in one of two ways: registered in Access token types can be defined in one of two ways: registered in
the access token type registry (following the procedures in the access token type registry (following the procedures in
Section 11.1), or use a unique absolute URI as its name. Section 11.1), or by using a unique absolute URI as its name.
Types utilizing a URI name SHOULD be limited to vendor-specific Types utilizing a URI name SHOULD be limited to vendor-specific
implementations that are not commonly applicable, and are specific to implementations that are not commonly applicable, and are specific to
the implementation details of the resource server where they are the implementation details of the resource server where they are
used. used.
All other types MUST be registered. Type names MUST conform to the All other types MUST be registered. Type names MUST conform to the
type-name ABNF. If the type definition includes a new HTTP type-name ABNF. If the type definition includes a new HTTP
authentication scheme, the type name SHOULD be identical to the HTTP authentication scheme, the type name SHOULD be identical to the HTTP
authentication scheme name (as defined by [RFC2617]). authentication scheme name (as defined by [RFC2617]). The token type
"example" is reserved for use in examples.
type-name = 1*name-char type-name = 1*name-char
name-char = "-" / "." / "_" / DIGIT / ALPHA name-char = "-" / "." / "_" / DIGIT / ALPHA
8.2. Defining New Endpoint Parameters 8.2. Defining New Endpoint Parameters
New request or response parameters for use with the authorization New request or response parameters for use with the authorization
endpoint or the token endpoint are defined and registered in the endpoint or the token endpoint are defined and registered in the
parameters registry following the procedure in Section 11.2. parameters registry following the procedure in Section 11.2.
skipping to change at page 45, line 26 skipping to change at page 45, line 47
related to security, platform capabilities, and overall end-user related to security, platform capabilities, and overall end-user
experience. experience.
The authorization endpoint requires interaction between the client The authorization endpoint requires interaction between the client
and the resource owner's user-agent. Native applications can invoke and the resource owner's user-agent. Native applications can invoke
an external user-agent or embed a user-agent within the application. an external user-agent or embed a user-agent within the application.
For example: For example:
o External user-agent - the native application can capture the o External user-agent - the native application can capture the
response from the authorization server using a redirection URI response from the authorization server using a redirection URI
with an scheme registered with the operating system to invoke the with a scheme registered with the operating system to invoke the
client as the handler, manual copy-and-paste of the credentials, client as the handler, manual copy-and-paste of the credentials,
running a local web server, installing a user-agent extension, or running a local web server, installing a user-agent extension, or
by providing a redirection URI identifying a server-hosted by providing a redirection URI identifying a server-hosted
resource under the client's control, which in turn makes the resource under the client's control, which in turn makes the
response available to the native application. response available to the native application.
o Embedded user-agent - the native application obtains the response o Embedded user-agent - the native application obtains the response
by directly communicating with the embedded user-agent by by directly communicating with the embedded user-agent by
monitoring state changes emitted during the resource load, or monitoring state changes emitted during the resource load, or
accessing the user-agent's cookies storage. accessing the user-agent's cookies storage.
When choosing between an external or embedded user-agent, developers When choosing between an external or embedded user-agent, developers
should consider: should consider:
o External user-agents may improve completion rate as the resource o External user-agents may improve completion rate as the resource
owner may already have an active session with the authorization owner may already have an active session with the authorization
server removing the need to re-authenticate. It provides a server removing the need to re-authenticate. It provides a
familiar end-user experience and functionality. The resource familiar end-user experience and functionality. The resource
owner may also rely on user-agent features or extensions to assist owner may also rely on user-agent features or extensions to assist
with authentication (e.g. password manager, 2-factor device with authentication (e.g. password manager, 2-factor device
reader). reader).
o Embedded user-agents may offer improved usability, as they remove
o Embedded user-agents may offer an improved usability, as they the need to switch context and open new windows.
remove the need to switch context and open new windows.
o Embedded user-agents pose a security challenge because resource o Embedded user-agents pose a security challenge because resource
owners are authenticating in an unidentified window without access owners are authenticating in an unidentified window without access
to the visual protections found in most external user-agents. to the visual protections found in most external user-agents.
Embedded user-agents educate end-user to trust unidentified Embedded user-agents educate end-user to trust unidentified
requests for authentication (making phishing attacks easier to requests for authentication (making phishing attacks easier to
execute). execute).
When choosing between the implicit grant type and the authorization When choosing between the implicit grant type and the authorization
code grant type, the following should be considered: code grant type, the following should be considered:
o Native applications that use the authorization code grant type o Native applications that use the authorization code grant type
SHOULD do so without using client credentials, due to the native SHOULD do so without using client credentials, due to the native
application's inability to keep credentials confidential. application's inability to keep client credentials confidential.
o When using the implicit grant type flow a refresh token is not o When using the implicit grant type flow a refresh token is not
returned. returned which requires repeating the authorization process once
the access token expires.
10. Security Considerations 10. Security Considerations
As a flexible and extensible framework, OAuth's security As a flexible and extensible framework, OAuth's security
considerations depend on many factors. The following sections considerations depend on many factors. The following sections
provide implementers with security guidelines focused on the three provide implementers with security guidelines focused on the three
client profiles described in Section 2.1: web application, user- client profiles described in Section 2.1: web application, user-
agent-based application, and native application. agent-based application, and native application.
A comprehensive OAuth security model and analysis, as well as A comprehensive OAuth security model and analysis, as well as
skipping to change at page 47, line 6 skipping to change at page 47, line 26
The authorization server MUST NOT issue client passwords or other The authorization server MUST NOT issue client passwords or other
client credentials to native application or user-agent-based client credentials to native application or user-agent-based
application clients for the purpose of client authentication. The application clients for the purpose of client authentication. The
authorization server MAY issue a client password or other credentials authorization server MAY issue a client password or other credentials
for a specific installation of a native application client on a for a specific installation of a native application client on a
specific device. specific device.
When client authentication is not possible, the authorization server When client authentication is not possible, the authorization server
SHOULD employ other means to validate the client's identity. For SHOULD employ other means to validate the client's identity. For
example, by requiring the registration of the client redirection URI example, by requiring the registration of the client redirection URI
or enlisting the resource owner to confirm identity. The or enlisting the resource owner to confirm identity. A valid
authorization server must consider the security implications of redirection URI is not sufficient to verify the client's identity
when asking for end-user authorization, but can be used to prevent
delivering credentials to a counterfeit client after obtaining end-
user authorization.
The authorization server must consider the security implications of
interacting with unauthenticated clients and take measures to limit interacting with unauthenticated clients and take measures to limit
the potential exposure of other credentials (e.g. refresh tokens) the potential exposure of other credentials (e.g. refresh tokens)
issued to such clients. issued to such clients.
10.2. Client Impersonation 10.2. Client Impersonation
A malicious client can impersonate another client and obtain access A malicious client can impersonate another client and obtain access
to protected resources, if the impersonated client fails to, or is to protected resources, if the impersonated client fails to, or is
unable to, keep is client credentials confidential. unable to, keep its client credentials confidential.
The authorization server MUST authenticate the client whenever The authorization server MUST authenticate the client whenever
possible. If the authorization server cannot authenticate the client possible. If the authorization server cannot authenticate the client
due to the client nature, the authorization server MUST require the due to the client's nature, the authorization server MUST require the
registration of any redirection URI used for receiving authorization, registration of any redirection URI used for receiving authorization
and SHOULD utilize other means to protect resource owners from such responses, and SHOULD utilize other means to protect resource owners
malicious clients. For example, engage the resource owner to assist from such malicious clients. For example, engaging the resource
in identifying the client and its origin. owner to assist in identifying the client and its origin.
The authorization server SHOULD enforce explicit resource owner The authorization server SHOULD enforce explicit resource owner
authentication and provide the resource owner with information about authentication and provide the resource owner with information about
the client and the requested authorization scope and lifetime. It is the client and the requested authorization scope and lifetime. It is
up to the resource owner to review the information in the context of up to the resource owner to review the information in the context of
the current client, and authorize the request. the current client, and authorize or deny the request.
The authorization server SHOULD NOT process repeated authorization The authorization server SHOULD NOT process repeated authorization
requests automatically (without active resource owner interaction) requests automatically (without active resource owner interaction)
without authenticating the client or relying on other measures to without authenticating the client or relying on other measures to
ensure the repeated request comes from the original client and not an ensure the repeated request comes from the original client and not an
impersonator. impersonator.
10.3. Access Tokens 10.3. Access Tokens
Access token (as well as any access token type-specific attributes) Access token (as well as any access token type-specific attributes)
MUST be kept confidential in transit and storage, and only shared MUST be kept confidential in transit and storage, and only shared
among the authorization server, the resource servers the access token among the authorization server, the resource servers the access token
is valid for, and the client to whom the access token is issued. is valid for, and the client to whom the access token is issued.
When using the implicit grant type, the access token is transmitted When using the implicit grant type, the access token is transmitted
in the URI fragment, which can expose it to unauthorized parties. in the URI fragment, which can expose it to unauthorized parties.
The authorization server MUST ensure that access tokens cannot be The authorization server MUST ensure that access tokens cannot be
generated, modified, or guessed to produce valid access tokens. generated, modified, or guessed to produce valid access tokens by
unauthorized parties.
The client SHOULD request access tokens with the minimal scope and The client SHOULD request access tokens with the minimal scope and
lifetime necessary. The authorization server SHOULD take the client lifetime necessary. The authorization server SHOULD take the client
identity into account when choosing how to honor the requested scope identity into account when choosing how to honor the requested scope
and lifetime, and MAY issue an access token with a less rights than and lifetime, and MAY issue an access token with a less rights than
requested. requested.
10.4. Refresh Tokens 10.4. Refresh Tokens
Authorization servers MAY issue refresh tokens to web application Authorization servers MAY issue refresh tokens to web application
skipping to change at page 48, line 26 skipping to change at page 49, line 5
refresh tokens were issued. The authorization server MUST maintain refresh tokens were issued. The authorization server MUST maintain
the binding between a refresh token and the client to whom it was the binding between a refresh token and the client to whom it was
issued. issued.
The authorization server MUST verify the binding between the refresh The authorization server MUST verify the binding between the refresh
token and client identity whenever the client identity can be token and client identity whenever the client identity can be
authenticated. When client authentication is not possible, the authenticated. When client authentication is not possible, the
authorization server SHOULD deploy other means to detect refresh authorization server SHOULD deploy other means to detect refresh
token abuse. token abuse.
For example, the authorization server could employ refresh tokens For example, the authorization server could employ refresh token
rotation in which a new refresh token is issued with every access rotation in which a new refresh token is issued with every access
token refresh response. The previous refresh token is invalidated token refresh response. The previous refresh token is invalidated
but retained by the authorization server. If a refresh token is but retained by the authorization server. If a refresh token is
compromised and subsequently used by both the attacker and the compromised and subsequently used by both the attacker and the
legitimate client, one of them will present an invalidated refresh legitimate client, one of them will present an invalidated refresh
token which will inform the authorization server of the breach. token which will inform the authorization server of the breach.
The authorization server MUST ensure that refresh tokens cannot be The authorization server MUST ensure that refresh tokens cannot be
generated, modified, or guessed to produce valid refresh tokens. generated, modified, or guessed to produce valid refresh tokens by
unauthorized parties.
10.5. Authorization Codes 10.5. Authorization Codes
The transmission of authorization codes SHOULD be made over a secure The transmission of authorization codes SHOULD be made over a secure
channel, and the client SHOULD implement TLS for use with its channel, and the client SHOULD implement TLS for use with its
redirection URI if the URI identifies a network resource. Effort redirection URI if the URI identifies a network resource. Effort
should be made to keep authorization codes confidential. Since should be made to keep authorization codes confidential. Since
authorization codes are transmitted via user-agent redirections, they authorization codes are transmitted via user-agent redirections, they
could potentially be disclosed through user-agent history and HTTP could potentially be disclosed through user-agent history and HTTP
referrer headers. referrer headers.
skipping to change at page 49, line 16 skipping to change at page 49, line 44
Authorization codes MUST be short lived and single use. If the Authorization codes MUST be short lived and single use. If the
authorization server observes multiple attempts to exchange an authorization server observes multiple attempts to exchange an
authorization code for an access token, the authorization server authorization code for an access token, the authorization server
SHOULD attempt to revoke all access tokens already granted based on SHOULD attempt to revoke all access tokens already granted based on
the compromised authorization code. the compromised authorization code.
If the client can be authenticated, the authorization servers MUST If the client can be authenticated, the authorization servers MUST
authenticate the client and ensure that the authorization code was authenticate the client and ensure that the authorization code was
issued to the same client. issued to the same client.
10.6. Authorization Code Leakage 10.6. Authorization Code Redirection URI Manipulation
An attacker can leverage the authorization code grant type by When requesting authorization using the authorization code grant
tricking a resource owner to authorize access to a legitimate client, type, the client can specify a redirection URI via the "redirect_uri"
but using a client account under the control of the attacker. The parameter. If an attacker can manipulate the value of the
only difference between a valid request and the attack request is in redirection URI, it can cause the authorization server to redirect
how the victim reached the authorization server to grant access. the resource owner user-agent to a URI under the control of the
attacker with the authorization code.
An attacker can create an account at a legitimate client and initiate
the authorization flow. When the attacker is sent to the
authorization server to grant access, the attacker grabs the
authorization URI provided by the legitimate client, and replaces the
client's redirection URI with a URI under the control of the
attacker. The attacker then tricks the victim into following the
manipulated link to authorize access to the legitimate client.
Once at the authorization server, the victim is prompted with a Once at the authorization server, the victim is prompted with a
normal, valid request on behalf of a legitimate and familiar client. normal, valid request on behalf of a legitimate and familiar client,
The attacker then uses the victim's authorization to gain access to and authorizes the request. The victim is then redirected to an
the information authorized by the victim (via the client). endpoint under the control of the attacker with the authorization
code. The attacker completes the authorization flow by sending the
authorization code to the client using the original redirection URI
provided by the client. The client exchanges the authorization code
with an access token and links it to the attacker's client account
which can now gain access to the protected resources authorized by
the victim (via the client).
In order to prevent such an attack, authorization servers MUST ensure In order to prevent such an attack, the authorization server MUST
that the redirection URI used to obtain the authorization code, is ensure that the redirection URI used to obtain the authorization
the same as the redirection URI provided when exchanging the code, is the same as the redirection URI provided when exchanging the
authorization code for an access token. The authorization server authorization code for an access token. The authorization server
SHOULD require the client to register their redirection URI and if MUST require public clients and SHOULD require confidential clients
provided, MUST validate the redirection URI received in the to register their redirection URI and if provided in the request,
authorization request against the registered value. MUST validate the redirection URI received in the authorization
request against the registered value.
10.7. Resource Owner Password Credentials 10.7. Resource Owner Password Credentials
The resource owner password credentials grant type is often used for The resource owner password credentials grant type is often used for
legacy or migration reasons. It reduces the overall risk of storing legacy or migration reasons. It reduces the overall risk of storing
username and password by the client, but does not eliminate the need username and password by the client, but does not eliminate the need
to expose highly privileged credentials to the client. to expose highly privileged credentials to the client.
This grant type carries a higher risk than other grant types because This grant type carries a higher risk than other grant types because
it maintains the password anti-pattern this protocol seeks to avoid. it maintains the password anti-pattern this protocol seeks to avoid.
The client could abuse the password or the password could The client could abuse the password or the password could
unintentionally be disclosed to an attacker (e.g. via log files or unintentionally be disclosed to an attacker (e.g. via log files or
other records kept by the client). other records kept by the client).
Additionally, because the resource owner does not have control over Additionally, because the resource owner does not have control over
the authorization process (the resource owner involvement ends when the authorization process (the resource owner involvement ends when
it hands over its credentials to the client), the client can obtain it hands over its credentials to the client), the client can obtain
access tokens with a broader scope and longer lifetime than desired access tokens with a broader scope and longer lifetime than desired
by the resource owner. The authorization server SHOULD restrict the by the resource owner. The authorization server should consider the
scope and lifetime of access tokens issued via this grant type. scope and lifetime of access tokens issued via this grant type.
The authorization server and client SHOULD minimize use of this grant The authorization server and client SHOULD minimize use of this grant
type and utilize other grant types whenever possible. type and utilize other grant types whenever possible.
10.8. Request Confidentiality 10.8. Request Confidentiality
Access tokens, refresh tokens, resource owner passwords, and client Access tokens, refresh tokens, resource owner passwords, and client
credentials MUST NOT be transmitted in the clear. Authorization credentials MUST NOT be transmitted in the clear. Authorization
codes SHOULD NOT be transmitted in the clear. codes SHOULD NOT be transmitted in the clear.
skipping to change at page 51, line 13 skipping to change at page 52, line 8
Client developers should consider the security implications of how Client developers should consider the security implications of how
they interact with the user-agent (e.g., external, embedded), and the they interact with the user-agent (e.g., external, embedded), and the
ability of the end-user to verify the authenticity of the ability of the end-user to verify the authenticity of the
authorization server. authorization server.
To reduce the risk of phishing attacks, the authorization servers To reduce the risk of phishing attacks, the authorization servers
MUST utilize TLS on every endpoint used for end-user interaction. MUST utilize TLS on every endpoint used for end-user interaction.
10.12. Cross-Site Request Forgery 10.12. Cross-Site Request Forgery
Cross-site request forgery (CSRF) is a web-based attack whereby HTTP Cross-site request forgery (CSRF) is an exploit in which an attacker
requests are transmitted from the user-agent of an end-user the causes the user-agent of a victim end-user to follow a malicious URI
server trusts or has authenticated. CSRF attacks on the (e.g. provided to the user-agent as a misleading link, image, or
authorization endpoint can allow an attacker to obtain authorization redirection) to a trusting server (usually established via the
without the consent of the resource owner. presence of a valid session cookie).
The "state" request parameter SHOULD be used to mitigate against CSRF A CSRF attack against the client's redirection URI allows an attacker
attacks, particularly for login CSRF attacks. CSRF attacks against to inject their own authorization code or access token, which can
the client's redirection URI allow an attacker to inject their own result in the client using an access token associated with the
authorization code or access token, which can result in the client attacker's protected resources rather than the victim's (e.g. save
using an access token associated with the attacker's account rather the victim's bank account information to a protected resource
than the victim's. Depending on the nature of the client and the controlled by the attacker).
protected resources, this can have undesirable and damaging effects.
It is strongly RECOMMENDED that the client includes the "state" The client MUST implement CSRF protection for its redirection URI.
request parameter with authorization requests to the authorization This is typically accomplished by requiring any request sent to the
server. The "state" request parameter MUST contain a non-guessable redirection URI endpoint to include a value that binds the request to
value, and the client MUST keep it in a location accessible only by the user-agent's authenticated state (e.g. a hash of the session
the client or the user-agent (i.e., protected by same-origin policy). cookie used to authentication the user-agent). The client SHOULD
utilize the "state" request parameter to deliver this value to the
authorization server when making an authorization request.
For example, using a DOM variable, HTTP cookie, or HTML5 client-side Once authorization has been obtained from the end-user, the
storage. The authorization server includes the value of the "state" authorization server redirects the end-user's user-agent back to the
parameter when redirecting the user-agent back to the client which client with the required binding value contained in the "state"
MUST then ensure the received value matches the stored value. parameter. The binding value enables the client to validate the
validity of the request by matching the binding value to the user-
agent's authenticated state. The binding value used for CSRF
protection MUST contain a non-guessable value, and the user-agent's
authenticated state (e.g. session cookie, HTML5 local storage) MUST
be kept in a location accessible only to the client and the user-
agent (i.e., protected by same-origin policy).
A CSRF attack against the against the authorization server's
authorization endpoint can result in an attacker obtaining end-user
authorization for a malicious client without involving or alerting
the end-user.
The authorization server MUST implement CSRF protection for its
authorization endpoint, and ensure that a malicious client cannot
obtain authorization without the awareness and explicit consent of
the resource owner.
10.13. Clickjacking 10.13. Clickjacking
In a clickjacking attack, an attacker registers a legitimate client In a clickjacking attack, an attacker registers a legitimate client
and then constructs a malicious site in which it loads the and then constructs a malicious site in which it loads the
authorization server's authorization endpoint web page in a authorization server's authorization endpoint web page in a
transparent iframe overlaid on top of a set of dummy buttons which transparent iframe overlaid on top of a set of dummy buttons which
are carefully constructed to be placed directly under important are carefully constructed to be placed directly under important
buttons on the authorization page. When an end-user clicks a buttons on the authorization page. When an end-user clicks a
misleading visible button, the end-user is actually clicking an misleading visible button, the end-user is actually clicking an
skipping to change at page 52, line 26 skipping to change at page 53, line 41
variable is used by an application in which that input can cause variable is used by an application in which that input can cause
modification of the application logic when used unsanitized. This modification of the application logic when used unsanitized. This
may allow an attacker to gain access to the application device or its may allow an attacker to gain access to the application device or its
data, cause denial of service, or a wide range of malicious side- data, cause denial of service, or a wide range of malicious side-
effects. effects.
The Authorization server and client MUST validate and sanitize any The Authorization server and client MUST validate and sanitize any
value received, and in particular, the value of the "state" and value received, and in particular, the value of the "state" and
"redirect_uri" parameters. "redirect_uri" parameters.
10.15. Open Redirectors
The authorization server authorization endpoint and the client
redirection endpoint can be improperly configured and operate as open
redirectors. An open redirector is an endpoint using a parameter to
automatically redirect a user-agent to the location specified by the
parameter value without any validation.
Open redirectors can be used in phishing attacks, or by an attacker
to get end-users to visit malicious sites by making the URI's
authority look like a familiar and trusted destination. In addition,
if the authorization server allows the client to register only part
of the redirection URI, an attacker can use an open redirector
operated by the client to construct a redirection URI that will pass
the authorization server validation but will send the authorization
code or access token to an endpoint under the control of the
attacker.
11. IANA Considerations 11. IANA Considerations
11.1. The OAuth Access Token Type Registry 11.1. The OAuth Access Token Type Registry
This specification establishes 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 Access token types are registered on the advice of one or more
Designated Experts (appointed by the IESG or their delegate), with a Designated Experts (appointed by the IESG or their delegate), with a
Specification Required (using terminology from [RFC5226]). However, Specification Required (using terminology from [RFC5226]). However,
to allow for the allocation of values prior to publication, the to allow for the allocation of values prior to publication, the
Designated Expert(s) may approve registration once they are satisfied Designated Expert(s) may approve registration once they are satisfied
that such a specification will be published. that such a specification will be published.
Registration requests should be sent to the [TBD]@ietf.org mailing Registration requests should be sent to the [TBD]@ietf.org mailing
list for review and comment, with an appropriate subject (e.g., list for review and comment, with an appropriate subject (e.g.,
"Request for access toke type: example"). [[ Note to RFC-EDITOR: The "Request for access token type: example"). [[ Note to RFC-EDITOR: The
name of the mailing list should be determined in consultation with name of the mailing list should be determined in consultation with
the IESG and IANA. Suggested name: oauth-ext-review. ]] the IESG and IANA. Suggested name: oauth-ext-review. ]]
Within at most 14 days of the request, the Designated Expert(s) will Within at most 14 days of the request, the Designated Expert(s) will
either approve or deny the registration request, communicating this either approve or deny the registration request, communicating this
decision to the review list and IANA. Denials should include an decision to the review list and IANA. Denials should include an
explanation and, if applicable, suggestions as to how to make the explanation and, if applicable, suggestions as to how to make the
request successful. request successful.
Decisions (or lack thereof) made by the Designated Expert can be Decisions (or lack thereof) made by the Designated Expert can be
skipping to change at page 53, line 17 skipping to change at page 55, line 4
app-ads@tools.ietf.org email address or directly by looking up their app-ads@tools.ietf.org email address or directly by looking up their
email addresses on http://www.iesg.org/ website) and, if the email addresses on http://www.iesg.org/ website) and, if the
appellant is not satisfied with the response, to the full IESG (using appellant is not satisfied with the response, to the full IESG (using
the iesg@iesg.org mailing list). the iesg@iesg.org mailing list).
IANA should only accept registry updates from the Designated IANA should only accept registry updates from the Designated
Expert(s), and should direct all requests for registration to the Expert(s), and should direct all requests for registration to the
review mailing list. review mailing list.
11.1.1. Registration Template 11.1.1. Registration Template
Type name: Type name:
The name requested (e.g., "example"). The name requested (e.g., "example").
Additional Token Endpoint Response Parameters: Additional Token Endpoint Response Parameters:
Additional response parameters returned together with the Additional response parameters returned together with the
"access_token" parameter. New parameters MUST be separately "access_token" parameter. New parameters MUST be separately
registered in the OAuth parameters registry as described by registered in the OAuth parameters registry as described by
Section 11.2. Section 11.2.
HTTP Authentication Scheme(s): HTTP Authentication Scheme(s):
The HTTP authentication scheme name(s), if any, used to The HTTP authentication scheme name(s), if any, used to
authenticate protected resources requests using access token of authenticate protected resources requests using access tokens of
this type. this type.
Change controller: Change controller:
For standards-track RFCs, state "IETF". For others, give the name For standards-track RFCs, state "IETF". For others, give the name
of the responsible party. Other details (e.g., postal address, of the responsible party. Other details (e.g., postal address,
e-mail address, home page URI) may also be included. e-mail address, home page URI) may also be included.
Specification document(s): Specification document(s):
Reference to document that specifies the parameter, preferably Reference to the document that specifies the parameter, preferably
including a URI that can be used to retrieve a copy of the including a URI that can be used to retrieve a copy of the
document. An indication of the relevant sections may also be document. An indication of the relevant sections may also be
included, but is not required. included, but is not required.
11.2. The OAuth Parameters Registry 11.2. The OAuth Parameters Registry
This specification establishes the OAuth parameters registry. This specification establishes the OAuth parameters registry.
Additional parameters for inclusion in the authorization endpoint Additional parameters for inclusion in the authorization endpoint
request, the authorization endpoint response, the token endpoint request, the authorization endpoint response, the token endpoint
skipping to change at page 54, line 39 skipping to change at page 56, line 26
The name requested (e.g., "example"). The name requested (e.g., "example").
Parameter usage location: Parameter usage location:
The location(s) where parameter can be used. The possible The location(s) where parameter can be used. The possible
locations are: authorization request, authorization response, locations are: authorization request, authorization response,
token request, or token response. token request, or token response.
Change controller: Change controller:
For standards-track RFCs, state "IETF". For others, give the name For standards-track RFCs, state "IETF". For others, give the name
of the responsible party. Other details (e.g., postal address, of the responsible party. Other details (e.g., postal address,
e-mail address, home page URI) may also be included. e-mail address, home page URI) may also be included.
Specification document(s): Specification document(s):
Reference to document that specifies the parameter, preferably Reference to the document that specifies the parameter, preferably
including a URI that can be used to retrieve a copy of the including a URI that can be used to retrieve a copy of the
document. An indication of the relevant sections may also be document. An indication of the relevant sections may also be
included, but is not required. included, but is not required.
11.2.2. Initial Registry Contents 11.2.2. Initial Registry Contents
The OAuth Parameters Registry's initial contents are: The OAuth Parameters Registry's initial contents are:
o Parameter name: client_id o Parameter name: client_id
o Parameter usage location: authorization request, token request o Parameter usage location: authorization request, token request
skipping to change at page 57, line 35 skipping to change at page 59, line 21
11.3.1. Registration Template 11.3.1. Registration Template
Response type name: Response type name:
The name requested (e.g., "example"). The name requested (e.g., "example").
Change controller: Change controller:
For standards-track RFCs, state "IETF". For others, give the name For standards-track RFCs, state "IETF". For others, give the name
of the responsible party. Other details (e.g., postal address, of the responsible party. Other details (e.g., postal address,
e-mail address, home page URI) may also be included. e-mail address, home page URI) may also be included.
Specification document(s): Specification document(s):
Reference to document that specifies the type, preferably Reference to the document that specifies the type, preferably
including a URI that can be used to retrieve a copy of the including a URI that can be used to retrieve a copy of the
document. An indication of the relevant sections may also be document. An indication of the relevant sections may also be
included, but is not required. included, but is not required.
11.3.2. Initial Registry Contents 11.3.2. Initial Registry Contents
The OAuth Authorization Endpoint Response Type Registry's initial The OAuth Authorization Endpoint Response Type Registry's initial
contents are: contents are:
o Response type name: code o Response type name: code
skipping to change at page 59, line 4 skipping to change at page 60, line 37
11.4.1. Registration Template 11.4.1. Registration Template
Error name: Error name:
The name requested (e.g., "example"). The name requested (e.g., "example").
Error usage location: Error usage location:
The location(s) where the error can be used. The possible The location(s) where the error can be used. The possible
locations are: authorization code grant error response locations are: authorization code grant error response
(Section 4.1.2.1), implicit grant error response (Section 4.1.2.1), implicit grant error response
(Section 4.2.2.1), or token error response (Section 5.2). (Section 4.2.2.1), or token error response (Section 5.2).
Related protocol extension: Related protocol extension:
The name of the extension grant type, access token type, or The name of the extension grant type, access token type, or
extension parameter, the error code is used in conjunction with. extension parameter, the error code is used in conjunction with.
Change controller: Change controller:
For standards-track RFCs, state "IETF". For others, give the name For standards-track RFCs, state "IETF". For others, give the name
of the responsible party. Other details (e.g., postal address, of the responsible party. Other details (e.g., postal address,
e-mail address, home page URI) may also be included. e-mail address, home page URI) may also be included.
Specification document(s): Specification document(s):
Reference to document that specifies the error code, preferably Reference to the document that specifies the error code,
including a URI that can be used to retrieve a copy of the preferably including a URI that can be used to retrieve a copy of
document. An indication of the relevant sections may also be the document. An indication of the relevant sections may also be
included, but is not required. included, but is not required.
12. Acknowledgements 12. Acknowledgements
The initial OAuth 2.0 protocol specification was edited by David The initial OAuth 2.0 protocol specification was edited by David
Recordon, based on two previous publications: the OAuth 1.0 community Recordon, based on two previous publications: the OAuth 1.0 community
specification [RFC5849], and OAuth WRAP (OAuth Web Resource specification [RFC5849], and OAuth WRAP (OAuth Web Resource
Authorization Profiles) [I-D.draft-hardt-oauth-01]. The Security Authorization Profiles) [I-D.draft-hardt-oauth-01]. The Security
Considerations section was drafted by Torsten Lodderstedt, Mark Considerations section was drafted by Torsten Lodderstedt, Mark
McGloin, Phil Hunt, and Anthony Nadalin. McGloin, Phil Hunt, and Anthony Nadalin.
skipping to change at page 59, line 49 skipping to change at page 61, line 36
includes dozens of active and dedicated participants. In particular, includes dozens of active and dedicated participants. In particular,
the following individuals contributed ideas, feedback, and wording the following individuals contributed ideas, feedback, and wording
which shaped and formed the final specification: which shaped and formed the final specification:
Michael Adams, Andrew Arnott, Dirk Balfanz, Aiden Bell, Scott Cantor, Michael Adams, Andrew Arnott, Dirk Balfanz, Aiden Bell, Scott Cantor,
Marcos Caceres, Blaine Cook, Brian Campbell, Brian Eaton, Leah Marcos Caceres, Blaine Cook, Brian Campbell, Brian Eaton, Leah
Culver, Bill de hOra, Brian Eaton, Brian Ellin, Igor Faynberg, George Culver, Bill de hOra, Brian Eaton, Brian Ellin, Igor Faynberg, George
Fletcher, Tim Freeman, Evan Gilbert, Yaron Goland, Brent Goldman, Fletcher, Tim Freeman, Evan Gilbert, Yaron Goland, Brent Goldman,
Kristoffer Gronowski, Justin Hart, Dick Hardt, Craig Heath, Phil Kristoffer Gronowski, Justin Hart, Dick Hardt, Craig Heath, Phil
Hunt, Michael B. Jones, John Kemp, Mark Kent, Raffi Krikorian, Chasen Hunt, Michael B. Jones, John Kemp, Mark Kent, Raffi Krikorian, Chasen
Le Hara, Rasmus Lerdorf, Torsten Lodderstedt, Hui-Lan Lu, Paul Le Hara, Rasmus Lerdorf, Torsten Lodderstedt, Hui-Lan Lu, Casey
Madsen, Alastair Mair, Eve Maler, James Manger, Mark McGloin, Lucas, Paul Madsen, Alastair Mair, Eve Maler, James Manger, Mark
Laurence Miao, Chuck Mortimore, Anthony Nadalin, Justin Richer, Peter McGloin, Laurence Miao, Chuck Mortimore, Anthony Nadalin, Justin
Saint-Andre, Nat Sakimura, Rob Sayre, Marius Scurtescu, Naitik Shah, Richer, Peter Saint-Andre, Nat Sakimura, Rob Sayre, Marius Scurtescu,
Luke Shepard, Vlad Skvortsov, Justin Smith, Jeremy Suriel, Christian Naitik Shah, Luke Shepard, Vlad Skvortsov, Justin Smith, Niv
Stuebner, Paul Tarjan, Allen Tom, Franklin Tse, Nick Walker, Shane Steingarten, Christian Stuebner, Jeremy Suriel, Paul Tarjan, Allen
Weeden, and Skylar Woodward. Tom, Franklin Tse, Nick Walker, Shane Weeden, and Skylar Woodward.
Appendix A. Editor's Notes Appendix A. Editor's Notes
While many people contributed to this specification throughout its While many people contributed to this specification throughout its
long journey, the editor would like to acknowledge and thank a few long journey, the editor would like to acknowledge and thank a few
individuals for their outstanding and invaluable efforts leading up individuals for their outstanding and invaluable efforts leading up
to the publication of this specification. It is these individuals to the publication of this specification. It is these individuals
without whom this work would not have existed or reached its without whom this work would not have existed or reached its
successful conclusion. successful conclusion.
skipping to change at page 60, line 43 skipping to change at page 62, line 30
Special thanks goes to Mike Curtis and Yahoo! for their unconditional Special thanks goes to Mike Curtis and Yahoo! for their unconditional
support of this work for over three years. support of this work for over three years.
13. References 13. References
13.1. Normative References 13.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0",
RFC 2246, January 1999.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
Leach, P., Luotonen, A., and L. Stewart, "HTTP Leach, P., Luotonen, A., and L. Stewart, "HTTP
Authentication: Basic and Digest Access Authentication", Authentication: Basic and Digest Access Authentication",
RFC 2617, June 1999. RFC 2617, June 1999.
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
skipping to change at page 61, line 29 skipping to change at page 63, line 17
IANA Considerations Section in RFCs", BCP 26, RFC 5226, IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008. May 2008.
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234, January 2008. Specifications: ABNF", STD 68, RFC 5234, January 2008.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008. (TLS) Protocol Version 1.2", RFC 5246, August 2008.
[W3C.REC-html401-19991224] [W3C.REC-html401-19991224]
Hors, A., Raggett, D., and I. Jacobs, "HTML 4.01 Raggett, D., Hors, A., and I. Jacobs, "HTML 4.01
Specification", World Wide Web Consortium Specification", World Wide Web Consortium
Recommendation REC-html401-19991224, December 1999, Recommendation REC-html401-19991224, December 1999,
<http://www.w3.org/TR/1999/REC-html401-19991224>. <http://www.w3.org/TR/1999/REC-html401-19991224>.
13.2. Informative References 13.2. Informative References
[I-D.draft-hardt-oauth-01] [I-D.draft-hardt-oauth-01]
Hardt, D., Ed., Tom, A., Eaton, B., and Y. Goland, "OAuth Hardt, D., Ed., Tom, A., Eaton, B., and Y. Goland, "OAuth
Web Resource Authorization Profiles", January 2010. Web Resource Authorization Profiles", January 2010.
 End of changes. 123 change blocks. 
354 lines changed or deleted 430 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/