| < draft-ietf-oauth-v2-13.txt | draft-ietf-oauth-v2-14.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: August 20, 2011 D. Hardt | Expires: October 8, 2011 D. Hardt | |||
| Microsoft | Microsoft | |||
| February 16, 2011 | April 6, 2011 | |||
| The OAuth 2.0 Authorization Protocol | The OAuth 2.0 Authorization Protocol | |||
| draft-ietf-oauth-v2-13 | draft-ietf-oauth-v2-14 | |||
| Abstract | Abstract | |||
| This specification describes the OAuth 2.0 authorization protocol. | The OAuth 2.0 authorization protocol enables granting third-party | |||
| applications limited access to HTTP service on behalf of an end-user | ||||
| by orchestrating an approval interaction between the end-user and the | ||||
| HTTP service. | ||||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 August 20, 2011. | This Internet-Draft will expire on October 8, 2011. | |||
| 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.3. Access Token . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.3. Access Token . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 1.4. Authorization Grant . . . . . . . . . . . . . . . . . . . 6 | 1.4. Authorization Grant . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 8 | 1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 1.6. Document Structure . . . . . . . . . . . . . . . . . . . . 10 | 1.6. Document Structure . . . . . . . . . . . . . . . . . . . . 10 | |||
| 1.7. Notational Conventions . . . . . . . . . . . . . . . . . . 10 | 1.7. Notational Conventions . . . . . . . . . . . . . . . . . . 10 | |||
| 2. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . . 10 | 2. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 2.1. Authorization Endpoint . . . . . . . . . . . . . . . . . . 11 | 2.1. Authorization Endpoint . . . . . . . . . . . . . . . . . . 11 | |||
| 2.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . . 12 | 2.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3. Client Authentication . . . . . . . . . . . . . . . . . . . . 13 | 3. Client Authentication . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.1. Client Password Authentication . . . . . . . . . . . . . . 13 | 3.1. Client Password Authentication . . . . . . . . . . . . . . 14 | |||
| 3.2. Other Client Authentication Methods . . . . . . . . . . . 13 | 3.2. Other Client Authentication Methods . . . . . . . . . . . 14 | |||
| 4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 14 | 4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.1. Authorization Code . . . . . . . . . . . . . . . . . . . . 14 | 4.1. Authorization Code . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.2. Implicit Grant . . . . . . . . . . . . . . . . . . . . . . 20 | 4.2. Implicit Grant . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 4.3. Resource Owner Password Credentials . . . . . . . . . . . 25 | 4.3. Resource Owner Password Credentials . . . . . . . . . . . 27 | |||
| 4.4. Client Credentials . . . . . . . . . . . . . . . . . . . . 28 | 4.4. Client Credentials . . . . . . . . . . . . . . . . . . . . 29 | |||
| 4.5. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 30 | 4.5. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 30 | 5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.1. Successful Response . . . . . . . . . . . . . . . . . . . 31 | 5.1. Successful Response . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.2. Error Response . . . . . . . . . . . . . . . . . . . . . . 32 | 5.2. Error Response . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 6. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 33 | 6. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 35 | |||
| 7. Accessing Protected Resources . . . . . . . . . . . . . . . . 34 | 7. Accessing Protected Resources . . . . . . . . . . . . . . . . 36 | |||
| 7.1. Access Token Types . . . . . . . . . . . . . . . . . . . . 35 | 7.1. Access Token Types . . . . . . . . . . . . . . . . . . . . 36 | |||
| 8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 36 | 8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 8.1. Defining Access Token Types . . . . . . . . . . . . . . . 36 | 8.1. Defining Access Token Types . . . . . . . . . . . . . . . 37 | |||
| 8.2. Defining New Endpoint Parameters . . . . . . . . . . . . . 36 | 8.2. Defining New Endpoint Parameters . . . . . . . . . . . . . 37 | |||
| 8.3. Defining New Authorization Grant Types . . . . . . . . . . 36 | 8.3. Defining New Authorization Grant Types . . . . . . . . . . 38 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | 8.4. Defining Additional Error Codes . . . . . . . . . . . . . 38 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 39 | |||
| 10.1. The OAuth Access Token Type Registry . . . . . . . . . . . 37 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 10.2. The OAuth Parameters Registry . . . . . . . . . . . . . . 38 | 10.1. The OAuth Access Token Type Registry . . . . . . . . . . . 39 | |||
| Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 41 | 10.2. The OAuth Parameters Registry . . . . . . . . . . . . . . 40 | |||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 41 | 10.3. The OAuth Extensions Error Registry . . . . . . . . . . . 43 | |||
| Appendix C. Document History . . . . . . . . . . . . . . . . . . 41 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | Appendix A. Editor's Notes . . . . . . . . . . . . . . . . . . . 45 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . . 42 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . . 42 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 46 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 43 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 46 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 47 | ||||
| 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 3, line 41 ¶ | skipping to change at page 3, line 41 ¶ | |||
| issued a different set of credentials than those of the resource | issued a different set of credentials than those of the resource | |||
| owner. | owner. | |||
| Instead of using the resource owner's credentials to access protected | Instead of using the resource owner's credentials to access protected | |||
| resources, the client obtains an access token - a string denoting a | resources, the client obtains an access token - a string denoting a | |||
| specific scope, duration, and other access attributes. Access tokens | specific scope, duration, and other access attributes. Access tokens | |||
| are issued to third-party clients by an authorization server with the | are issued to third-party clients by an authorization server with the | |||
| approval of the resource owner. The client uses the access token to | approval of the resource owner. The client uses the access token to | |||
| access the protected resources hosted by the resource server. | access the protected resources hosted by the resource server. | |||
| For example, a web user (resource owner) can grant a printing service | For example, a web end-user (resource owner) can grant a printing | |||
| (client) access to her protected photos stored at a photo sharing | service (client) access to her protected photos stored at a photo | |||
| service (resource server), without sharing her username and password | sharing service (resource server), without sharing her username and | |||
| with the printing service. Instead, she authenticates directly with | password with the printing service. Instead, she authenticates | |||
| a server trusted by the photo sharing service (authorization server) | directly with a server trusted by the photo sharing service | |||
| which issues the printing service delegation-specific credentials | (authorization server) which issues the printing service delegation- | |||
| (access token). | specific credentials (access token). | |||
| This specification is designed for use with HTTP [RFC2616]. The use | ||||
| of OAuth with any transport protocol other than HTTP is undefined. | ||||
| 1.1. Roles | 1.1. Roles | |||
| OAuth includes four roles working together to grant and provide | OAuth includes four roles working together to grant and provide | |||
| access to protected resources - access restricted resources which | access to protected resources - access restricted resources which | |||
| require authentication to access: | require authentication to access: | |||
| resource owner | resource owner | |||
| An entity capable of granting access to a protected resource. | An entity capable of granting access to a protected resource. | |||
| When the resource owner is a person, it is referred to as an end- | When the resource owner is a person, it is referred to as an end- | |||
| skipping to change at page 6, line 30 ¶ | skipping to change at page 6, line 30 ¶ | |||
| Access tokens can have different formats, structures, and methods of | Access tokens can have different formats, structures, and methods of | |||
| utilization (e.g. cryptographic properties) based on the resource | utilization (e.g. cryptographic properties) based on the resource | |||
| server security requirements. Access token attributes and the | server security requirements. Access token attributes and the | |||
| methods used to access protected resources are beyond the scope of | methods used to access protected resources are beyond the scope of | |||
| this specification and are defined by companion specifications. | this specification and are defined by companion specifications. | |||
| 1.4. Authorization Grant | 1.4. Authorization Grant | |||
| An authorization grant is a general term used to describe the | An authorization grant is a general term used to describe the | |||
| intermediate credentials representing the resource owner | intermediate credentials representing the resource owner | |||
| authorization, and serves as an abstraction layer. An authorization | authorization (to access its protected resources), and serves as an | |||
| grant is used by the client to obtain an access token. | abstraction layer. An authorization grant is used by the client to | |||
| obtain an access token. | ||||
| This specification defines four grant types: authorization code, | ||||
| implicit, resource owner password credentials, and client | ||||
| credentials, as well as an extensibility mechanism for defining | ||||
| additional types. | ||||
| 1.4.1. Authorization Code | 1.4.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), which in turns directs the resource owner back to the client | agent as defined in [RFC2616]), which in turns directs the resource | |||
| 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 issuing the access | |||
| token directly to the client without potentially exposing it to | token directly to the client without potentially exposing it to | |||
| others, including the resource owner. | others, including the resource owner. | |||
| 1.4.2. Implicit | 1.4.2. Implicit | |||
| An implicit grant is issued when the resource owner's authorization | When an access token is issued to the client directly as the result | |||
| is expressed directly as an access token, without using an | of the resource owner authorization, without an intermediary | |||
| intermediate credential. The implicit grant is issued in a similar | authorization grant (such as an authorization code), the grant is | |||
| manner as an authorization code, but instead of the resource owner | considered implicit. | |||
| being redirected back to the client with the authorization code, it | ||||
| is redirected back with an access token and its related attributes. | ||||
| When issuing an implicit grant, the authorization server cannot | When issuing an implicit grant, the authorization server cannot | |||
| verify the identity of the client, and the access token may be | verify the identity of the client, and the access token may be | |||
| exposed to the resource owner or other applications with access to | exposed to the resource owner or other applications with access to | |||
| the resource owner's user-agent. | 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. | access token. | |||
| skipping to change at page 7, line 38 ¶ | skipping to change at page 7, line 42 ¶ | |||
| 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 computer operating system or a highly privileged application), | its computer operating system or a highly privileged application), | |||
| and when other authorization grant types are not available (such as | and when other authorization grant types are not available (such as | |||
| an authorization code). | an 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. Unlike | |||
| the HTTP Basic authentication scheme defined in [RFC2617], this grant | the HTTP Basic authentication scheme defined in [RFC2617], this grant | |||
| type eliminates the need for the client to store the resource-owner | type (when combined with a refresh token) eliminates the need for the | |||
| credentials for future use. | client to store the resource-owner credentials for future use. | |||
| 1.4.4. Client Credentials | 1.4.4. Client Credentials | |||
| The client credentials can be used as an authorization grant when the | The client credentials can be used as an authorization grant when the | |||
| authorization scope is limited to the protected resources under the | authorization scope is limited to the protected resources under the | |||
| control of the client, or to protected resources previously arranged | control of the client, or to protected resources previously arranged | |||
| with the authorization server. Client credentials are used as an | with the authorization server. Client credentials are used as an | |||
| authorization grant typically when the client is acting on its own | authorization grant typically when the client is acting on its own | |||
| behalf (the client is also the resource owner). | behalf (the client is also the resource owner). | |||
| 1.4.5. Extensions | 1.4.5. Extensions | |||
| Additional grant types may be defined to provide a bridge between | Additional grant types may be defined to provide a bridge between | |||
| OAuth and other trust frameworks. For example, | OAuth and other protocols. For example, | |||
| [I-D.ietf-oauth-saml2-bearer] defines a SAML 2.0 | [I-D.ietf-oauth-saml2-bearer] defines a SAML 2.0 | |||
| [OASIS.saml-core-2.0-os] bearer assertion grant type, which can be | [OASIS.saml-core-2.0-os] bearer assertion grant type, which can be | |||
| used to obtain an access token. | used to obtain an access token. | |||
| 1.5. Refresh Token | 1.5. Refresh Token | |||
| A refresh token is optionally issued by the authorization server to | A refresh token is optionally issued by the authorization server to | |||
| the client together with an access token. The client can use the | the client together with an access token. The client can use the | |||
| refresh token to request another access token based on the same | refresh token to request another access token based on the same | |||
| authorization, without having to involve the resource owner again, or | authorization, without having to involve the resource owner again, or | |||
| having to retain the original authorization grant used to obtain the | having to retain the original authorization grant used to obtain the | |||
| initial access token. | initial access token. | |||
| A refresh token is a string representing the authorization granted to | A refresh token is a string representing the authorization granted to | |||
| the client by the resource owner. The string is usually opaque to | the client by the resource owner. The string is usually opaque to | |||
| the client. The token may denote an identifier used to retrieve the | the client. The token may denote an identifier used to retrieve the | |||
| authorization information, or self-contain the authorization | authorization information, or self-contain the authorization | |||
| information in a verifiable manner. | information in a verifiable manner. The refresh token is bound to | |||
| the client it was issued to, and its usage requires client | ||||
| authentication. | ||||
| The refresh token can be used to obtain a new access token when the | The refresh token can be used to obtain a new access token when the | |||
| current access token expires (access tokens may have a shorter | current access token expires (access tokens may have a shorter | |||
| lifetime than authorized by the resource owner), or to obtain | lifetime than authorized by the resource owner), no longer valid, or | |||
| additional access tokens with identical or narrower scope. | to obtain additional access tokens with identical or narrower scope. | |||
| +--------+ Authorization Grant & +---------------+ | +--------+ Authorization Grant & +---------------+ | |||
| | |--(A)-------- Client Credentials --------->| | | | |--(A)-------- Client Credentials --------->| | | |||
| | | | | | | | | | | |||
| | |<-(B)----------- Access Token -------------| | | | |<-(B)----------- Access Token -------------| | | |||
| | | & Refresh Token | | | | | & Refresh Token | | | |||
| | | | | | | | | | | |||
| | | +----------+ | | | | | +----------+ | | | |||
| | |--(C)---- Access Token ---->| | | | | | |--(C)---- Access Token ---->| | | | | |||
| | | | | | | | | | | | | | | |||
| skipping to change at page 9, line 44 ¶ | skipping to change at page 9, line 44 ¶ | |||
| (B) The authorization server validates the client credentials and | (B) The authorization server validates the client credentials and | |||
| 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 requests 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 (expired), the resource server | (F) Since the access token is invalid, the resource server returns | |||
| 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 using its client credentials, and | the authorization server using its client credentials, and | |||
| presenting the refresh token. | presenting the refresh token. | |||
| (H) The authorization server validates the client credentials and | (H) The authorization server validates the client credentials and | |||
| 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. Document Structure | 1.6. Document Structure | |||
| skipping to change at page 10, line 46 ¶ | skipping to change at page 10, line 46 ¶ | |||
| specification are to be interpreted as described in [RFC2119]. | specification are to be interpreted as described in [RFC2119]. | |||
| This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
| notation of [RFC5234]. | notation of [RFC5234]. | |||
| Unless otherwise noted, all the protocol parameter names and values | Unless otherwise noted, all the protocol parameter names and values | |||
| are case sensitive. | are case sensitive. | |||
| 2. Protocol Endpoints | 2. Protocol Endpoints | |||
| The authorization process utilizes two endpoints: | The authorization process utilizes two endpoints (HTTP resources): | |||
| o Authorization endpoint - used to obtain authorization from the | o Authorization endpoint - used to obtain authorization from the | |||
| 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. | |||
| skipping to change at page 11, line 23 ¶ | skipping to change at page 11, line 23 ¶ | |||
| 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 authorization which is expressed explicitly as an | |||
| authorization code (exchanged for an access token), or implicitly by | authorization code (exchanged for an access token), or implicitly by | |||
| direct issuance of an access token. | direct issuance of an access token. | |||
| The authorization server MUST first verify the identity of the | The authorization server MUST first verify the identity of the | |||
| resource owner. The way in which the authorization server | resource owner. The way in which the authorization server | |||
| authenticates the resource owner (e.g. username and password login, | authenticates the resource owner (e.g. username and password login, | |||
| session cookies) is beyond the scope of this specification. | session cookies) is beyond the scope of this specification. | |||
| The location of the authorization endpoint can be found in the | The means through which the client obtains the location of the | |||
| service documentation. The endpoint URI MAY include a query | authorization endpoint are beyond the scope of this specification but | |||
| component as defined by [RFC3986] section 3, which MUST be retained | is typically provided in the service documentation. The endpoint URI | |||
| when adding additional query parameters. | MAY include a query component as defined by [RFC3986] section 3, | |||
| which MUST be retained when adding additional query parameters. | ||||
| Requests to the authorization endpoint result in user authentication | Requests to the authorization endpoint result in resource owner | |||
| and the transmission of sensitive information. If the response | authentication and the transmission of sensitive information. If the | |||
| includes an access token, the authorization server MUST require TLS | response includes an access token, the authorization server MUST | |||
| 1.2 as defined in [RFC5246] and MAY support additional transport- | require TLS 1.2 as defined in [RFC5246] and MAY support additional | |||
| layer mechanisms meeting its security requirements. If the response | transport-layer mechanisms meeting its security requirements. If the | |||
| does not include an access token, the authorization server SHOULD | response does not include an access token, the authorization server | |||
| require TLS 1.2 and any additional transport-layer mechanism meeting | SHOULD require TLS 1.2 and any additional transport-layer mechanism | |||
| its security requirements. | 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 for the authorization endpoint, and MAY support the use of the | method [RFC2616] for the authorization endpoint, and MAY support the | |||
| "POST" method as well. | use of the "POST" method as well. | |||
| The REQUIRED "response_type" request parameter is used to identify | ||||
| which grant type the client is requesting: authorization code or | ||||
| implicit, described in Section 4.1.1 and Section 4.2.1 respectively. | ||||
| If the request is missing the "response_type" parameter, the | ||||
| authorization server SHOULD return an error response as described in | ||||
| Section 4.1.2.1. | ||||
| Parameters sent without a value MUST be treated as if they were | 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. | unrecognized request parameters. | |||
| Request and response parameters MUST NOT repeat more than once, | ||||
| unless noted otherwise. | ||||
| 2.1.1. Redirection URI | 2.1.1. Redirection URI | |||
| The client directs the resource owner's user-agent to the | The client directs the resource owner's user-agent to the | |||
| authorization endpoint and includes a redirection URI to which the | authorization endpoint and includes a redirection URI to which the | |||
| authorization server will redirect the user-agent back once | authorization server will redirect the user-agent back once | |||
| authorization has been obtained (or denied). The client MAY omit the | authorization has been obtained (or denied). The client MAY omit the | |||
| redirection URI if one has been established between the client and | redirection URI if one has been established between the client and | |||
| authorization server via other means, such as during the client | authorization server via other means, such as during the client | |||
| registration process. | registration process. | |||
| skipping to change at page 12, line 26 ¶ | skipping to change at page 12, line 38 ¶ | |||
| 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 endpoint from being | unregistered or untrusted URIs to prevent the endpoint from being | |||
| used as an open redirector. If no valid redirection URI is | used as an open redirector. If no valid redirection URI is | |||
| available, the authorization server SHOULD inform the resource owner | available, the authorization server SHOULD inform the resource owner | |||
| directly of the error. | directly of the error. | |||
| 2.2. Token Endpoint | 2.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 | |||
| authenticating with the authorization server and presenting its | authenticating with the authorization server and presenting its | |||
| authorization grant. The token endpoint is used with every | authorization grant or refresh token. The token endpoint is used | |||
| authorization grant except for the implicit grant type (since an | with every authorization grant except for the implicit grant type | |||
| access token is issued directly). | (since an access token is issued directly). | |||
| The location of the token endpoint can be found in the service | The means through which the client obtains the location of the token | |||
| documentation. The endpoint URI MAY include a query component, which | endpoint are beyond the scope of this specification but is typically | |||
| MUST be retained when adding additional query parameters. | provided in the service documentation. The endpoint URI MAY include | |||
| a query component, which MUST be retained when adding additional | ||||
| query parameters. | ||||
| Since requests to the token endpoint result in the transmission of | 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 endpoints. The | security mechanism when sending requests to the token endpoints. The | |||
| authorization server MUST support TLS 1.2 as defined in [RFC5246], | authorization server MUST support TLS 1.2 as defined in [RFC5246], | |||
| and MAY support additional transport-layer mechanisms meeting its | and MAY support additional transport-layer mechanisms meeting its | |||
| security requirements. | security requirements. | |||
| The token endpoint requires client authentication as described in | The token endpoint requires client authentication as described in | |||
| skipping to change at page 13, line 6 ¶ | skipping to change at page 13, line 19 ¶ | |||
| authentication meeting its security requirements. The client MUST | authentication meeting its security requirements. The client MUST | |||
| NOT use more than one authentication method in each request. | NOT use more than one authentication method in each request. | |||
| 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. | unrecognized request parameters. | |||
| Request and response parameters MUST NOT repeat more than once, | ||||
| unless noted otherwise. | ||||
| 3. Client Authentication | 3. Client Authentication | |||
| Client credentials are used to identify and authenticate the client. | Client credentials are used to identify and authenticate the client. | |||
| The client credentials include a client identifier - a unique string | The client credentials include a client identifier - a unique string | |||
| issued to the client to identify itself to the authorization server. | issued to the client to identify itself to the authorization server. | |||
| The client identifier is not a secret, it is exposed to the resource | ||||
| owner, and MUST NOT be used alone for client authentication. Client | ||||
| authentication is accomplished via additional means such as a | ||||
| matching client password. | ||||
| The methods through which the client obtains its client credentials | The methods through which the client obtains its client credentials | |||
| are beyond the scope of this specification. | are beyond the scope of this specification. However, the client | |||
| registration process typically includes gathering relevant | ||||
| information used to inform the resource owner about the client when | ||||
| requesting authorization. | ||||
| Due to the nature of some clients, the authorization server should | Due to the nature of some clients, the authorization server should | |||
| not make assumptions about the confidentiality of client credentials | not make assumptions about the confidentiality of client credentials | |||
| without establishing trust with the client. The authorization server | without establishing trust with the client. The authorization server | |||
| SHOULD NOT issue client credentials to clients incapable of keeping | SHOULD NOT issue client credentials to clients incapable of keeping | |||
| their secrets confidential. | their credentials confidential (typically determined during the | |||
| client registration process). | ||||
| In addition, the authorization server MAY allow unauthenticated | ||||
| access token requests when the client identity does not matter (e.g. | ||||
| anonymous client) or when the client identity is established via | ||||
| other means. For readability purposes only, this specification is | ||||
| written under the assumption that the authorization server requires | ||||
| some form of client authentication. However, such language does not | ||||
| affect the authorization server's discretion in allowing | ||||
| unauthenticated client requests. | ||||
| 3.1. Client Password Authentication | 3.1. Client Password Authentication | |||
| The client password authentication uses a shared symmetric secret to | The client password authentication uses a shared symmetric secret to | |||
| authenticate the client. The client identifier and password are | authenticate the client. The client identifier and password are | |||
| included in the request using the following parameters: | included in the request using the following parameters: | |||
| client_id | client_id | |||
| REQUIRED. The client identifier. | REQUIRED. The client identifier. | |||
| client_secret | client_secret | |||
| skipping to change at page 13, line 45 ¶ | skipping to change at page 14, line 32 ¶ | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| grant_type=authorization_code&client_id=s6BhdRkqt3& | grant_type=authorization_code&client_id=s6BhdRkqt3& | |||
| client_secret=gX1fBat3bV&code=i1WsRn1uB1& | client_secret=gX1fBat3bV&code=i1WsRn1uB1& | |||
| redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb | redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb | |||
| 3.2. Other Client Authentication Methods | 3.2. Other Client Authentication Methods | |||
| In cases where client password authentication is not suitable or | In cases where client password authentication is not suitable or | |||
| sufficient, the authorization server MAY support other existing HTTP | sufficient, the authorization server MAY support other existing HTTP | |||
| authentication schemes or define new methods. In addition, the | authentication schemes or define new methods. | |||
| authorization server MAY allow unauthenticated access token requests | ||||
| when the client identity does not matter (e.g. anonymous client) or | ||||
| when the client identity is established via other means. | ||||
| For example, the authorization server MAY support using the HTTP | For example, the authorization server MAY support using the HTTP | |||
| Basic authentication scheme as defined in [RFC2617] to include the | Basic authentication scheme as defined in [RFC2617] to include the | |||
| client identifier as the username and client password as the password | client identifier as the username and client password as the password | |||
| (line breaks are for display purposes only): | (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 | Content-Type: application/x-www-form-urlencoded | |||
| skipping to change at page 14, line 27 ¶ | skipping to change at page 15, line 12 ¶ | |||
| When using a method other than client password authentication to | When using a method other than client password authentication to | |||
| exchange an authorization code grant type, the authorization server | exchange an authorization code grant type, the authorization server | |||
| MUST define a method for mapping the client credentials to the client | MUST define a method for mapping the client credentials to the client | |||
| identifier used to obtain the authorization code. | identifier used to obtain the authorization code. | |||
| 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 requesting 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. | |||
| 4.1. Authorization Code | 4.1. Authorization Code | |||
| The authorization code grant type is suitable for clients capable of | The authorization code grant type is suitable for clients capable of | |||
| maintaining their client credentials confidential (for authenticating | maintaining their client credentials confidential (for authenticating | |||
| with the authorization server) such as a client implemented on a | with the authorization server) such as a client implemented on a | |||
| secure server. As a redirection-based flow, the client must be | secure server. As a redirection-based flow, the client must be | |||
| skipping to change at page 15, line 47 ¶ | skipping to change at page 16, line 47 ¶ | |||
| user-agent to the authorization endpoint. The client includes | user-agent to the authorization endpoint. The client includes | |||
| its client identifier, requested scope, local state, and a | its client identifier, requested scope, local state, and a | |||
| redirection URI to which the authorization server will send the | redirection URI to which the authorization server will send the | |||
| user-agent back once access is granted (or denied). | user-agent back once access is granted (or denied). | |||
| (B) The authorization server authenticates the resource owner (via | (B) The authorization server authenticates the resource owner (via | |||
| the user-agent) and establishes whether the resource owner | the user-agent) and establishes whether the resource owner | |||
| grants or denies the client's access request. | grants or denies the client's access request. | |||
| (C) Assuming the resource owner grants access, the authorization | (C) Assuming the resource owner grants access, the authorization | |||
| server redirects the user-agent back to the client using the | server redirects the user-agent back to the client using the | |||
| redirection URI provided earlier. The redirection URI includes | redirection URI provided earlier. The redirection URI includes | |||
| an authorization code. | an authorization code and any local state provided by the client | |||
| 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 authenticating using its client | server's token endpoint by authenticating using its client | |||
| credentials, and includes the authorization code received in the | credentials, and includes the authorization code received in the | |||
| previous step. | previous step. The client includes the redirection URI used to | |||
| (E) The authorization server validates the client credentials and | obtain the authorization code for verification. | |||
| the authorization code and if valid, responds back with an | (E) The authorization server validates the client credentials, the | |||
| access token. | authorization code, and ensures the redirection URI received | |||
| matches the URI used to redirect the client in step (C). If | ||||
| valid, responds back with an access token. | ||||
| 4.1.1. Authorization Request | 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 3. | REQUIRED. The client identifier as described in Section 3. | |||
| redirect_uri | redirect_uri | |||
| REQUIRED, unless a redirection URI has been established between | REQUIRED, unless a redirection URI has been established between | |||
| the client and authorization server via other means. Described | the client and authorization server via other means. Described | |||
| in Section 2.1.1. | in Section 2.1.1. | |||
| scope | scope | |||
| OPTIONAL. The scope of the access request expressed as a list | OPTIONAL. The scope of the access request expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. | 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 | OPTIONAL. An opaque value used by the client to maintain state | |||
| between the request and callback. The authorization server | between the request and callback. The authorization server | |||
| includes this value when redirecting the user-agent back to the | includes this value when redirecting the user-agent back to the | |||
| client. | client. | |||
| 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. | |||
| skipping to change at page 17, line 45 ¶ | skipping to change at page 18, line 47 ¶ | |||
| 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: | sending the following HTTP response: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example.com/cb?code=i1WsRn1uB1 | Location: https://client.example.com/cb?code=i1WsRn1uB1 | |||
| The client SHOULD ignore unrecognized response parameters. The | The client SHOULD ignore unrecognized response parameters. The | |||
| authorization code string size is left undefined by this | authorization code string size is left undefined by this | |||
| specification. The clients should avoid making assumptions about | specification. The client should avoid making assumptions about code | |||
| code value sizes. The authorization server should document the size | value sizes. The authorization server should document the size of | |||
| of any value it issues. | any value it issues. | |||
| 4.1.2.1. Error Response | 4.1.2.1. Error Response | |||
| If the request fails due to a missing, invalid, or mismatching | If the request fails due to a missing, invalid, or mismatching | |||
| redirection URI, or if the client identifier provided is invalid, the | redirection URI, or if the client identifier provided is invalid, the | |||
| authorization server SHOULD inform the resource owner of the error, | authorization server SHOULD inform the resource owner of the error, | |||
| and MUST NOT redirect the user-agent to the invalid redirection URI. | and MUST NOT redirect the user-agent to the invalid redirection URI. | |||
| If the resource owner denies the access request or if the request | If the resource owner denies the access request or if the request | |||
| fails for reasons other than a missing or invalid redirection URI, | fails for reasons other than a missing or invalid redirection URI, | |||
| skipping to change at page 18, line 35 ¶ | skipping to change at page 19, line 36 ¶ | |||
| The client is not authorized to request an authorization | The client is not authorized to request an authorization | |||
| code using this method. | code using this method. | |||
| access_denied | access_denied | |||
| The resource owner or authorization server denied the | The resource owner or authorization server denied the | |||
| request. | request. | |||
| unsupported_response_type | unsupported_response_type | |||
| The authorization server does not support obtaining an | The authorization server does not support obtaining an | |||
| authorization code using this method. | authorization code using this method. | |||
| invalid_scope | invalid_scope | |||
| The requested scope is invalid, unknown, or malformed. | The requested scope is invalid, unknown, or malformed. | |||
| a 4xx or 5xx HTTP status code (except for 400 and 401) | ||||
| [[ Pending Consensus ]] The authorization server MAY set | ||||
| the "error" parameter value to a numerical HTTP status | ||||
| code from the 4xx or 5xx range, with the exception of the | ||||
| 400 (Bad Request) and 401 (Unauthorized) status codes. | ||||
| For example, if the service is temporarily unavailable, | ||||
| the authorization server MAY return an error response | ||||
| with "error" set to "503". | ||||
| error_description | error_description | |||
| OPTIONAL. A human-readable text providing additional | OPTIONAL. A human-readable text providing additional | |||
| information, used to assist in the understanding and resolution | information, used to assist in the understanding and resolution | |||
| of the error occurred. | of the error occurred. | |||
| 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 resource owner | information about the error, used to provide the resource owner | |||
| with additional information about the error. | with additional information about the error. | |||
| state | state | |||
| REQUIRED if the "state" parameter was present in the client | REQUIRED if a valid "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: | sending the following HTTP response: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example.com/cb?error=access_denied | Location: https://client.example.com/cb?error=access_denied | |||
| 4.1.3. Access Token Request | 4.1.3. Access Token Request | |||
| skipping to change at page 19, line 39 ¶ | skipping to change at page 21, line 7 ¶ | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| grant_type=authorization_code&client_id=s6BhdRkqt3& | grant_type=authorization_code&client_id=s6BhdRkqt3& | |||
| client_secret=gX1fBat3bV&code=i1WsRn1uB1& | client_secret=gX1fBat3bV&code=i1WsRn1uB1& | |||
| 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: | |||
| o Validate the client credentials and ensure they match the | o Validate the client credentials and ensure that the authorization | |||
| authorization code. | code was issued to that client. | |||
| o Verify that the authorization code is valid, and that the | o Verify that the authorization code is valid, and that the | |||
| redirection URI matches the redirection URI used by the | redirection URI matches the redirection URI used by the | |||
| authorization server to deliver the authorization code. | authorization server to deliver the authorization code. | |||
| 4.1.4. Access Token Response | 4.1.4. Access Token Response | |||
| If the access token request is valid and authorized, the | If the access token request is valid and authorized, the | |||
| authorization server issues an access token and optional refresh | authorization server issues an access token and optional refresh | |||
| token as described in Section 5.1. If the request failed client | token as described in Section 5.1. If the request client | |||
| authentication or is invalid, the authorization server return an | authentication failed or is invalid, the authorization server returns | |||
| error response as described in Section 5.2. | an error response as described in Section 5.2. | |||
| An example successful response: | An example successful response: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "access_token":"SlAV32hkKG", | "access_token":"SlAV32hkKG", | |||
| "token_type":"example", | "token_type":"example", | |||
| "expires_in":3600, | "expires_in":3600, | |||
| "refresh_token":"8xLOxBtZp8", | "refresh_token":"8xLOxBtZp8", | |||
| "example_parameter":"example-value" | "example_parameter":"example_value" | |||
| } | } | |||
| 4.2. Implicit Grant | 4.2. Implicit Grant | |||
| The implicit grant type is suitable for clients incapable of | The implicit grant type is suitable for clients incapable of | |||
| maintaining their client credentials confidential (for authenticating | maintaining their client credentials confidential (for authenticating | |||
| with the authorization server) such as client applications residing | with the authorization server) such as client applications residing | |||
| in a user-agent, typically implemented in a browser using a scripting | in a user-agent, typically implemented in a browser using a scripting | |||
| language such as JavaScript, or native applications. These clients | language such as JavaScript. | |||
| cannot keep client secrets confidential and the authentication of the | ||||
| client is based on the user-agent's same-origin policy. | ||||
| As a redirection-based flow, the client must be capable of | As a redirection-based flow, the client must be capable of | |||
| interacting with the resource owner's user-agent (typically a web | interacting with the resource owner's user-agent (typically a web | |||
| browser) and capable of receiving incoming requests (via redirection) | browser) and capable of receiving incoming requests (via redirection) | |||
| from the authorization server. | from the authorization server. | |||
| Unlike the authorization code grant type in which the client makes | Unlike the authorization code grant type in which the client makes | |||
| separate requests for authorization and access token, the client | separate requests for authorization and access token, the client | |||
| receives the access token as the result of the authorization request. | receives the access token as the result of the authorization request. | |||
| skipping to change at page 22, line 31 ¶ | skipping to change at page 23, line 39 ¶ | |||
| 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 3. | REQUIRED. The client identifier as described in Section 3. | |||
| Due to lack of client authentication, the client identifier | ||||
| alone MUST NOT be relied upon for client identification. | ||||
| redirect_uri | redirect_uri | |||
| REQUIRED, unless a redirection URI has been established between | REQUIRED, unless a redirection URI has been established between | |||
| the client and authorization server via other means. Described | the client and authorization server via other means. Described | |||
| in Section 2.1.1. | in Section 2.1.1. | |||
| scope | scope | |||
| OPTIONAL. The scope of the access request expressed as a list | OPTIONAL. The scope of the access request expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. | 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 | OPTIONAL. An opaque value used by the client to maintain state | |||
| between the request and callback. The authorization server | between the request and callback. The authorization server | |||
| includes this value when redirecting the user-agent back to the | includes this value when redirecting the user-agent back to the | |||
| client. | client. | |||
| 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. | |||
| skipping to change at page 23, line 41 ¶ | skipping to change at page 25, line 4 ¶ | |||
| 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 duration in seconds of the access token | OPTIONAL. The duration in seconds of the access token | |||
| lifetime. For example, the value "3600" denotes that the | lifetime. For example, the value "3600" denotes that the | |||
| access token will expire in one hour from the time the response | access token will expire in one hour from the time the response | |||
| was generated. | was generated. | |||
| scope | scope | |||
| OPTIONAL. The scope of the access request expressed as a list | OPTIONAL. The scope of the access request expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. The | and each string adds an additional access range to the | |||
| authorization server SHOULD include the parameter if the | requested scope. The authorization server SHOULD include the | |||
| requested scope is different from the one requested by the | parameter if the requested scope is different from the one | |||
| client. | 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 line breaks are for display | sending the following HTTP response (URI line breaks are for display | |||
| purposes only): | purposes only): | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| skipping to change at page 25, line 4 ¶ | skipping to change at page 26, line 15 ¶ | |||
| 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, or is otherwise | unsupported parameter or parameter value, or is otherwise | |||
| malformed. | malformed. | |||
| unauthorized_client | unauthorized_client | |||
| The client is not authorized to request an access token | The client is not authorized to request an access token | |||
| using this method. | using this method. | |||
| access_denied | access_denied | |||
| The resource owner or authorization server denied the | The resource owner or authorization server denied the | |||
| request. | request. | |||
| unsupported_response_type | unsupported_response_type | |||
| The authorization server does not support obtaining an | The authorization server does not support obtaining an | |||
| access token using this method. | access token using this method. | |||
| invalid_scope | invalid_scope | |||
| The requested scope is invalid, unknown, or malformed. | The requested scope is invalid, unknown, or malformed. | |||
| a 4xx or 5xx HTTP status code (except for 400 and 401) | ||||
| [[ Pending Consensus ]] The authorization server MAY set | ||||
| the "error" parameter value to a numerical HTTP status | ||||
| code from the 4xx or 5xx range, with the exception of the | ||||
| 400 (Bad Request) and 401 (Unauthorized) status codes. | ||||
| For example, if the service is temporarily unavailable, | ||||
| the authorization server MAY return an error response | ||||
| with "error" set to "503". | ||||
| error_description | error_description | |||
| OPTIONAL. A human-readable text providing additional | OPTIONAL. A human-readable text providing additional | |||
| information, used to assist in the understanding and resolution | information, used to assist in the understanding and resolution | |||
| of the error occurred. | of the error occurred. | |||
| 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 resource owner | information about the error, used to provide the resource owner | |||
| with additional information about the error. | with additional information about the error. | |||
| state | state | |||
| REQUIRED if the "state" parameter was present in the client | REQUIRED if a valid "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: | sending the following HTTP response: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example.com/cb#error=access_denied | Location: https://client.example.com/cb#error=access_denied | |||
| 4.3. Resource Owner Password Credentials | 4.3. Resource Owner Password Credentials | |||
| skipping to change at page 27, line 13 ¶ | skipping to change at page 28, line 29 ¶ | |||
| 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. | REQUIRED. The resource owner username. | |||
| password | password | |||
| REQUIRED. The resource owner password. | REQUIRED. The resource owner password. | |||
| scope | scope | |||
| OPTIONAL. The scope of the access request expressed as a list | OPTIONAL. The scope of the access request expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. | and each string adds an additional access range to the | |||
| requested scope. | ||||
| The client includes its authentication credentials as described in | The client includes its authentication credentials as described in | |||
| Section 3 | Section 3 | |||
| [[ add internationalization consideration for username and password | ||||
| ]] | ||||
| For example, the client makes the following HTTP request by including | For example, the client makes the following HTTP request by including | |||
| its client credentials via the "client_id" and "client_secret" | its client credentials via the "client_id" and "client_secret" | |||
| parameters, and using transport-layer security (line breaks are for | parameters, and using transport-layer security (line breaks are for | |||
| display purposes only): | display purposes only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| grant_type=password&client_id=s6BhdRkqt3& | grant_type=password&client_id=s6BhdRkqt3& | |||
| skipping to change at page 27, line 46 ¶ | skipping to change at page 29, line 13 ¶ | |||
| The authorization server MUST: | The authorization server MUST: | |||
| o Validate the client credentials. | o Validate the client credentials. | |||
| o Validate the resource owner password credentials. | o Validate the resource owner password credentials. | |||
| 4.3.3. Access Token Response | 4.3.3. Access Token Response | |||
| If the access token request is valid and authorized, the | If the access token request is valid and authorized, the | |||
| authorization server issues an access token and optional refresh | authorization server issues an access token and optional refresh | |||
| token as described in Section 5.1. If the request failed client | token as described in Section 5.1. If the request failed client | |||
| authentication or is invalid, the authorization server return an | authentication or is invalid, the authorization server returns an | |||
| error response as described in Section 5.2. | error response as described in Section 5.2. | |||
| An example successful response: | An example successful response: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "access_token":"SlAV32hkKG", | "access_token":"SlAV32hkKG", | |||
| "token_type":"example", | "token_type":"example", | |||
| "expires_in":3600, | "expires_in":3600, | |||
| "refresh_token":"8xLOxBtZp8", | "refresh_token":"8xLOxBtZp8", | |||
| "example_parameter":"example-value" | "example_parameter":"example_value" | |||
| } | } | |||
| 4.4. Client Credentials | 4.4. Client Credentials | |||
| The client can request an access token using only its client | The client can request an access token using only its client | |||
| credentials when the client is requesting access to the protected | credentials when the client is requesting access to the protected | |||
| resources under its control, or those of another resource owner which | resources under its control, or those of another resource owner which | |||
| has been previously arranged with the authorization server (the | has been previously arranged with the authorization server (the | |||
| method of which is beyond the scope of this specification). | method of which is beyond the scope of this specification). | |||
| skipping to change at page 29, line 15 ¶ | skipping to change at page 30, line 26 ¶ | |||
| 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 parameter using the "application/x-www-form-urlencoded" | following parameter 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 expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. | and each string adds an additional access range to the | |||
| requested scope. | ||||
| The client includes its authentication credentials as described in | The client includes its authentication credentials as described in | |||
| Section 3 | Section 3 | |||
| For example, the client makes the following HTTP request by including | For example, the client makes the following HTTP request by including | |||
| its client credentials via the "client_id" and "client_secret" | its client credentials via the "client_id" and "client_secret" | |||
| parameters, and using transport-layer security (line breaks are for | parameters, and using transport-layer security (line breaks are for | |||
| display purposes only): | display purposes only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| skipping to change at page 29, line 42 ¶ | skipping to change at page 31, line 10 ¶ | |||
| grant_type=client_credentials&client_id=s6BhdRkqt3& | grant_type=client_credentials&client_id=s6BhdRkqt3& | |||
| client_secret=47HDu8s | client_secret=47HDu8s | |||
| The authorization server MUST validate the client credentials. | The authorization server MUST validate the client credentials. | |||
| 4.4.3. Access Token Response | 4.4.3. Access Token Response | |||
| If the access token request is valid and authorized, the | If the access token request is valid and authorized, the | |||
| authorization server issues an access token and optional refresh | authorization server issues an access token and optional refresh | |||
| token as described in Section 5.1. If the request failed client | token as described in Section 5.1. If the request failed client | |||
| authentication or is invalid, the authorization server return an | authentication or is invalid, the authorization server returns an | |||
| error response as described in Section 5.2. | error response as described in Section 5.2. | |||
| An example successful response: | An example successful response: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "access_token":"SlAV32hkKG", | "access_token":"SlAV32hkKG", | |||
| "token_type":"example", | "token_type":"example", | |||
| "expires_in":3600, | "expires_in":3600, | |||
| "refresh_token":"8xLOxBtZp8", | "refresh_token":"8xLOxBtZp8", | |||
| "example_parameter":"example-value" | "example_parameter":"example_value" | |||
| } | } | |||
| 4.5. Extensions | 4.5. Extensions | |||
| The client uses an extension grant type by specifying the grant type | The client uses an extension grant type by specifying the grant type | |||
| using an absolute URI (defined by the authorization server) as the | using an absolute URI (defined by the authorization server) as the | |||
| value of the "grant_type" parameter of the token endpoint, and by | value of the "grant_type" parameter of the token endpoint, and by | |||
| adding any additional parameters necessary. | adding any additional parameters necessary. | |||
| For example, to request an access token using a SAML 2.0 assertion | For example, to request an access token using a SAML 2.0 assertion | |||
| skipping to change at page 30, line 44 ¶ | skipping to change at page 32, line 10 ¶ | |||
| grant_type=http%3A%2F%2Foauth.net%2Fgrant_type%2Fassertion%2F | grant_type=http%3A%2F%2Foauth.net%2Fgrant_type%2Fassertion%2F | |||
| saml%2F2.0%2Fbearer&assertion=PEFzc2VydGlvbiBJc3N1ZUluc3RhbnQ | saml%2F2.0%2Fbearer&assertion=PEFzc2VydGlvbiBJc3N1ZUluc3RhbnQ | |||
| [...omitted for brevity...]V0aG5TdGF0ZW1lbnQ-PC9Bc3NlcnRpb24- | [...omitted for brevity...]V0aG5TdGF0ZW1lbnQ-PC9Bc3NlcnRpb24- | |||
| 5. Issuing an Access Token | 5. Issuing an Access Token | |||
| If the access token request is valid and authorized, the | If the access token request is valid and authorized, the | |||
| authorization server issues an access token and optional refresh | authorization server issues an access token and optional refresh | |||
| token as described in Section 5.1. If the request failed client | token as described in Section 5.1. If the request failed client | |||
| authentication or is invalid, the authorization server return an | authentication or is invalid, the authorization server returns an | |||
| error response as described in Section 5.2. | error response as described in Section 5.2. | |||
| 5.1. Successful Response | 5.1. Successful Response | |||
| The authorization server issues an access token and optional refresh | The authorization server issues an access token and optional refresh | |||
| token, and constructs the response by adding the following parameters | token, and constructs the response by adding the following parameters | |||
| to the entity body of the HTTP response with a 200 (OK) status code: | to the entity body of the HTTP response with a 200 (OK) status code: | |||
| access_token | access_token | |||
| REQUIRED. The access token issued by the authorization server. | REQUIRED. The access token issued by the authorization server. | |||
| skipping to change at page 31, line 27 ¶ | skipping to change at page 32, line 35 ¶ | |||
| OPTIONAL. The duration in seconds of the access token | OPTIONAL. The duration in seconds of the access token | |||
| lifetime. For example, the value "3600" denotes that the | lifetime. For example, the value "3600" denotes that the | |||
| access token will expire in one hour from the time the response | access token will expire in one hour from the time the response | |||
| was generated. | 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 request expressed as a list | OPTIONAL. The scope of the access request expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. The | and each string adds an additional access range to the | |||
| authorization server SHOULD include the parameter if the | requested scope. The authorization server SHOULD include the | |||
| requested scope is different from the one requested by the | parameter if the requested scope is different from the one | |||
| client. | 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 authorization server MUST include the HTTP "Cache-Control" | The authorization server MUST include the HTTP "Cache-Control" | |||
| response header field with a value of "no-store" in any response | response header field [RFC2616] with a value of "no-store" in any | |||
| containing tokens, secrets, or other sensitive information. | response containing tokens, secrets, or other sensitive information. | |||
| For example: | For example: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "access_token":"SlAV32hkKG", | "access_token":"SlAV32hkKG", | |||
| "token_type":"example", | "token_type":"example", | |||
| "expires_in":3600, | "expires_in":3600, | |||
| "refresh_token":"8xLOxBtZp8", | "refresh_token":"8xLOxBtZp8", | |||
| "example_parameter":"example-value" | "example_parameter":"example_value" | |||
| } | } | |||
| The client SHOULD ignore unrecognized response parameters. The sizes | The client SHOULD ignore unrecognized response parameters. The sizes | |||
| of tokens and other values received from the authorization server are | of tokens and other values received from the authorization server are | |||
| left undefined. The client should avoid making assumptions about | left undefined. The client should avoid making assumptions about | |||
| value sizes. The authorization server should document the size of | value sizes. The authorization server should document the size of | |||
| any value it issues. | any value it issues. | |||
| 5.2. Error Response | 5.2. Error Response | |||
| skipping to change at page 33, line 7 ¶ | skipping to change at page 34, line 7 ¶ | |||
| (Unauthorized) status code to indicate which HTTP | (Unauthorized) status code to indicate which HTTP | |||
| authentication schemes are supported. If the client | authentication schemes are supported. If the client | |||
| attempted to authenticate via the "Authorization" request | attempted to authenticate via the "Authorization" request | |||
| header field, the authorization server MUST respond with | header field, the authorization server MUST respond with | |||
| an HTTP 401 (Unauthorized) status code, and include the | an HTTP 401 (Unauthorized) status code, and include the | |||
| "WWW-Authenticate" response header field matching the | "WWW-Authenticate" response header field 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, or does not match the redirection URI used in | revoked, does not match the redirection URI used in the | |||
| the authorization request. | 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. | |||
| invalid_scope | invalid_scope | |||
| The requested scope is invalid, unknown, malformed, or | The requested scope is invalid, unknown, malformed, or | |||
| exceeds the previously granted scope. | exceeds the scope granted by the resource owner. | |||
| error_description | error_description | |||
| OPTIONAL. A human-readable text providing additional | OPTIONAL. A human-readable text providing additional | |||
| information, used to assist in the understanding and resolution | information, used to assist in the understanding and resolution | |||
| of the error occurred. | of the error occurred. | |||
| 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 resource owner | information about the error, used to provide the resource owner | |||
| with additional information about the error. | 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 | |||
| skipping to change at page 33, line 44 ¶ | skipping to change at page 34, line 44 ¶ | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/json | Content-Type: application/json | |||
| Cache-Control: no-store | Cache-Control: no-store | |||
| { | { | |||
| "error":"invalid_request" | "error":"invalid_request" | |||
| } | } | |||
| [[ Pending Consensus ]] If the authorization server encounters an | ||||
| error condition other than the 400 (Bad Request) and 401 | ||||
| (Unauthorized) responses described above (e.g. the service is | ||||
| temporarily unavailable), the authorization server SHOULD include an | ||||
| error response in the entity body, and set the "error" parameter | ||||
| value to the numerical HTTP status code returned. | ||||
| For example: | ||||
| HTTP/1.1 503 Service Unavailable | ||||
| Content-Type: application/json | ||||
| { | ||||
| "error":"503" | ||||
| } | ||||
| 6. Refreshing an Access Token | 6. Refreshing an Access Token | |||
| 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 parameter using the "application/x-www-form-urlencoded" | following parameter 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 along the access token | REQUIRED. The refresh token issued to the client. | |||
| being refreshed. | ||||
| scope | scope | |||
| OPTIONAL. The scope of the access request expressed as a list | OPTIONAL. The scope of the access request expressed as a list | |||
| of space-delimited strings. The value is defined by the | of space-delimited, case sensitive strings. The value is | |||
| authorization server. If the value contains multiple space- | defined by the authorization server. If the value contains | |||
| delimited strings, their order does not matter, and each string | multiple space-delimited strings, their order does not matter, | |||
| adds an additional access range to the requested scope. The | and each string adds an additional access range to the | |||
| requested scope MUST be equal or lesser than the scope | requested scope. The requested scope MUST be equal or lesser | |||
| originally granted by the resource owner, and if omitted is | than the scope originally granted by the resource owner, and if | |||
| treated as equal to the previously approved scope. | omitted is treated as equal to the scope originally granted by | |||
| the resource owner. | ||||
| The client includes its authentication credentials as described in | The client includes its authentication credentials as described in | |||
| Section 3 | Section 3. | |||
| For example, the client makes the following HTTP request by including | For example, the client makes the following HTTP request by including | |||
| its client credentials via the "client_id" and "client_secret" | its client credentials via the "client_id" and "client_secret" | |||
| parameters, and using transport-layer security (line breaks are for | parameters, and using transport-layer security (line breaks are for | |||
| display purposes only): | display purposes only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| grant_type=refresh_token&client_id=s6BhdRkqt3& | grant_type=refresh_token&client_id=s6BhdRkqt3& | |||
| client_secret=8eSEIpnqmM&refresh_token=n4E9O119d | client_secret=8eSEIpnqmM&refresh_token=n4E9O119d | |||
| The authorization server MUST validate the client credentials, the | The authorization server MUST validate the client credentials, ensure | |||
| refresh token, and verify that the resource owner's authorization is | that the refresh token was issued to the authenticated client, | |||
| still valid. If valid and authorized, the authorization server | validate the refresh token, and verify that the resource owner's | |||
| issues an access token as described in Section 5.1. If the request | authorization is still valid. If valid and authorized, the | |||
| failed verification or is invalid, the authorization server return an | authorization server issues an access token as described in | |||
| error response as described in Section 5.2. | Section 5.1. If the request failed verification or is invalid, the | |||
| authorization server returns an error response as described in | ||||
| Section 5.2. | ||||
| The authorization server MAY issue a new refresh token, in which | The authorization server MAY issue a new refresh token, in which | |||
| case, the client MUST discard the old refresh token and replace it | case, the client MUST discard the old refresh token and replace it | |||
| with the new refresh token. | with the new refresh token. | |||
| 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 are beyond the scope of this specification, | validate the access token (as well as any error responses) are beyond | |||
| but generally involve an interaction or coordination between the | the scope of this specification, but generally involve an interaction | |||
| resource server and the authorization server. | or coordination between the resource server and the authorization | |||
| server. | ||||
| The method in which the client utilized the access token to | The method in which the client utilized the access token to | |||
| authenticate with the resource server depends on the type of access | authenticate with the resource server depends on the type of access | |||
| token issued by the authorization server. Typically, it involves | token issued by the authorization server. Typically, it involves | |||
| using the HTTP "Authorization" request header field with an | using the HTTP "Authorization" request header field [RFC2617] with an | |||
| authentication scheme defined by the access token type specification. | authentication scheme defined by the access token type specification. | |||
| 7.1. Access Token Types | 7.1. Access Token Types | |||
| The access token type provides the client with the information | The access token type provides the client with the information | |||
| required to successfully utilize the access token to make a protected | required to successfully utilize the access token to make a protected | |||
| resource request (along with type-specific attributes). | resource request (along with type-specific attributes). | |||
| For example, the "bearer" token type defined in | For example, the "bearer" token type defined in | |||
| [I-D.ietf-oauth-v2-bearer] is utilized by simply including the access | [I-D.ietf-oauth-v2-bearer] is utilized by simply including the access | |||
| token string in the request: | token string in the request: | |||
| GET /resource/1 HTTP/1.1 | GET /resource/1 HTTP/1.1 | |||
| Host: example.com | Host: example.com | |||
| Authorization: BEARER h480djs93hd8 | Authorization: Bearer h480djs93hd8 | |||
| while the "mac" token type defined in [I-D.hammer-oauth-v2-mac-token] | while the "mac" token type defined in [I-D.hammer-oauth-v2-mac-token] | |||
| is utilized by issuing a token secret together with the access token | is utilized by issuing a token secret together with the access token | |||
| which is used to sign certain components of the HTTP requests: | which is used to sign certain components of the HTTP requests: | |||
| GET /resource/1 HTTP/1.1 | GET /resource/1 HTTP/1.1 | |||
| Host: example.com | Host: example.com | |||
| Authorization: MAC token="h480djs93hd8", | Authorization: MAC token="h480djs93hd8", | |||
| timestamp="137131200", | timestamp="137131200", | |||
| nonce="dj83hs9s", | nonce="dj83hs9s", | |||
| skipping to change at page 36, line 32 ¶ | skipping to change at page 38, line 5 ¶ | |||
| 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 10.2. | parameters registry following the procedure in Section 10.2. | |||
| Parameter names MUST conform to the param-name ABNF, MUST NOT use the | Parameter names MUST conform to the param-name ABNF and parameter | |||
| "x_" parameter name prefix, and parameter values syntax MUST be well- | values syntax MUST be well-defined (e.g., using ABNF, or a reference | |||
| defined (e.g., using ABNF, or a reference to the syntax of an | to the syntax of an existing parameter). | |||
| existing parameter). | ||||
| param-name = 1*name-char | param-name = 1*name-char | |||
| name-char = "-" / "." / "_" / DIGIT / ALPHA | name-char = "-" / "." / "_" / DIGIT / ALPHA | |||
| Vendor-specific parameter extensions that are not commonly | Unregistered vendor-specific parameter extensions that are not | |||
| applicable, and are specific to the implementation details of the | commonly applicable, and are specific to the implementation details | |||
| authorization server where they are used SHOULD utilize the "x_" | of the authorization server where they are used SHOULD utilize a | |||
| parameter name prefix if they are not registered. | vendor-specific prefix that is not likely to conflict with other | |||
| registered values (e.g. begin with 'companyname_'). | ||||
| 8.3. Defining New Authorization Grant Types | 8.3. Defining New Authorization Grant Types | |||
| New authorization grant types can be defined by assigning them a | New authorization grant types can be defined by assigning them a | |||
| unique absolute URI for use with the "grant_type" parameter. If the | unique absolute URI for use with the "grant_type" parameter. If the | |||
| extension grant type requires additional token endpoint parameters, | extension grant type requires additional token endpoint parameters, | |||
| they MUST be registered in the OAuth parameters registry as described | they MUST be registered in the OAuth parameters registry as described | |||
| by Section 10.2. | by Section 10.2. | |||
| 8.4. Defining Additional Error Codes | ||||
| [[ Pending Consensus ]] | ||||
| In cases where protocol extensions (i.e. access token types, | ||||
| extension parameters, or extension grant types) require additional | ||||
| error codes to be used with the authorization code grant error | ||||
| response (Section 4.1.2.1), the implicit grant error response | ||||
| (Section 4.2.2.1), or the token error response (Section 5.2), such | ||||
| error codes MAY be defined. | ||||
| Extension error codes MUST be registered (following the procedures in | ||||
| Section 10.3) if the extension they are used in conjunction with is | ||||
| registered. Additional error codes used with unregistered extensions | ||||
| MAY be registered. | ||||
| Error codes MUST conform to the error-code ABNF, and SHOULD be | ||||
| prefixed by an identifying name when possible. For example, an error | ||||
| identifying an invalid value set to the extension parameter "example" | ||||
| should be named "example_invalid". | ||||
| error-code = ALPHA *error-char | ||||
| error-char = "-" / "." / "_" / DIGIT / ALPHA | ||||
| 9. Security Considerations | 9. Security Considerations | |||
| [[ TBD ]] | [[ TBD ]] | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| 10.1. The OAuth Access Token Type Registry | 10.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. | |||
| skipping to change at page 37, line 31 ¶ | skipping to change at page 39, line 28 ¶ | |||
| 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 toke 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. ]] | |||
| Before a period of 14 days has passed, 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 both to the review list and to IANA. Denials should include | decision to the review list and IANA. Denials should include an | |||
| 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. Registration requests that are undetermined for | request successful. | |||
| a period longer than 21 days can be brought to the IESG's attention | ||||
| (using the iesg@iesg.org mailing list) for resolution. | Decisions (or lack thereof) made by the Designated Expert can be | |||
| first appealed to Application Area Directors (contactable using | ||||
| app-ads@tools.ietf.org email address or directly by looking up their | ||||
| email addresses on http://www.iesg.org/ website) and, if the | ||||
| appellant is not satisfied with the response, to the full IESG (using | ||||
| the iesg@iesg.org mailing list). | ||||
| IANA should only accept registry updates from the Designated | ||||
| Expert(s), and should direct all requests for registration to the | ||||
| review mailing list. | ||||
| 10.1.1. Registration Template | 10.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 10.2. | Section 10.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 token 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 document that specifies the parameter, preferably | |||
| skipping to change at page 38, line 38 ¶ | skipping to change at page 40, line 43 ¶ | |||
| [RFC5226]). However, to allow for the allocation of values prior to | [RFC5226]). However, to allow for the allocation of values prior to | |||
| publication, the Designated Expert(s) may approve registration once | publication, the Designated Expert(s) may approve registration once | |||
| they are satisfied that such a specification will be published. | they are satisfied 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 parameter: example"). [[ Note to RFC-EDITOR: The name of | "Request for parameter: example"). [[ Note to RFC-EDITOR: The name of | |||
| the mailing list should be determined in consultation with the IESG | the mailing list should be determined in consultation with the IESG | |||
| and IANA. Suggested name: oauth-ext-review. ]] | and IANA. Suggested name: oauth-ext-review. ]] | |||
| Before a period of 14 days has passed, 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 both to the review list and to IANA. Denials should include | decision to the review list and IANA. Denials should include an | |||
| 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. Registration requests that are undetermined for | request successful. | |||
| a period longer than 21 days can be brought to the IESG's attention | ||||
| (using the iesg@iesg.org mailing list) for resolution. | Decisions (or lack thereof) made by the Designated Expert can be | |||
| first appealed to Application Area Directors (contactable using | ||||
| app-ads@tools.ietf.org email address or directly by looking up their | ||||
| email addresses on http://www.iesg.org/ website) and, if the | ||||
| appellant is not satisfied with the response, to the full IESG (using | ||||
| the iesg@iesg.org mailing list). | ||||
| IANA should only accept registry updates from the Designated | ||||
| Expert(s), and should direct all requests for registration to the | ||||
| review mailing list. | ||||
| 10.2.1. Registration Template | 10.2.1. Registration Template | |||
| Parameter name: | Parameter name: | |||
| 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 document that specifies the parameter, preferably | |||
| skipping to change at page 41, line 11 ¶ | skipping to change at page 43, line 23 ¶ | |||
| o Parameter name: password | o Parameter name: password | |||
| o Parameter usage location: token request | o Parameter usage location: token request | |||
| o Change controller: IETF | o Change controller: IETF | |||
| o Specification document(s): [[ this document ]] | o Specification document(s): [[ this document ]] | |||
| o Parameter name: refresh_token | o Parameter name: refresh_token | |||
| o Parameter usage location: token request, token response | o Parameter usage location: token request, token response | |||
| o Change controller: IETF | o Change controller: IETF | |||
| o Specification document(s): [[ this document ]] | o Specification document(s): [[ this document ]] | |||
| Appendix A. Contributors | 10.3. The OAuth Extensions Error Registry | |||
| The following people contributed to preliminary versions of this | [[ Pending Consensus ]] | |||
| document: Blaine Cook (BT), Brian Eaton (Google), Yaron Goland | ||||
| (Microsoft), Brent Goldman (Facebook), Raffi Krikorian (Twitter), | ||||
| Luke Shepard (Facebook), and Allen Tom (Yahoo!). The content and | ||||
| concepts within are a product of the OAuth community, WRAP community, | ||||
| and the OAuth Working Group. | ||||
| The OAuth Working Group has dozens of very active contributors who | This specification establishes the OAuth extensions error registry. | |||
| proposed ideas and wording for this document, including: | ||||
| Michael Adams, Andrew Arnott, Dirk Balfanz, Brian Campbell, Leah | Additional error codes used together with other protocol extensions | |||
| Culver, Bill de hOra, Brian Ellin, Igor Faynberg, George Fletcher, | (i.e. extension grant types, access token types, or extension | |||
| Tim Freeman, Evan Gilbert, Kristoffer Gronowski, Justin Hart, Phil | parameters) are registered on the advice of one or more Designated | |||
| Hunt, Michael B. Jones, John Kemp, Mark Kent, Chasen Le Hara, Rasmus | Experts (appointed by the IESG or their delegate), with a | |||
| Lerdorf, Torsten Lodderstedt, Alastair Mair, Eve Maler, James Manger, | Specification Required (using terminology from [RFC5226]). However, | |||
| Laurence Miao, Chuck Mortimore, Justin Richer, Peter Saint-Andre, Nat | to allow for the allocation of values prior to publication, the | |||
| Sakimura, Rob Sayre, Marius Scurtescu, Naitik Shah, Justin Smith, | Designated Expert(s) may approve registration once they are satisfied | |||
| Jeremy Suriel, Christian Stuebner, Paul Tarjan, Franklin Tse, Nick | that such a specification will be published. | |||
| Walker, Skylar Woodward. | ||||
| Appendix B. Acknowledgements | Registration requests should be sent to the [TBD]@ietf.org mailing | |||
| list for review and comment, with an appropriate subject (e.g., | ||||
| "Request for error code: example"). [[ Note to RFC-EDITOR: The name | ||||
| of the mailing list should be determined in consultation with the | ||||
| IESG and IANA. Suggested name: oauth-ext-review. ]] | ||||
| [[ Add OAuth 1.0a authors + WG contributors ]] | Within at most 14 days of the request, the Designated Expert(s) will | |||
| either approve or deny the registration request, communicating this | ||||
| decision to the review list and IANA. Denials should include an | ||||
| explanation and, if applicable, suggestions as to how to make the | ||||
| request successful. | ||||
| Appendix C. Document History | Decisions (or lack thereof) made by the Designated Expert can be | |||
| first appealed to Application Area Directors (contactable using | ||||
| app-ads@tools.ietf.org email address or directly by looking up their | ||||
| email addresses on http://www.iesg.org/ website) and, if the | ||||
| appellant is not satisfied with the response, to the full IESG (using | ||||
| the iesg@iesg.org mailing list). | ||||
| [[ to be removed by RFC editor before publication as an RFC ]] | IANA should only accept registry updates from the Designated | |||
| Expert(s), and should direct all requests for registration to the | ||||
| review mailing list. | ||||
| -13 | 10.3.1. Registration Template | |||
| o Small editorial changes. | Error name: | |||
| o Split introduction 'Roles' into 'Roles' and 'Protocol Flow'. | The name requested (e.g., "example"). | |||
| o Changes section name 'Requesting an Access Token' to 'Obtaining | Error usage location: | |||
| Authorization'. | The location(s) where the error can be used. The possible | |||
| locations are: authorization code grant error response | ||||
| (Section 4.1.2.1), implicit grant error response | ||||
| (Section 4.2.2.1), or token error response (Section 5.2). | ||||
| Related protocol extension: | ||||
| The name of the extension grant type, access token type, or | ||||
| extension parameter, the error code is used in conjunction with. | ||||
| Change controller: | ||||
| For standards-track RFCs, state "IETF". For others, give the name | ||||
| of the responsible party. Other details (e.g., postal address, | ||||
| e-mail address, home page URI) may also be included. | ||||
| Specification document(s): | ||||
| Reference to document that specifies the error code, preferably | ||||
| including a URI that can be used to retrieve a copy of the | ||||
| document. An indication of the relevant sections may also be | ||||
| included, but is not required. | ||||
| o Added explicit authorization request and access token response | 11. Acknowledgements | |||
| sub-sections for each grant type. | ||||
| o Added document overview in the introduction. | ||||
| o Reduced the use of 'x_' prefix to SHOULD. | ||||
| o Removed unused references and updated others. | ||||
| o Dropped 'invalid_client' error from authorization endpoint | ||||
| responses. | ||||
| 11. References | This specification is the work of the OAuth Working Group which | |||
| includes dozens of active and dedicated participants. In particular, | ||||
| the following individuals contributed ideas, feedback, and wording | ||||
| which shaped and formed the final specification: | ||||
| 11.1. Normative References | Michael Adams, Andrew Arnott, Dirk Balfanz, Blaine Cook, Brian | |||
| Campbell, Leah Culver, Bill de hOra, Brian Eaton, Brian Ellin, Igor | ||||
| Faynberg, George Fletcher, Tim Freeman, Evan Gilbert, Yaron Goland, | ||||
| Brent Goldman, Kristoffer Gronowski, Justin Hart, Craig Heath, Phil | ||||
| Hunt, Michael B. Jones, John Kemp, Mark Kent, Raffi Krikorian, Chasen | ||||
| Le Hara, Rasmus Lerdorf, Torsten Lodderstedt, Hui-Lan Lu, Paul | ||||
| Madsen, Alastair Mair, Eve Maler, James Manger, Laurence Miao, Chuck | ||||
| Mortimore, Justin Richer, Peter Saint-Andre, Nat Sakimura, Rob Sayre, | ||||
| Marius Scurtescu, Naitik Shah, Luke Shepard, Justin Smith, Jeremy | ||||
| Suriel, Christian Stuebner, Paul Tarjan, Allen Tom, Franklin Tse, | ||||
| Nick Walker, Skylar Woodward. | ||||
| The initial OAuth 2.0 protocol specification was edited by David | ||||
| Recordon, based on two previous publications: the OAuth 1.0 community | ||||
| specification [RFC5849], and OAuth WRAP (OAuth Web Resource | ||||
| Authorization Profiles) [I-D.draft-hardt-oauth-01]. | ||||
| The OAuth 1.0 community specification was edited by Eran Hammer-Lahav | ||||
| and authored by Mark Atwood, Dirk Balfanz, Darren Bounds, Richard M. | ||||
| Conlan, Blaine Cook, Leah Culver, Breno de Medeiros, Brian Eaton, | ||||
| Kellan Elliott-McCrea, Larry Halff, Eran Hammer-Lahav, Ben Laurie, | ||||
| Chris Messina, John Panzer, Sam Quigley, David Recordon, Eran | ||||
| Sandler, Jonathan Sergent, Todd Sieling, Brian Slesinsky, and Andy | ||||
| Smith. | ||||
| The OAuth WRAP specification was edited by Dick Hardt and authored by | ||||
| Brian Eaton, Yaron Goland, Dick Hardt, and Allen Tom. | ||||
| Appendix A. Editor's Notes | ||||
| While many people contributed to this specification throughout its | ||||
| long journey, the editor would like to acknowledge and thank a few | ||||
| individuals for their outstanding and invaluable efforts leading up | ||||
| to the publication of this specification. It is these individuals | ||||
| without whom this work would not have existed, or reached its | ||||
| successful conclusion. | ||||
| David Recordon for continuously being one of OAuth's most valuable | ||||
| assets, bringing pragmatism and urgency to the work, and helping | ||||
| shape it from its very beginning, as well as being one of the best | ||||
| collaborators I had the pleasure of working with. | ||||
| Mark Nottingham for introducing OAuth to the IETF and setting the | ||||
| community on this course. Lisa Dusseault for her support and | ||||
| guidance as the Application area director. Blaine Cook, Peter Saint- | ||||
| Andre, and Hannes Tschofenig for their work as working group chairs. | ||||
| James Manger for his creative ideas and always insightful feedback. | ||||
| Brian Campbell, Torsten Lodderstedt, Chuck Mortimore, Justin Richer, | ||||
| Marius Scurtescu, and Luke Shepard for their continued participation | ||||
| and valuable feedback. | ||||
| Special thanks goes to Mike Curtis and Yahoo! for their unconditional | ||||
| support of this work for over three years. | ||||
| 12. References | ||||
| 12.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. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
| [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. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, January 2005. | RFC 3986, January 2005. | |||
| [RFC4627] Crockford, D., "The application/json Media Type for | [RFC4627] Crockford, D., "The application/json Media Type for | |||
| skipping to change at page 42, line 43 ¶ | skipping to change at page 46, line 39 ¶ | |||
| 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>. | |||
| 11.2. Informative References | 12.2. Informative References | |||
| [I-D.draft-hardt-oauth-01] | ||||
| Hardt, D., Ed., Tom, A., Eaton, B., and Y. Goland, "OAuth | ||||
| Web Resource Authorization Profiles", January 2010. | ||||
| [I-D.hammer-oauth-v2-mac-token] | [I-D.hammer-oauth-v2-mac-token] | |||
| Hammer-Lahav, E., "HTTP Authentication: MAC | Hammer-Lahav, E., "HTTP Authentication: MAC | |||
| Authentication", draft-hammer-oauth-v2-mac-token-02 (work | Authentication", draft-hammer-oauth-v2-mac-token-02 (work | |||
| in progress), January 2011. | in progress), January 2011. | |||
| [I-D.ietf-oauth-saml2-bearer] | [I-D.ietf-oauth-saml2-bearer] | |||
| Campbell, B. and C. Mortimore, "SAML 2.0 Bearer Assertion | Campbell, B. and C. Mortimore, "SAML 2.0 Bearer Assertion | |||
| Grant Type Profile for OAuth 2.0", | Grant Type Profile for OAuth 2.0", | |||
| draft-ietf-oauth-saml2-bearer-03 (work in progress), | draft-ietf-oauth-saml2-bearer-03 (work in progress), | |||
| skipping to change at page 43, line 24 ¶ | skipping to change at page 47, line 23 ¶ | |||
| Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 | Jones, M., Hardt, D., and D. Recordon, "The OAuth 2.0 | |||
| Protocol: Bearer Tokens", draft-ietf-oauth-v2-bearer-02 | Protocol: Bearer Tokens", draft-ietf-oauth-v2-bearer-02 | |||
| (work in progress), January 2011. | (work in progress), January 2011. | |||
| [OASIS.saml-core-2.0-os] | [OASIS.saml-core-2.0-os] | |||
| Cantor, S., Kemp, J., Philpott, R., and E. Maler, | Cantor, S., Kemp, J., Philpott, R., and E. Maler, | |||
| "Assertions and Protocol for the OASIS Security Assertion | "Assertions and Protocol for the OASIS Security Assertion | |||
| Markup Language (SAML) V2.0", OASIS Standard saml-core- | Markup Language (SAML) V2.0", OASIS Standard saml-core- | |||
| 2.0-os, March 2005. | 2.0-os, March 2005. | |||
| [RFC5849] Hammer-Lahav, E., "The OAuth 1.0 Protocol", RFC 5849, | ||||
| April 2010. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Eran Hammer-Lahav (editor) | Eran Hammer-Lahav (editor) | |||
| Yahoo! | Yahoo! | |||
| Email: eran@hueniverse.com | Email: eran@hueniverse.com | |||
| URI: http://hueniverse.com | URI: http://hueniverse.com | |||
| David Recordon | David Recordon | |||
| End of changes. 95 change blocks. | ||||
| 236 lines changed or deleted | 445 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||