| < draft-ietf-oauth-v2-00.txt | draft-ietf-oauth-v2-01.txt > | |||
|---|---|---|---|---|
| Network Working Group E. Hammer-Lahav, Ed. | Network Working Group E. Hammer-Lahav, Ed. | |||
| Internet-Draft Yahoo! | Internet-Draft Yahoo! | |||
| Intended status: Standards Track D. Recordon | Intended status: Standards Track D. Recordon | |||
| Expires: October 31, 2010 Facebook | Expires: October 31, 2010 Facebook | |||
| D. Hardt | D. Hardt | |||
| April 29, 2010 | April 29, 2010 | |||
| The OAuth 2.0 Protocol | The OAuth 2.0 Protocol | |||
| draft-ietf-oauth-v2-00 | draft-ietf-oauth-v2-01 | |||
| Abstract | Abstract | |||
| This specification describes the OAuth 2.0 protocol. OAuth provides | This specification describes the OAuth 2.0 protocol. OAuth provides | |||
| a method for making authenticated HTTP requests using a token - an | a method for making authenticated HTTP requests using a token - an | |||
| identifier used to denote an access grant with specific scope, | identifier used to denote an access grant with specific scope, | |||
| duration, and other attributes. Tokens are issued to third-party | duration, and other attributes. Tokens are issued to third-party | |||
| clients by an authorization server with the approval of the resource | clients by an authorization server with the approval of the resource | |||
| owner. OAuth defines multiple flows for obtaining a token to support | owner. OAuth defines multiple flows for obtaining a token to support | |||
| a wide range of client types and user experience. | a wide range of client types and user experience. | |||
| skipping to change at page 3, line 21 ¶ | skipping to change at page 3, line 21 ¶ | |||
| 2.3. Example . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3. Example . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.4. Notational Conventions . . . . . . . . . . . . . . . . . . 8 | 2.4. Notational Conventions . . . . . . . . . . . . . . . . . . 8 | |||
| 2.5. Conformance . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.5. Conformance . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3. Obtaining an Access Token . . . . . . . . . . . . . . . . . . 8 | 3. Obtaining an Access Token . . . . . . . . . . . . . . . . . . 8 | |||
| 3.1. Authorization Endpoint . . . . . . . . . . . . . . . . . . 9 | 3.1. Authorization Endpoint . . . . . . . . . . . . . . . . . . 9 | |||
| 3.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3. Flow Parameters . . . . . . . . . . . . . . . . . . . . . 10 | 3.3. Flow Parameters . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.4. Client Credentials . . . . . . . . . . . . . . . . . . . . 10 | 3.4. Client Credentials . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.5. User Delegation Flows . . . . . . . . . . . . . . . . . . 11 | 3.5. User Delegation Flows . . . . . . . . . . . . . . . . . . 11 | |||
| 3.5.1. User-Agent Flow . . . . . . . . . . . . . . . . . . . 11 | 3.5.1. User-Agent Flow . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.5.2. Web Server Flow . . . . . . . . . . . . . . . . . . . 15 | 3.5.2. Web Server Flow . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.5.3. Device Flow . . . . . . . . . . . . . . . . . . . . . 21 | 3.5.3. Device Flow . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 3.6. End User Credentials Flows . . . . . . . . . . . . . . . . 27 | 3.6. End-user Credentials Flows . . . . . . . . . . . . . . . . 27 | |||
| 3.6.1. Username and Password Flow . . . . . . . . . . . . . . 27 | 3.6.1. Username and Password Flow . . . . . . . . . . . . . . 27 | |||
| 3.7. Autonomous Client Flows . . . . . . . . . . . . . . . . . 30 | 3.7. Autonomous Client Flows . . . . . . . . . . . . . . . . . 30 | |||
| 3.7.1. Client Credentials Flow . . . . . . . . . . . . . . . 30 | 3.7.1. Client Credentials Flow . . . . . . . . . . . . . . . 30 | |||
| 3.7.2. Assertion Flow . . . . . . . . . . . . . . . . . . . . 33 | 3.7.2. Assertion Flow . . . . . . . . . . . . . . . . . . . . 33 | |||
| 4. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 35 | 4. Refreshing an Access Token . . . . . . . . . . . . . . . . . . 35 | |||
| 5. Accessing a Protected Resource . . . . . . . . . . . . . . . . 38 | 5. Accessing a Protected Resource . . . . . . . . . . . . . . . . 38 | |||
| 5.1. The Authorization Request Header . . . . . . . . . . . . . 38 | 5.1. The Authorization Request Header . . . . . . . . . . . . . 38 | |||
| 5.2. Bearer Token Requests . . . . . . . . . . . . . . . . . . 40 | 5.2. Bearer Token Requests . . . . . . . . . . . . . . . . . . 40 | |||
| 5.2.1. URI Query Parameter . . . . . . . . . . . . . . . . . 40 | 5.2.1. URI Query Parameter . . . . . . . . . . . . . . . . . 40 | |||
| 5.2.2. Form-Encoded Body Parameter . . . . . . . . . . . . . 41 | 5.2.2. Form-Encoded Body Parameter . . . . . . . . . . . . . 41 | |||
| skipping to change at page 4, line 27 ¶ | skipping to change at page 4, line 27 ¶ | |||
| authentication using the resource owner's credentials (typically a | authentication using the resource owner's credentials (typically a | |||
| username and password). In the traditional client-server | username and password). In the traditional client-server | |||
| authentication model, a client accessing a protected resource on a | authentication model, a client accessing a protected resource on a | |||
| server presents the resource owner's credentials in order to | server presents the resource owner's credentials in order to | |||
| authenticate and gain access. | authenticate and gain access. | |||
| Resource owners should not be required to share their credentials | Resource owners should not be required to share their credentials | |||
| when granting third-party applications access to their protected | when granting third-party applications access to their protected | |||
| resources. They should also have the ability to restrict access to a | resources. They should also have the ability to restrict access to a | |||
| limited subset of the resources they control, to limit access | limited subset of the resources they control, to limit access | |||
| duration, or to limit access to the methods supported by these | duration, or to limit access to the HTTP methods supported by these | |||
| resources. | resources. | |||
| OAuth provides a method for making authenticated HTTP requests using | OAuth provides a method for making authenticated HTTP requests using | |||
| a token - an identifier used to denote an access grant with specific | a token - an identifier used to denote an access grant with specific | |||
| scope, duration, and other attributes. Tokens are issued to third- | scope, duration, and other attributes. Tokens are issued to third- | |||
| party clients by an authorization server with the approval of the | party clients by an authorization server with the approval of the | |||
| resource owner. Instead of sharing their credentials with the | resource owner. Instead of sharing their credentials with the | |||
| client, resource owners grant access by authenticating directly with | client, resource owners grant access by authenticating directly with | |||
| the authorization server which in turn issues a token to the client. | the authorization server which in turn issues a token to the client. | |||
| The client uses the token (and optional secret) to authenticate with | The client uses the token (and optional secret) to authenticate with | |||
| the resource server and gain access. | the resource server and gain access. | |||
| For example, a web user (resource owner) can grant a printing service | For example, a web user (resource owner) can grant a printing service | |||
| (client) access to her protected photos stored at a photo sharing | (client) access to her protected photos stored at a photo sharing | |||
| service (resource server), without sharing her username and password | service (resource server), without sharing her username and password | |||
| with the printing service. Instead, she authenticates directly with | with the printing service. Instead, she authenticates directly with | |||
| the photo sharing service (authorization server) which issues the | the photo sharing service (authorization server) which issues the | |||
| printing service delegation-specific credentials (token). | printing service delegation-specific credentials (token). | |||
| The use of OAuth with any other transport protocol than HTTP | This specification defines the use of OAuth over HTTP [RFC2616] (or | |||
| [RFC2616] (or HTTP over TLS 1.0 as defined by [RFC2818] is undefined. | HTTP over TLS 1.0 as defined by [RFC2818]. Other specifications may | |||
| extend it for use with other tranport protocols. | ||||
| 2.1. Terminology | 2.1. Terminology | |||
| resource server | resource server | |||
| An HTTP [RFC2616] server capable of accepting authenticated | An HTTP [RFC2616] server capable of accepting authenticated | |||
| resource requests using the OAuth protocol. | resource requests using the OAuth protocol. | |||
| protected resource | protected resource | |||
| An access-restricted resource which can be obtained from a | An access-restricted resource which can be obtained from a | |||
| resource server using an OAuth-authenticated request. | resource server using an OAuth-authenticated request. | |||
| client | client | |||
| An HTTP client capable of making authenticated requests for | An HTTP client capable of making authenticated requests for | |||
| protected resources using the OAuth protocol. | protected resources using the OAuth protocol. | |||
| resource owner | resource owner | |||
| An entity capable of granting access to a protected resource. | An entity capable of granting access to a protected resource. | |||
| end user | end-user | |||
| A human resource owner. | A human resource owner. | |||
| access token | access token | |||
| A unique identifier used by the client to make authenticated | A unique identifier used by the client to make authenticated | |||
| requests on behalf of the resource owner. Access tokens may | requests on behalf of the resource owner. Access tokens may | |||
| have a matching secret. | have a matching secret. | |||
| bearer token An access token without a matching secret, used to | ||||
| obtain access to a protected resource by simply presenting the | ||||
| access token as-is to the resource server. | ||||
| authorization server | authorization server | |||
| An HTTP server capable of issuing tokens after successfully | An HTTP server capable of issuing tokens after successfully | |||
| authenticating the resource owner and obtaining authorization. | authenticating the resource owner and obtaining authorization. | |||
| The authorization server may be the same server as the resource | The authorization server may be the same server as the resource | |||
| server, or a separate entity. | server, or a separate entity. | |||
| authorization endpoint | authorization endpoint | |||
| The authorization server's HTTP endpoint capable of | The authorization server's HTTP endpoint capable of | |||
| authenticating the resource owner and obtaining authorization. | authenticating the resource owner and obtaining authorization. | |||
| skipping to change at page 7, line 21 ¶ | skipping to change at page 7, line 21 ¶ | |||
| | | HTTP Request +---------------+ | | | HTTP Request +---------------+ | |||
| | |--(C)--- with Access Token ------>| Resource | | | |--(C)--- with Access Token ------>| Resource | | |||
| | | | Server | | | | | Server | | |||
| | |<-(D)----- HTTP Response ---------| | | | |<-(D)----- HTTP Response ---------| | | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| Figure 2 | Figure 2 | |||
| This specification defines a number of authorization flows to support | This specification defines a number of authorization flows to support | |||
| different client types and scenarios. These authorization flows can | different client types and scenarios. These authorization flows can | |||
| be separated into three groups: user delegation flows where the | be separated into three groups: user delegation flows, end-user | |||
| client is acting on behalf of an end user, end user credentials flows | credentials flows, and autonomous flows. | |||
| where the client uses the end user's credentials directly to obtain | ||||
| authorization, and autonomous flows where the client is acting for | ||||
| itself (the client is also the resource owner). | ||||
| Additional authorization flows may be defined by other specifications | Additional authorization flows may be defined by other specifications | |||
| to cover different scenarios and client types. | to cover different scenarios and client types. | |||
| The user delegation authorization flows defined by this | User delegation authorization enable clients to act on behalf of an | |||
| specifications are: | end-user after obtaining authorization from the end-user. The user | |||
| delegation flows defined by this specifications are: | ||||
| o User-Agent Flow - This flow is designed for clients running inside | o User-Agent Flow - This flow is designed for clients running inside | |||
| a user-agent (typically a web browser), and therefore cannot | a user-agent (typically a web browser). This flow is described in | |||
| receive incoming requests from the authorization server. This | Section 3.5.1. | |||
| flow is described in Section 3.5.1. | ||||
| o Web Server Flow - This flow is optimized for cases where the | o Web Server Flow - This flow is optimized for clients that are part | |||
| client is capable of receiving incoming HTTP requests (act as an | of a web server application, accessible via HTTP requests. This | |||
| HTTP server). This flow is described in Section 3.5.2. | flow is described in Section 3.5.2. | |||
| o Device Flow - This flow suitable for clients executing on limited | o Device Flow - This flow is suitable for clients executing on | |||
| devices, but where the end user has separate access to a user- | limited devices, but where the end-user has separate access to a | |||
| agent on another computer or device. This flow is described in | user-agent on another computer or device. This flow is described | |||
| Section 3.5.3. | in Section 3.5.3. | |||
| The end user credentials flow defined by this specification is: | End-user credentials flow enable clients with direct access to the | |||
| end-user's credentials to exchange them for an access token without | ||||
| seeking additional authorization. These flows are only suitable when | ||||
| there is a high degree of trust between the end-user and the client. | ||||
| The end-user credentials flow defined by this specification is: | ||||
| o Username and Password Flow - This flow is used in cases where the | o Username and Password Flow - This flow is used in cases where the | |||
| end user trusts the client to handle its credentials but it is | end-user trusts the client to handle its credentials but it is | |||
| still undesirable for the client to store the end user's username | still undesirable for the client to store the end-user's username | |||
| and password. This flow is described in Section 3.6.1. | and password. This flow is described in Section 3.6.1. | |||
| The autonomous authorization flows defined by this specifications | Autonomous flows enable clients to act for their own behalf (the | |||
| are: | client is also the resource owner). The autonomous authorization | |||
| flows defined by this specifications are: | ||||
| o Client Credentials Flow - The client uses its credentials to | o Client Credentials Flow - The client uses its credentials to | |||
| obtain an access token. This flow is described in Section 3.7.1. | obtain an access token. This flow is described in Section 3.7.1. | |||
| o Assertion Flow - The client presents an assertion such as a SAML | o Assertion Flow - The client presents an assertion such as a SAML | |||
| [OASIS.saml-core-2.0-os] assertion to the authorization server in | [OASIS.saml-core-2.0-os] assertion to the authorization server in | |||
| exchange for an access token. This flow is described in | exchange for an access token. This flow is described in | |||
| Section 3.7.2. | Section 3.7.2. | |||
| 2.3. Example | 2.3. Example | |||
| skipping to change at page 8, line 49 ¶ | skipping to change at page 9, line 5 ¶ | |||
| MUST level requirements but not all the SHOULD level requirements for | MUST level requirements but not all the SHOULD level requirements for | |||
| its flows is said to be "conditionally compliant." | its flows is said to be "conditionally compliant." | |||
| 3. Obtaining an Access Token | 3. Obtaining an Access Token | |||
| The client obtains an access token by using one of the authorization | The client obtains an access token by using one of the authorization | |||
| flows supported by the authorization server. The authorization flows | flows supported by the authorization server. The authorization flows | |||
| all use the same authorization and token endpoints, each with a | all use the same authorization and token endpoints, each with a | |||
| different set of request parameters and values. | different set of request parameters and values. | |||
| When issuing an access token, the scope, duration, and other access | Access tokens have a scope, duration, and other access attributes | |||
| attributes granted by the resource owner must be retained and | granted by the resource owner. These attributes MUST be enforced by | |||
| enforced by the resource server when receiving a protected resource | the resource server when receiving a protected resource request, and | |||
| request and by the authorization server when receiving a token | by the authorization server when receiving a token refresh request. | |||
| refresh request made with the access token issued. | ||||
| In many cases it is desirable to issue access tokens with a shorter | In many cases it is desirable to issue access tokens with a shorter | |||
| lifetime than the duration of the authorization grant. However, it | lifetime than the duration of the authorization grant. However, it | |||
| may be undesirable to require the resource owner to authorize the | may be undesirable to require the resource owner to authorize the | |||
| request again. Instead, the authorization server issues a refresh | request again. Instead, the authorization server issues a refresh | |||
| token in addition to the access token. When the access token | token in addition to the access token. When the access token | |||
| expires, the client can request a new access token without involving | expires, the client can request a new access token without involving | |||
| the resource owner as long as the authorization grant is still valid. | the resource owner as long as the authorization grant is still valid. | |||
| The token refresh method is described in Section 4. | The token refresh method is described in Section 4. | |||
| 3.1. Authorization Endpoint | 3.1. Authorization Endpoint | |||
| Clients direct the resource owner to the authorization endpoint to | Clients direct the resource owner to the authorization endpoint to | |||
| approve their access request. Before granting access, the resource | approve their access request. Before granting access, the resource | |||
| owner first authenticate with the authorization server. The way in | owner first authenticates with the authorization server. The way in | |||
| which the authorization server authenticates the end user (e.g. | which the authorization server authenticates the end-user (e.g. | |||
| username and password login, OpenID, session cookies) and in which | username and password login, OpenID, session cookies) and in which | |||
| the authorization server obtains the end user's authorization, | the authorization server obtains the end-user's authorization, | |||
| including whether it uses a secure channel such as TLS/SSL, is beyond | including whether it uses a secure channel such as TLS/SSL, is beyond | |||
| the scope of this specification. However, the authorization server | the scope of this specification. However, the authorization server | |||
| MUST first verify the identity of the end user. | MUST first verify the identity of the end-user. | |||
| The URI of the authorization endpoint can be found in the service | The URI of the authorization endpoint can be found in the service | |||
| documentation, or can be obtained by the client by making an | documentation, or can be obtained by the client by making an | |||
| unauthorized protected resource request (from the "WWW-Authenticate" | unauthorized protected resource request (from the "WWW-Authenticate" | |||
| response header auth-uri (Section 6.1.2) attribute). | response header auth-uri (Section 6.1.2) attribute). | |||
| The authorization endpoint advertised by the resource server MAY | The authorization endpoint advertised by the resource server MAY | |||
| include a query components as defined by [RFC3986] section 3. | include a query component as defined by [RFC3986] section 3. | |||
| Since requests to the authorization endpoint result in user | Since requests to the authorization endpoint result in user | |||
| authentication and the transmission of sensitive values, the | authentication and the transmission of sensitive values, the | |||
| authorization server SHOULD require the use of a transport-layer | authorization server SHOULD require the use of a transport-layer | |||
| mechanism such as TLS or SSL (or a secure channel with equivalent | mechanism such as TLS/SSL (or a secure channel with equivalent | |||
| protections) when sending requests to the authorization endpoints. | protections) when sending requests to the authorization endpoints. | |||
| 3.2. Token Endpoint | 3.2. Token Endpoint | |||
| After obtaining authorization from the resource owner, clients | After obtaining authorization from the resource owner, clients | |||
| request an access token from the authorization server's token | request an access token from the authorization server's token | |||
| endpoint. | endpoint. | |||
| The URI of the token endpoint can be found in the service | The URI of the token endpoint can be found in the service | |||
| documentation, or can be obtained by the client by making an | documentation, or can be obtained by the client by making an | |||
| unauthorized protected resource request (from the "WWW-Authenticate" | unauthorized protected resource request (from the "WWW-Authenticate" | |||
| response header token-uri (Section 6.1.2) attribute). | response header token-uri (Section 6.1.2) attribute). | |||
| The token endpoint advertised by the resource server MAY include a | The token endpoint advertised by the resource server MAY include a | |||
| query components as defined by [RFC3986] section 3. | query component as defined by [RFC3986] section 3. | |||
| Since requests to the token endpoint result in the transmission of | Since requests to the token endpoint result in the transmission of | |||
| plain text credentials in the HTTP request and response, the | plain 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 | |||
| mechanism such as TLS or SSL (or a secure channel with equivalent | mechanism such as TLS/SSL (or a secure channel with equivalent | |||
| protections) when sending requests to the token endpoints. | protections) when sending requests to the token endpoints. | |||
| 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 with a value of "no-store" in any response | |||
| containing tokens, secrets, or other sensitive information. | containing tokens, secrets, or other sensitive information. | |||
| 3.3. Flow Parameters | 3.3. Flow Parameters | |||
| Clients should avoid making assumptions about the size of tokens and | The sizes of tokens and other values received from the authorization | |||
| other values received from the authorization server, which are left | server, are left undefined by this specification. Clients should | |||
| undefined by this specification. Servers should document the | avoid making assumptions about value sizes. Servers should document | |||
| expected size of any value they issue. | the expected size of any value they issue. | |||
| Unless otherwise noted, all the protocol parameter names and values | ||||
| are case sensitive. | ||||
| 3.4. Client Credentials | 3.4. Client Credentials | |||
| When requesting access from the authorization server, the client | When requesting access from the authorization server, the client | |||
| identifies itself using its authorization-server-issued client | identifies itself using its authorization-server-issued client | |||
| credentials. The client credentials include a client identifier and | credentials. The client credentials include a client identifier and | |||
| an OPTIONAL symmetric shared secret. The means through which the | an OPTIONAL symmetric shared secret. The means through which the | |||
| client obtains these credentials are beyond the scope of this | client obtains these credentials are beyond the scope of this | |||
| specification, but usually involve registration with the | specification, but usually involve registration with the | |||
| authorization server. | authorization server. | |||
| skipping to change at page 10, line 46 ¶ | skipping to change at page 10, line 50 ¶ | |||
| The client identifier is used by the authorization server to | The client identifier is used by the authorization server to | |||
| establish the identity of the client for the purpose of presenting | establish the identity of the client for the purpose of presenting | |||
| information to the resource owner prior to granting access, as well | information to the resource owner prior to granting access, as well | |||
| as for providing different service levels to different clients. They | as for providing different service levels to different clients. They | |||
| can also be used to block unauthorized clients from requesting | can also be used to block unauthorized clients from requesting | |||
| access. | access. | |||
| Due to the nature of some clients, authorization servers SHOULD NOT | Due to the nature of some clients, authorization servers SHOULD NOT | |||
| make assumptions about the confidentiality of client credentials | make assumptions about the confidentiality of client credentials | |||
| without establishing trust with the client operator. Authorization | without establishing trust with the client operator. Authorization | |||
| servers SHOULD NOT issue client secrets to the client incapable or | servers SHOULD NOT issue client secrets to clients incapable of | |||
| keeping their secrets confidential. | keeping their secrets confidential. | |||
| 3.5. User Delegation Flows | 3.5. User Delegation Flows | |||
| User delegation flows are used to grant client access to protected | User delegation flows are used to grant client access to protected | |||
| resources by the end user without sharing the end user credentials | resources by the end-user without sharing the end-user credentials | |||
| (e.g. a username and password) with the client. Instead, the end | (e.g. a username and password) with the client. Instead, the end- | |||
| user authenticates directly with the authorization server, and grants | user authenticates directly with the authorization server, and grants | |||
| client access to its protected resources. | client access to its protected resources. | |||
| 3.5.1. User-Agent Flow | 3.5.1. User-Agent Flow | |||
| The user-agent flow is a user delegation flow suitable for client | The user-agent flow is a user delegation flow suitable for client | |||
| applications residing in a user-agent, typically implemented in a | applications residing in a user-agent, typically implemented in a | |||
| browser using a scripting language such as JavaScript. The client is | browser using a scripting language such as JavaScript. These clients | |||
| capable of interacting with the end user's user-agent but is | cannot keep client secrets confidential and the authentication of the | |||
| incapable of receiving incoming requests from the authorization | client is based on the user-agent's same-origin policy. | |||
| server (incapable of acting as an HTTP server). | ||||
| Instead of receiving incoming requests, the client requests the | Unlike other flows in which the client makes separate authorization | |||
| authorization server to redirect the user-agent to another web server | and access token requests, the client received the access token as a | |||
| or local resource accessible to the browser which is capable of | result of the authorization request in the form of an HTTP | |||
| extracting the access token from the response and passing it to the | redirection. The client requests the authorization server to | |||
| client. | redirect the user-agent to another web server or local resource | |||
| accessible to the browser which is capable of extracting the access | ||||
| token from the response and passing it to the client. | ||||
| This user-agent flow does not utilize the client secret since the | This user-agent flow does not utilize the client secret since the | |||
| client executables reside on the end user's computer or device which | client executables reside on the end-user's computer or device which | |||
| makes the client secret accessible and exploitable. Because the | makes the client secret accessible and exploitable. Because the | |||
| client is incapable of receiving incoming requests, the access token | access token is encoded into the redirection URI, it may be exposed | |||
| is encoded into the redirection URI which exposes it to the end user | to the end-user and other applications residing on the computer or | |||
| and other applications residing on the computer or device. | device. | |||
| +----------+ Client Identifier +----------------+ | +----------+ Client Identifier +----------------+ | |||
| | |>---(A)-- & Redirection URI --->| | | | |>---(A)-- & Redirection URI --->| | | |||
| | | | | | | | | | | |||
| End <--+ - - - +----(B)-- User authenticates -->| Authorization | | End <--+ - - - +----(B)-- User authenticates -->| Authorization | | |||
| User | | | Server | | User | | | Server | | |||
| | |<---(C)-- Redirect URI --------<| | | | |<---(C)-- Redirect URI --------<| | | |||
| | Client | with Access Token | | | | Client | with Access Token | | | |||
| | in | (w/ Optional Refresh Token) +----------------+ | | in | (w/ Optional Refresh Token) +----------------+ | |||
| | Browser | in Fragment | | Browser | in Fragment | |||
| skipping to change at page 12, line 4 ¶ | skipping to change at page 12, line 22 ¶ | |||
| | in | (w/ Optional Refresh Token) +----------------+ | | in | (w/ Optional Refresh Token) +----------------+ | |||
| | Browser | in Fragment | | Browser | in Fragment | |||
| | | +----------------+ | | | +----------------+ | |||
| | |>---(D)-- Redirect URI -------->| | | | |>---(D)-- Redirect URI -------->| | | |||
| | | without Fragment | Web Server | | | | without Fragment | Web Server | | |||
| | | | with Client | | | | | with Client | | |||
| | (F) |<---(E)-- Web Page with -------<| Resource | | | (F) |<---(E)-- Web Page with -------<| Resource | | |||
| | Access | Script | | | | Access | Script | | | |||
| | Token | +----------------+ | | Token | +----------------+ | |||
| +----------+ | +----------+ | |||
| Figure 3 | Figure 3 | |||
| The user-agent flow illustrated in Figure 3 includes the following | The user-agent flow illustrated in Figure 3 includes the following | |||
| steps: | steps: | |||
| (A) The client sends the user-agent to the authorization server and | (A) The client sends the user-agent to the authorization server and | |||
| includes its client identifier and redirection URI in the | includes its client identifier and redirection URI in the | |||
| request. | request. | |||
| (B) The authorization server authenticates the end user (via the | (B) The authorization server authenticates the end-user (via the | |||
| user-agent) and establishes whether the end user grants or | user-agent) and establishes whether the end-user grants or | |||
| denies the client's access request. | denies the client's access request. | |||
| (C) Assuming the end user granted access, the authorization server | (C) Assuming the end-user granted access, the authorization server | |||
| redirects the user-agent to the redirection URI provided | redirects the user-agent to the redirection URI provided | |||
| earlier. The redirection URI includes the access token in the | earlier. The redirection URI includes the access token in the | |||
| URI fragment. | URI fragment. | |||
| (D) The user-agent follows the redirection instructions by making a | (D) The user-agent follows the redirection instructions by making a | |||
| request to the web server which does not include the fragment. | request to the web server which does not include the fragment. | |||
| The user-agent retains the fragment information locally. | The user-agent retains the fragment information locally. | |||
| (E) The web server returns a web page containing a script capable of | (E) The web server returns a web page containing a script capable of | |||
| extracting the access token from the URI fragment retained by | extracting the access token from the URI fragment retained by | |||
| the user-agent. | the user-agent. | |||
| (F) The user-agent executes the script provided by the web server | (F) The user-agent executes the script provided by the web server | |||
| which extracts the access token and passes it to the client. | which extracts the access token and passes it to the client. | |||
| 3.5.1.1. Client Requests Authorization | 3.5.1.1. Client Requests Authorization | |||
| In order for the end user to grant the client access, the client | In order for the end-user to grant the client access, the client | |||
| sends the end user to the authorization server. The client | sends the end-user to the authorization server. The client | |||
| constructs the request URI by adding the following URI query | constructs the request URI by adding the following URI query | |||
| parameters to the user authorization endpoint URI: | parameters to the user authorization endpoint URI: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to "user_agent" | REQUIRED. The parameter value MUST be set to "user_agent". | |||
| (case sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| 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. An | the client and authorization server via other means. An | |||
| absolute URI to which the authorization server will redirect | absolute URI to which the authorization server will redirect | |||
| the user-agent to when the end user authorization step is | the user-agent to when the end-user authorization step is | |||
| completed. The authorization server SOULD require the client | completed. The authorization server SHOULD require the client | |||
| to pre-register their redirection URI. The redirection URI | to pre-register their redirection URI. The redirection URI | |||
| MUST NOT includes a query component as defined by [RFC3986] | MUST NOT include a query component as defined by [RFC3986] | |||
| section 3 if the "state" parameter is present. | section 3 if the "state" parameter is present. | |||
| 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. | |||
| immediate | immediate | |||
| OPTIONAL. The parameter value must be set to "true" or "false" | OPTIONAL. The parameter value must be set to "true" or | |||
| (case sensitive). If set to "true", the authorization server | "false". If set to "true", the authorization server MUST NOT | |||
| MUST NOT prompt the end user to authenticate or approve access. | prompt the end-user to authenticate or approve access. | |||
| Instead, the authorization server attempts to establish the end | Instead, the authorization server attempts to establish the | |||
| user's identity via other means (e.g. browser cookies) and | end-user's identity via other means (e.g. browser cookies) and | |||
| checks if the end user has previously approved an identical | checks if the end-user has previously approved an identical | |||
| access request by the same client and if that access grant is | access request by the same client and if that access grant is | |||
| still active. If the authorization server does not support an | still active. If the authorization server does not support an | |||
| immediate check or if it is unable to establish the end user's | immediate check or if it is unable to establish the end-user's | |||
| identity or approval status, it MUST deny the request without | identity or approval status, it MUST deny the request without | |||
| prompting the end user. Defaults to "false" if omitted. | prompting the end-user. Defaults to "false" if omitted. | |||
| secret_type | secret_type | |||
| OPTIONAL. The access token secret type as described by | OPTIONAL. The access token secret type as described by | |||
| Section 5.3. If omitted, the authorization server will issue a | Section 5.3. If omitted, the authorization server will issue a | |||
| bearer token (an access token without a matching secret) as | bearer token (an access token without a matching secret) as | |||
| described by Section 5.2. | described by Section 5.2. | |||
| The client directs the end user to the constructed URI using an HTTP | The client directs the end-user to the constructed URI using an HTTP | |||
| redirection response, or by other means available to it via the end | redirection response, or by other means available to it via the end- | |||
| user's user-agent. The request MUST use the HTTP "GET" method. | user's user-agent. The request MUST use the HTTP "GET" method. | |||
| For example, the client directs the end user's user-agent to make the | For example, the client directs the end-user's user-agent to make the | |||
| following HTTPS request (line breaks are for display purposes only): | following HTTPS request (line breaks are for display purposes only): | |||
| GET /authorize?type=user_agent&client_id=s6BhdRkqt3& | GET /authorize?type=user_agent&client_id=s6BhdRkqt3& | |||
| redirect_uri=https%3A%2F%2FEexample%2Ecom%2Frd HTTP/1.1 | redirect_uri=https%3A%2F%2FEexample%2Ecom%2Frd HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| If the client has previously registered a redirection URI with the | If the client has previously registered a redirection URI with the | |||
| authorization server, the authorization server MUST verify that the | authorization server, the authorization server MUST verify that the | |||
| redirection URI received matches the registered URI associated with | redirection URI received matches the registered URI associated with | |||
| the client identifier. | the client identifier. | |||
| The authorization server authenticates the end user and obtains an | The authorization server authenticates the end-user and obtains an | |||
| authorization decision (by asking the end user or establishing | authorization decision (by asking the end-user or establishing | |||
| approval via other means). The authorization server sends the end | approval via other means). The authorization server sends the end- | |||
| user's user-agent to the provided client redirection URI using an | user's user-agent to the provided client redirection URI using an | |||
| HTTP redirection response. | HTTP redirection response. | |||
| 3.5.1.1.1. End User Grants Authorization | 3.5.1.1.1. End-user Grants Authorization | |||
| If the end user authorizes the access request, the authorization | If the end-user authorizes the access request, the authorization | |||
| server issues an access token and delivers it to the client by adding | server issues an access token and delivers it to the client by adding | |||
| the following parameters, using the | the following parameters, using the | |||
| "application/x-www-form-urlencoded" format as defined by | "application/x-www-form-urlencoded" format as defined by | |||
| [W3C.REC-html40-19980424], to the redirection URI fragment: | [W3C.REC-html40-19980424], to the redirection URI fragment: | |||
| access_token | access_token | |||
| REQUIRED. The access token. | REQUIRED. The access token. | |||
| expires_in | expires_in | |||
| OPTIONAL. The duration in seconds of the access token | OPTIONAL. The duration in seconds of the access token | |||
| skipping to change at page 14, line 36 ¶ | skipping to change at page 15, line 14 ¶ | |||
| 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. | |||
| access_token_secret | access_token_secret | |||
| REQUIRED if requested by the client. The corresponding access | REQUIRED if requested by the client. The corresponding access | |||
| token secret as requested by the client. | token secret as requested by the client. | |||
| For example, the authorization server redirects the end user's user- | For example, the authorization server redirects the end-user's user- | |||
| agent by sending the following HTTP response: | agent by sending the following HTTP response: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: http://example.com/rd#access_token=FJQbwq9&expires_in=3600 | Location: http://example.com/rd#access_token=FJQbwq9&expires_in=3600 | |||
| 3.5.1.1.2. End User Denies Authorization | 3.5.1.1.2. End-user Denies Authorization | |||
| If the end user denied the access request, the authorization server | If the end-user denied the access request, the authorization server | |||
| responds to the client by adding the following parameters, using the | responds to the client by adding the following parameters, using the | |||
| "application/x-www-form-urlencoded" format as defined by | "application/x-www-form-urlencoded" format as defined by | |||
| [W3C.REC-html40-19980424], to the redirection URI fragment: | [W3C.REC-html40-19980424], to the redirection URI fragment: | |||
| error | error | |||
| REQUIRED. The parameter value MUST be set to "user_denied" | REQUIRED. The parameter value MUST be set to "user_denied". | |||
| (case sensitive). | ||||
| 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 responds with the following: | For example, the authorization server responds with the following: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: http://example.com/rd#error=user_denied | Location: http://example.com/rd#error=user_denied | |||
| skipping to change at page 15, line 46 ¶ | skipping to change at page 16, line 21 ¶ | |||
| The HTTP response to the redirection request returns a web page | The HTTP response to the redirection request returns a web page | |||
| (typically an HTML page with an embedded script) capable of accessing | (typically an HTML page with an embedded script) capable of accessing | |||
| the full redirection URI including the fragment retained by the user- | the full redirection URI including the fragment retained by the user- | |||
| agent, and extracting the access token (and other parameters) | agent, and extracting the access token (and other parameters) | |||
| contained in the fragment. | contained in the fragment. | |||
| 3.5.2. Web Server Flow | 3.5.2. Web Server Flow | |||
| The web server flow is a user delegation flow suitable for clients | The web server flow is a user delegation flow suitable for clients | |||
| capable of interacting with the end user's user-agent (typically a | capable of interacting with the end-user's user-agent (typically a | |||
| web browser) and capable of receiving incoming requests from the | web browser) and capable of receiving incoming requests from the | |||
| authorization server (capable of acting as an HTTP server). | authorization server (capable of acting as an HTTP server). | |||
| +----------+ Client Identifier +---------------+ | +----------+ Client Identifier +---------------+ | |||
| | -+----(A)-- & Redirect URI ------->| | | | -+----(A)-- & Redirect URI ------->| | | |||
| | End User | | Authorization | | | End-user | | Authorization | | |||
| | at |<---(B)-- User authenticates --->| Server | | | at |<---(B)-- User authenticates --->| Server | | |||
| | Browser | | | | | Browser | | | | |||
| | -+----(C)-- Verification Code ----<| | | | -+----(C)-- Verification Code ----<| | | |||
| +-|----|---+ +---------------+ | +-|----|---+ +---------------+ | |||
| | | ^ v | | | ^ v | |||
| (A) (C) | | | (A) (C) | | | |||
| | | | | | | | | | | |||
| ^ v | | | ^ v | | | |||
| +---------+ | | | +---------+ | | | |||
| | |>---(D)-- Client Credentials, --------' | | | |>---(D)-- Client Credentials, --------' | | |||
| skipping to change at page 16, line 29 ¶ | skipping to change at page 17, line 5 ¶ | |||
| | Client | & Redirect URI | | | Client | & Redirect URI | | |||
| | | | | | | | | |||
| | |<---(E)------- Access Token -----------------' | | |<---(E)------- Access Token -----------------' | |||
| +---------+ (w/ Optional Refresh Token) | +---------+ (w/ Optional Refresh Token) | |||
| Figure 4 | Figure 4 | |||
| The web server flow illustrated in Figure 4 includes the following | The web server flow illustrated in Figure 4 includes the following | |||
| steps: | steps: | |||
| (A) The web client initiates the flow by redirecting the end user's | (A) The web client initiates the flow by redirecting the end-user's | |||
| user-agent to the authorization endpoint with its client | user-agent to the authorization endpoint with its client | |||
| identifier and a redirect URI to which the authorization server | identifier and a redirect URI to which the authorization server | |||
| will send the end user back once authorization is received (or | will send the end-user back once authorization is received (or | |||
| denied). | denied). | |||
| (B) The authorization server authenticates the end user (via the | (B) The authorization server authenticates the end-user (via the | |||
| user-agent) and establishes whether the end user grants or | user-agent) and establishes whether the end-user grants or | |||
| denies the client's access request. | denies the client's access request. | |||
| (C) Assuming the end user granted access, the authorization server | (C) Assuming the end-user granted access, the authorization server | |||
| redirects the user-agent back to the client to the redirection | redirects the user-agent back to the client to the redirection | |||
| URI provided earlier. The authorization includes a verification | URI provided earlier. The authorization includes a verification | |||
| code for the client to use to obtain an access token. | code for the client to use to obtain an access token. | |||
| (D) The client requests an access token from the authorization | (D) The client requests an access token from the authorization | |||
| server by including its client credentials (identifier and | server by including its client credentials (identifier and | |||
| secret), as well as the verification code received in the | secret), as well as the verification code received in the | |||
| previous step. | previous step. | |||
| (E) The authorization server validates the client credentials and | (E) The authorization server validates the client credentials and | |||
| the verification code and responds back with the access token. | the verification code and responds back with the access token. | |||
| 3.5.2.1. Client Requests Authorization | 3.5.2.1. Client Requests Authorization | |||
| In order for the end user to grant the client access, the client | In order for the end-user to grant the client access, the client | |||
| sends the end user to the authorization server. The client | sends the end-user to the authorization server. The client | |||
| constructs the request URI by adding the following URI query | constructs the request URI by adding the following URI query | |||
| parameters to the user authorization endpoint URI: | parameters to the user authorization endpoint URI: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to "web_server" | REQUIRED. The parameter value MUST be set to "web_server". | |||
| (case sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| 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. An | the client and authorization server via other means. An | |||
| absolute URI to which the authorization server will redirect | absolute URI to which the authorization server will redirect | |||
| the user-agent to when the end user authorization step is | the user-agent to when the end-user authorization step is | |||
| completed. The authorization server MAY require the client to | completed. The authorization server MAY require the client to | |||
| pre-register their redirection URI. The redirection URI MUST | pre-register their redirection URI. The redirection URI MUST | |||
| NOT includes a query component as defined by [RFC3986] section | NOT include a query component as defined by [RFC3986] section 3 | |||
| 3 if the "state" parameter is present. | if the "state" parameter is present. | |||
| 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. | |||
| immediate | immediate | |||
| OPTIONAL. The parameter value must be set to "true" or "false" | OPTIONAL. The parameter value must be set to "true" or | |||
| (case sensitive). If set to "true", the authorization server | "false". If set to "true", the authorization server MUST NOT | |||
| MUST NOT prompt the end user to authenticate or approve access. | prompt the end-user to authenticate or approve access. | |||
| Instead, the authorization server attempts to establish the end | Instead, the authorization server attempts to establish the | |||
| user's identity via other means (e.g. browser cookies) and | end-user's identity via other means (e.g. browser cookies) and | |||
| checks if the end user has previously approved an identical | checks if the end-user has previously approved an identical | |||
| access request by the same client and if that access grant is | access request by the same client and if that access grant is | |||
| still active. If the authorization server does not support an | still active. If the authorization server does not support an | |||
| immediate check or if it is unable to establish the end user's | immediate check or if it is unable to establish the end-user's | |||
| identity or approval status, it MUST deny the request without | identity or approval status, it MUST deny the request without | |||
| prompting the end user. Defaults to "false" if omitted. | prompting the end-user. Defaults to "false" if omitted. | |||
| The client directs the end user to the constructed URI using an HTTP | The client directs the end-user to the constructed URI using an HTTP | |||
| redirection response, or by other means available to it via the end | redirection response, or by other means available to it via the end- | |||
| user's user-agent. The request MUST use the HTTP "GET" method. | user's user-agent. The request MUST use the HTTP "GET" method. | |||
| For example, the client directs the end user's user-agent to make the | For example, the client directs the end-user's user-agent to make the | |||
| following HTTPS requests (line breaks are for display purposes only): | following HTTPS requests (line breaks are for display purposes only): | |||
| GET /authorize?type=web_server&client_id=s6BhdRkqt3&redirect_uri= | GET /authorize?type=web_server&client_id=s6BhdRkqt3&redirect_uri= | |||
| https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 | https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| If the client has previously registered a redirection URI with the | If the client has previously registered a redirection URI with the | |||
| authorization server, the authorization server MUST verify that the | authorization server, the authorization server MUST verify that the | |||
| redirection URI received matches the registered URI associated with | redirection URI received matches the registered URI associated with | |||
| the client identifier. | the client identifier. | |||
| The authorization server authenticates the end user and obtains an | The authorization server authenticates the end-user and obtains an | |||
| authorization decision (by asking the end user or establishing | authorization decision (by asking the end-user or establishing | |||
| approval via other means). The authorization server sends the end | approval via other means). The authorization server sends the end- | |||
| user's user-agent to the provided client redirection URI using an | user's user-agent to the provided client redirection 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 | |||
| end user's user-agent. | end-user's user-agent. | |||
| 3.5.2.1.1. End User Grants Authorization | 3.5.2.1.1. End-user Grants Authorization | |||
| If the end user authorizes the access request, the authorization | If the end-user authorizes the access request, the authorization | |||
| server generates a verification code and associates it with the | server generates a verification code and associates it with the | |||
| client identifier and redirection URI. The authorization server | client identifier and redirection URI. The authorization server | |||
| constructs the request URI by adding the following parameters to the | constructs the request URI by adding the following parameters to the | |||
| query component of redirection URI provided by the client: | query component of redirection URI provided by the client: | |||
| code | code | |||
| REQUIRED. The verification code generated by the authorization | REQUIRED. The verification code generated by the authorization | |||
| server. | server. | |||
| 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. | |||
| The verification code SHOULD expire shortly after it is issued and | The verification code should expire shortly after it is issued and | |||
| allowed for a single use. | allowed for a single use. | |||
| For example, the authorization server redirects the end user's user- | For example, the authorization server redirects the end-user's user- | |||
| agent by sending the following HTTP response: | agent by 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 | |||
| In turn, the end user's user-agent makes the following HTTPS "GET" | In turn, the end-user's user-agent makes the following HTTPS "GET" | |||
| request: | request: | |||
| GET /cb?code=i1WsRn1uB1 HTTP/1.1 | GET /cb?code=i1WsRn1uB1 HTTP/1.1 | |||
| Host: client.example.com | Host: client.example.com | |||
| 3.5.2.1.2. End User Denies Authorization | 3.5.2.1.2. End-user Denies Authorization | |||
| If the end user denied the access request, the authorization server | If the end-user denied the access request, the authorization server | |||
| constructs the request URI by adding the following parameters to the | constructs the request URI by adding the following parameters to the | |||
| query component of the redirection URI provided by the client: | query component of the redirection URI provided by the client: | |||
| error | error | |||
| REQUIRED. The parameter value MUST be set to "user_denied" | REQUIRED. The parameter value MUST be set to "user_denied". | |||
| (case sensitive). | ||||
| 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 directs the client to make the | For example, the authorization server directs the client to make the | |||
| following HTTP request: | following HTTP request: | |||
| GET /cb?error=user_denied HTTP/1.1 | GET /cb?error=user_denied HTTP/1.1 | |||
| skipping to change at page 19, line 42 ¶ | skipping to change at page 20, line 15 ¶ | |||
| The authorization flow concludes unsuccessfully. | The authorization flow concludes unsuccessfully. | |||
| 3.5.2.2. Client Requests Access Token | 3.5.2.2. Client Requests Access Token | |||
| The client obtains an access token from the authorization server by | The client obtains an access token from the authorization server by | |||
| making an HTTP "POST" request to the token endpoint. The client | making an HTTP "POST" request to the token endpoint. The client | |||
| constructs a request URI by adding the following parameters to the | constructs a request URI by adding the following parameters to the | |||
| request: | request: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to "web_server" | REQUIRED. The parameter value MUST be set to "web_server". | |||
| (case sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| client_secret | client_secret | |||
| REQUIRED if the client identifier has a matching secret. The | REQUIRED if the client identifier has a matching secret. The | |||
| client secret as described in Section 3.4. | client secret as described in Section 3.4. | |||
| code | code | |||
| REQUIRED. The verification code received from the | REQUIRED. The verification code received from the | |||
| skipping to change at page 21, line 7 ¶ | skipping to change at page 21, line 19 ¶ | |||
| access_token | access_token | |||
| REQUIRED. The access token issued by the authorization server. | REQUIRED. The access token issued by the authorization server. | |||
| expires_in | expires_in | |||
| OPTIONAL. The duration in seconds of the access token | OPTIONAL. The duration in seconds of the access token | |||
| lifetime. | lifetime. | |||
| refresh_token | refresh_token | |||
| OPTIONAL. The refresh token used to obtain new access tokens | OPTIONAL. The refresh token used to obtain new access tokens | |||
| using the same end user access grant as described in Section 4. | using the same end-user access grant as described in Section 4. | |||
| access_token_secret | access_token_secret | |||
| REQUIRED if requested by the client. The corresponding access | REQUIRED if requested by the client. The corresponding access | |||
| token secret as requested by the client. | token secret as requested by the client. | |||
| For example: | For example: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| skipping to change at page 21, line 29 ¶ | skipping to change at page 21, line 41 ¶ | |||
| If the request is invalid, the authorization server returns an error | If the request is invalid, the authorization server returns an error | |||
| message in the HTTP response body using the | message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | |||
| The response contains the following parameter: | The response contains the following parameter: | |||
| error | error | |||
| OPTIONAL. The parameter value MUST be set to either | OPTIONAL. The parameter value MUST be set to either | |||
| "redirect_uri_mismatch" or "expired_verification_code" (case | "redirect_uri_mismatch", "bad_verification_code", | |||
| sensitive). | "incorrect_client_credentials". | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=expired_verification_code | error=bad_verification_code | |||
| 3.5.3. Device Flow | 3.5.3. Device Flow | |||
| The device flow is a user delegation flow suitable for clients | The device flow is a user delegation flow suitable for clients | |||
| executing on devices which do not have an easy data-entry method | executing on devices which do not have an easy data-entry method | |||
| (e.g. game consoles or media hub), but where the end user has | (e.g. game consoles or media hub), but where the end-user has | |||
| separate access to a user-agent on another computer or device (e.g. | separate access to a user-agent on another computer or device (e.g. | |||
| home computer, a laptop, or a smartphone). The client is incapable | home computer, a laptop, or a smartphone). The client is incapable | |||
| of receiving incoming requests from the authorization server | of receiving incoming requests from the authorization server | |||
| (incapable of acting as an HTTP server). | (incapable of acting as an HTTP server). | |||
| Instead of interacting with the end user's user-agent, the client | Instead of interacting with the end-user's user-agent, the client | |||
| instructs the end user to use another computer or device and connect | instructs the end-user to use another computer or device and connect | |||
| to the authorization server to approve the access request. Since the | to the authorization server to approve the access request. Since the | |||
| client cannot receive incoming requests, it polls the authorization | client cannot receive incoming requests, it polls the authorization | |||
| server repeatedly until the end user completes the approval process. | server repeatedly until the end-user completes the approval process. | |||
| This device flow does not utilize the client secret since the client | This device flow does not utilize the client secret since the client | |||
| executables reside on a local device which makes the client secret | executables reside on a local device which makes the client secret | |||
| accessible and exploitable. | accessible and exploitable. | |||
| +----------+ +----------------+ | +----------+ +----------------+ | |||
| | |>---(A)-- Client Identifier --->| | | | |>---(A)-- Client Identifier --->| | | |||
| | | | | | | | | | | |||
| | |<---(B)-- Verification Code, --<| | | | |<---(B)-- Verification Code, --<| | | |||
| | | User Code, | | | | | User Code, | | | |||
| skipping to change at page 22, line 32 ¶ | skipping to change at page 22, line 45 ¶ | |||
| | |>---(E)---> | | | | |>---(E)---> | | | |||
| | | | Authorization | | | | | Authorization | | |||
| | |<---(F)-- Access Token --------<| Server | | | |<---(F)-- Access Token --------<| Server | | |||
| +----------+ (w/ Optional Refresh Token) | | | +----------+ (w/ Optional Refresh Token) | | | |||
| v | | | v | | | |||
| : | | | : | | | |||
| (C) User Code & Verification URI | | | (C) User Code & Verification URI | | | |||
| : | | | : | | | |||
| v | | | v | | | |||
| +----------+ | | | +----------+ | | | |||
| | End User | | | | | End-user | | | | |||
| | at |<---(D)-- User authenticates -->| | | | at |<---(D)-- User authenticates -->| | | |||
| | Browser | | | | | Browser | | | | |||
| +----------+ +----------------+ | +----------+ +----------------+ | |||
| Figure 5 | Figure 5 | |||
| The device flow illustrated in Figure 5 includes the following steps: | The device flow illustrated in Figure 5 includes the following steps: | |||
| (A) The client requests access from the authorization server and | (A) The client requests access from the authorization server and | |||
| includes its client identifier in the request. | includes its client identifier in the request. | |||
| (B) The authorization server issues a verification code, a user | (B) The authorization server issues a verification code, a user | |||
| code, and provides the end user authorization URI. | code, and provides the end-user authorization URI. | |||
| (C) The client instructs the end user to use its user-agent | (C) The client instructs the end-user to use its user-agent | |||
| (elsewhere) and visit the provided authorization URI. The | (elsewhere) and visit the provided authorization URI. The | |||
| client provides the user with the user code to enter in order to | client provides the user with the user code to enter in order to | |||
| grant access. | grant access. | |||
| (D) The authorization server authenticates the end user (via the | (D) The authorization server authenticates the end-user (via the | |||
| user-agent) and prompts the end user to grant the client's | user-agent) and prompts the end-user to grant the client's | |||
| access request by entering the user code provided by the client. | access request by entering the user code provided by the client. | |||
| (E) While the end user authorizes (or denies) the client's request | (E) While the end-user authorizes (or denies) the client's request | |||
| (D), the client repeatedly polls the authorization server to | (D), the client repeatedly polls the authorization server to | |||
| find out if the end user completed the user authorization step. | find out if the end-user completed the user authorization step. | |||
| The client includes the verification code and its client | The client includes the verification code and its client | |||
| identifier. | identifier. | |||
| (F) Assuming the end user granted access, the authorization server | (F) Assuming the end-user granted access, the authorization server | |||
| validates the verification code provided by the client and | validates the verification code provided by the client and | |||
| responds back with the access token. | responds back with the access token. | |||
| 3.5.3.1. Client Requests Authorization | 3.5.3.1. Client Requests Authorization | |||
| The client initiates the flow by requesting a set of verification | The client initiates the flow by requesting a set of verification | |||
| codes from the authorization server by making an HTTP "GET" request | codes from the authorization server by making an HTTP "GET" request | |||
| to the authorization endpoint. The client constructs a request URI | to the token endpoint. The client constructs a request URI by adding | |||
| by adding the following parameters to the request: | the following parameters to the request: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to 'device' (case | REQUIRED. The parameter value MUST be set to "device_code". | |||
| sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| For example, the client makes the following HTTPS request (line | For example, the client makes the following HTTPS request (line | |||
| breaks are for display purposes only): | breaks are for display purposes only): | |||
| GET /authorize?type=device&client_id=s6BhdRkqt3 | GET /token?type=device_code&client_id=s6BhdRkqt3 | |||
| HTTP/1.1 | HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| In response, the authorization server generates a verification code | In response, the authorization server generates a verification code | |||
| and a user code and includes them in the HTTP response body using the | and a user code and includes them in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" format as defined by | "application/x-www-form-urlencoded" format as defined by | |||
| [W3C.REC-html40-19980424] with a 200 status code (OK). The response | [W3C.REC-html40-19980424] with a 200 status code (OK). The response | |||
| contains the following parameters: | contains the following parameters: | |||
| code | code | |||
| skipping to change at page 24, line 26 ¶ | skipping to change at page 24, line 35 ¶ | |||
| interval | interval | |||
| OPTIONAL. The minimum amount of time in seconds that the | OPTIONAL. The minimum amount of time in seconds that the | |||
| client SHOULD wait between polling requests to the token | client SHOULD wait between polling requests to the token | |||
| endpoint. | endpoint. | |||
| For example (line breaks are for display purposes only): | For example (line breaks are for display purposes only): | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| device_code=74tq5miHKB&user_code=94248&user_uri=http%3A%2F%2 | code=74tq5miHKB&user_code=94248&user_uri=http%3A%2F%2 | |||
| Fwww%2Eexample%2Ecom%2Fdevice&interval=5 | Fwww%2Eexample%2Ecom%2Fdevice&interval=5 | |||
| The client displays the user code and the user authorization URI to | The client displays the user code and the user authorization URI to | |||
| the end-user, and instructs the end user to visit the URI using a | the end-user, and instructs the end-user to visit the URI using a | |||
| user-agent and enter the user code. | user-agent and enter the user code. | |||
| The end user manually types the provided URI and authenticates with | The end-user manually types the provided URI and authenticates with | |||
| the authorization server. The authorization server prompts the end | the authorization server. The authorization server prompts the end- | |||
| user to authorize the client's request by entering the user code | user to authorize the client's request by entering the user code | |||
| provided by the client. Once the end user approves or denies the | provided by the client. Once the end-user approves or denies the | |||
| request, the authorization server informs the end user to return to | request, the authorization server informs the end-user to return to | |||
| the device for further instructions. | the device for further instructions. | |||
| 3.5.3.2. Client Requests Access Token | 3.5.3.2. Client Requests Access Token | |||
| Since the client is unable to receive incoming requests from the | Since the client is unable to receive incoming requests from the | |||
| authorization server, it polls the authorization server repeatedly | authorization server, it polls the authorization server repeatedly | |||
| until the end user grants or denies the request, or the verification | until the end-user grants or denies the request, or the verification | |||
| code expires. | code expires. | |||
| The client makes the following request at an arbitrary but reasonable | The client makes the following request at an arbitrary but reasonable | |||
| interval which MUST NOT exceed the minimum interval rate provided by | interval which MUST NOT exceed the minimum interval rate provided by | |||
| the authorization server (if present via the "interval" parameter). | the authorization server (if present via the "interval" parameter). | |||
| Alternatively, the client MAY provide a user interface for the end | Alternatively, the client MAY provide a user interface for the end- | |||
| user to manually inform it when authorization was granted. | user to manually inform it when authorization was granted. | |||
| The client requests an access token by making an HTTP "GET" request | The client requests an access token by making an HTTP "GET" request | |||
| to the token endpoint. The client constructs a request URI by adding | to the token endpoint. The client constructs a request URI by adding | |||
| the following parameters to the request: | the following parameters to the request: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to 'device' (case | REQUIRED. The parameter value MUST be set to "device_token". | |||
| sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| code | code | |||
| The verification code received from the authorization server. | The verification code received from the authorization server. | |||
| secret_type | secret_type | |||
| OPTIONAL. The access token secret type as described by | OPTIONAL. The access token secret type as described by | |||
| Section 5.3. If omitted, the authorization server will issue a | Section 5.3. If omitted, the authorization server will issue a | |||
| bearer token (an access token without a matching secret) as | bearer token (an access token without a matching secret) as | |||
| described by Section 5.2. | described by Section 5.2. | |||
| For example, the client makes the following HTTPS request (line | For example, the client makes the following HTTPS request (line | |||
| breaks are for display purposes only): | breaks are for display purposes only): | |||
| GET /token?type=device&client_id=s6BhdRkqt3 | GET /token?type=device_token&client_id=s6BhdRkqt3 | |||
| &code=J2vC42OifV HTTP/1.1 | &code=J2vC42OifV HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| 3.5.3.2.1. End User Grants Authorization | 3.5.3.2.1. End-user Grants Authorization | |||
| If the end user authorized the request, the authorization server | If the end-user authorized the request, the authorization server | |||
| issues an access token and delivers it to the client by including it | issues an access token and delivers it to the client by including it | |||
| in the HTTP response body using the | in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 200 status code (OK). The response | [W3C.REC-html40-19980424] with a 200 status code (OK). The response | |||
| contains the following parameters: | contains the following parameters: | |||
| access_token | access_token | |||
| REQUIRED. The access token. | REQUIRED. The access token. | |||
| expires_in | expires_in | |||
| skipping to change at page 26, line 16 ¶ | skipping to change at page 26, line 26 ¶ | |||
| REQUIRED if requested by the client. The corresponding access | REQUIRED if requested by the client. The corresponding access | |||
| token secret as requested by the client. | token secret as requested by the client. | |||
| For example: | For example: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| access_token=FJQbwq9OD8&expires_in=3600 | access_token=FJQbwq9OD8&expires_in=3600 | |||
| 3.5.3.2.2. End User Denies Authorization | 3.5.3.2.2. End-user Denies Authorization | |||
| If the end user denied the request, the authorization server provides | If the end-user denied the request, the authorization server provides | |||
| the client with the error message in the HTTP response body using the | the client with the error message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). The | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). The | |||
| response contains the following parameters: | response contains the following parameters: | |||
| error | error | |||
| REQUIRED. Value must be set to "authorization_declined". | REQUIRED. Value must be set to "authorization_declined". | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=authorization_declined | error=authorization_declined | |||
| 3.5.3.2.3. End User Authorization Pending or Expired | 3.5.3.2.3. End-user Authorization Pending or Expired | |||
| If the end user authorization is pending or expired without receiving | If the end-user authorization is pending or expired without receiving | |||
| any response from the end user, or the client is exceeding the | any response from the end-user, or the client is exceeding the | |||
| allowed polling interval, the authorization server provides the | allowed polling interval, the authorization server provides the | |||
| client with the error message in the HTTP response body using the | client with the error message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). The | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). The | |||
| response contains the following parameters: | response contains the following parameters: | |||
| error | error | |||
| REQUIRED. Value MUST be set to "authorization_pending", | REQUIRED. Value MUST be set to "authorization_pending", | |||
| "slow_down", or "code_expired" (case sensitive). | "slow_down", or "code_expired". | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=authorization_pending | error=authorization_pending | |||
| 3.6. End User Credentials Flows | 3.6. End-user Credentials Flows | |||
| End user credential flows are used to grant client access to | End-user credential flows are used to grant client access to | |||
| protected resources by the end user directly sharing the end user | protected resources by the end-user directly sharing the end-user's | |||
| credentials (typically a username and password) with the client. | username and password with the client. Unlike user delegation flows, | |||
| Unlike user delegation flows, end user credentials flows require a | end-user credentials flows require a much higher degree of trust | |||
| much higher degree of trust between the client and end user. | between the client and end-user. | |||
| These flows are suitable in cases where the end user already has a | These flows are suitable in cases where the end-user already has a | |||
| trust relationship with the client, such as its computer operating | trust relationship with the client, such as its computer operating | |||
| system or highly privileged applications. Authorization servers | system or highly privileged applications. Authorization servers | |||
| SHOULD take special care when enabling user credentials flows, and | SHOULD take special care when enabling user credentials flows, and | |||
| SHOULD only do so when other delegation flows are not viable. | SHOULD only do so when other delegation flows are not viable. | |||
| However, unlike the HTTP Basic authentication scheme defined in | However, unlike the HTTP Basic authentication scheme defined in | |||
| [RFC2617], the end user's credentials are used in a single request | [RFC2617], the end-user's credentials are used in a single request | |||
| and are exchanged for an access token and refresh token which | and are exchanged for an access token and refresh token which | |||
| eliminates the client need to store them for future use. | eliminates the client need to store them for future use. | |||
| 3.6.1. Username and Password Flow | 3.6.1. Username and Password Flow | |||
| The username and password flow is an end user credentials flow | The username and password flow is an end-user credentials flow | |||
| suitable for clients capable of asking end users for their usernames | suitable for clients capable of asking end users for their usernames | |||
| and passwords. It is also used to migrate existing clients using | and passwords. It is also used to migrate existing clients using | |||
| direct authentication schemes such as HTTP Basic or Digest | direct authentication schemes such as HTTP Basic or Digest | |||
| authentication to OAuth by converting the end user credentials stored | authentication to OAuth by converting the end-user credentials stored | |||
| with tokens. | with tokens. | |||
| The methods through which the client prompts end users for their | The methods through which the client prompts end users for their | |||
| usernames and passwords is beyond the scope of this specification. | usernames and passwords is beyond the scope of this specification. | |||
| The client MUST discard the usernames and passwords once an access | The client MUST discard the usernames and passwords once an access | |||
| token has been obtained. | token has been obtained. | |||
| End User | End-user | |||
| v | v | |||
| : | : | |||
| (A) | (A) | |||
| : | : | |||
| v | v | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| | | Client Credentials | | | | | Client Credentials | | | |||
| | |>--(B)--- & User Credentials ---->| Authorization | | | |>--(B)--- & User Credentials ---->| Authorization | | |||
| | Client | | Server | | | Client | | Server | | |||
| | |<--(C)---- Access Token ---------<| | | | |<--(C)---- Access Token ---------<| | | |||
| | | (w/ Optional Refresh Token) | | | | | (w/ Optional Refresh Token) | | | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| Figure 6 | Figure 6 | |||
| The username and password flow illustrated in Figure 6 includes the | The username and password flow illustrated in Figure 6 includes the | |||
| following steps: | following steps: | |||
| (A) The end user provides the client with its username and password. | (A) The end-user provides the client with its username and password. | |||
| (B) The client sends an access token request to the authorization | (B) The client sends an access token request to the authorization | |||
| server and includes its client identifier and client secret, and | server and includes its client identifier and client secret, and | |||
| the end user's username and password. | the end-user's username and password. | |||
| (C) The authorization server validates the end user credentials and | (C) The authorization server validates the end-user credentials and | |||
| the client credentials and issues an access token. | the client credentials and issues an access token. | |||
| 3.6.1.1. Client Requests Access Token | 3.6.1.1. Client Requests Access Token | |||
| The client requests an access token by making an HTTP "POST" request | The client requests an access token by making an HTTP "POST" request | |||
| to the token endpoint. The client constructs a request URI by adding | to the token endpoint. The client constructs a request URI by adding | |||
| the following parameters to the request: | the following parameters to the request: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to 'username' (case | REQUIRED. The parameter value MUST be set to "username". | |||
| sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| client_secret | client_secret | |||
| REQUIRED. The client secret as described in Section 3.4. | REQUIRED. The client secret as described in Section 3.4. | |||
| OPTIONAL if no client secret was issued. | OPTIONAL if no client secret was issued. | |||
| username | username | |||
| REQUIRED. The end user's username. | REQUIRED. The end-user's username. | |||
| password | password | |||
| REQUIRED. The end user's password. | REQUIRED. The end-user's password. | |||
| secret_type | secret_type | |||
| OPTIONAL. The access token secret type as described by | OPTIONAL. The access token secret type as described by | |||
| Section 5.3. If omitted, the authorization server will issue a | Section 5.3. If omitted, the authorization server will issue a | |||
| bearer token (an access token without a matching secret) as | bearer token (an access token without a matching secret) as | |||
| described by Section 5.2. | described by Section 5.2. | |||
| For example, the client makes the following HTTPS request (line | For example, the client makes the following HTTPS request (line | |||
| breaks are for display purposes only): | breaks are for display purposes only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| type=username&client_id=s6BhdRkqt3&client_secret= | type=username&client_id=s6BhdRkqt3&client_secret= | |||
| 47HDu8s&username=johndoe&password=A3ddj3w | 47HDu8s&username=johndoe&password=A3ddj3w | |||
| The authorization server MUST validate the client credentials and end | The authorization server MUST validate the client credentials and | |||
| user credentials and if valid issue an access token and deliver to | end-user credentials and if valid issue an access token and deliver | |||
| the client in the HTTP response body using the | to the client in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 200 status code (OK). | [W3C.REC-html40-19980424] with a 200 status code (OK). | |||
| The response contains the following parameters: | The response contains the following parameters: | |||
| access_token | access_token | |||
| REQUIRED. The access token. | REQUIRED. The access token. | |||
| expires_in | expires_in | |||
| OPTIONAL. The duration in seconds of the access token | OPTIONAL. The duration in seconds of the access token | |||
| skipping to change at page 30, line 21 ¶ | skipping to change at page 30, line 21 ¶ | |||
| If the request is invalid, the authorization server returns an error | If the request is invalid, the authorization server returns an error | |||
| message in the HTTP response body using the | message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | |||
| The response contains the following parameter: | The response contains the following parameter: | |||
| error | error | |||
| OPTIONAL. The parameter value MUST be set to either | OPTIONAL. The parameter value MUST be set to either | |||
| "incorrect_credentials" or "unauthorized_client" (case | "incorrect_client_credentials" or "unauthorized_client" (the | |||
| sensitive). | client is not permitted to use this flow). | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=incorrect_credentials | error=incorrect_client_credentials | |||
| 3.7. Autonomous Client Flows | 3.7. Autonomous Client Flows | |||
| Autonomous client flows are used to grant client access to protected | Autonomous client flows are used to grant client access to protected | |||
| resources controlled by the client (i.e. the client is the resource | resources controlled by the client (i.e. the client is the resource | |||
| owner). For example, these flows are useful when a service provides | owner). For example, these flows are useful when a service provides | |||
| both client-specific resources in addition to end user resources. | both client-specific resources in addition to end-user resources. | |||
| 3.7.1. Client Credentials Flow | 3.7.1. Client Credentials Flow | |||
| The client credentials flow is used when the client acts autonomously | The client credentials flow is used when the client acts autonomously | |||
| without acting on behalf of a separate resource owner. The client | without acting on behalf of a separate resource owner. The client | |||
| secret is assumed to be high-entropy since it is not designed to be | secret is assumed to be high-entropy since it is not designed to be | |||
| memorize by an end user. | memorized by an end-user. | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| | | | | | | | | | | |||
| | |>--(A)--- Client Credentials ---->| Authorization | | | |>--(A)--- Client Credentials ---->| Authorization | | |||
| | Client | | Server | | | Client | | Server | | |||
| | |<--(B)---- Access Token ---------<| | | | |<--(B)---- Access Token ---------<| | | |||
| | | (w/ Optional Refresh Token) | | | | | (w/ Optional Refresh Token) | | | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| Figure 7 | Figure 7 | |||
| skipping to change at page 31, line 31 ¶ | skipping to change at page 31, line 31 ¶ | |||
| (B) The authorization server validates the client credentials and | (B) The authorization server validates the client credentials and | |||
| issues an access token. | issues an access token. | |||
| 3.7.1.1. Client Requests Access Token | 3.7.1.1. Client Requests Access Token | |||
| The client requests an access token by making an HTTP "POST" request | The client requests an access token by making an HTTP "POST" request | |||
| to the token endpoint. The client constructs a request URI by adding | to the token endpoint. The client constructs a request URI by adding | |||
| the following parameters to the request: | the following parameters to the request: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to 'client_cred' | REQUIRED. The parameter value MUST be set to | |||
| (case sensitive). | "client_credentials". | |||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| client_secret | client_secret | |||
| REQUIRED. The client secret as described in Section 3.4. | REQUIRED. The client secret as described in Section 3.4. | |||
| secret_type | secret_type | |||
| OPTIONAL. The access token secret type as described by | OPTIONAL. The access token secret type as described by | |||
| Section 5.3. If omitted, the authorization server will issue a | Section 5.3. If omitted, the authorization server will issue a | |||
| bearer token (an access token without a matching secret) as | bearer token (an access token without a matching secret) as | |||
| described by Section 5.2. | described by Section 5.2. | |||
| For example, the client makes the following HTTPS request (line | For example, the client makes the following HTTPS request (line | |||
| breaks are for display purposes only): | breaks are for display purposes only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| type=client_cred&client_id=s6BhdRkqt3&client_secret=47HDu8s | type=client_credentials&client_id=s6BhdRkqt3&client_secret=47HDu8s | |||
| The authorization server MUST validate the client credentials and if | The authorization server MUST validate the client credentials and if | |||
| valid issue an access token and deliver to the client in the HTTP | valid issue an access token and deliver to the client in the HTTP | |||
| response body using the "application/x-www-form-urlencoded" content | response body using the "application/x-www-form-urlencoded" content | |||
| type as defined by [W3C.REC-html40-19980424] with a 200 status code | type as defined by [W3C.REC-html40-19980424] with a 200 status code | |||
| (OK). | (OK). | |||
| The response contains the following parameters: | The response contains the following parameters: | |||
| access_token | access_token | |||
| skipping to change at page 33, line 6 ¶ | skipping to change at page 33, line 6 ¶ | |||
| access_token=FJQbwq9OD8 | access_token=FJQbwq9OD8 | |||
| If the request is invalid, the authorization server returns an error | If the request is invalid, the authorization server returns an error | |||
| message in the HTTP response body using the | message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | |||
| The response contains the following parameter: | The response contains the following parameter: | |||
| error | error | |||
| OPTIONAL. The parameter value MUST be set to either | OPTIONAL. The parameter value MUST be set to | |||
| "incorrect_credentials" or "unauthorized_client" (case | "incorrect_client_credentials". | |||
| sensitive). | ||||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=incorrect_credentials | error=incorrect_client_credentials | |||
| 3.7.2. Assertion Flow | 3.7.2. Assertion Flow | |||
| The assertion flow requires the client to obtain a assertion such as | The assertion flow is used when a client wishes to exchange an | |||
| a SAML [OASIS.saml-core-2.0-os] assertion from an assertion issuer | existing security token or assertion for an access token. This flow | |||
| prior to initiating the flow. The process in which the assertion is | is suitable when the client is acting autonomously or on behalf of | |||
| obtained is defined by the assertion issuer and the authorization | the end-user (based on the content of the assertion used). | |||
| server, and is beyond the scope of this specification. | ||||
| The assertion flow requires the client to obtain a assertion (such as | ||||
| a SAML [OASIS.saml-core-2.0-os] assertion) from an assertion issuer | ||||
| or to self-issue an assertion prior to initiating the flow. The | ||||
| assertion format, the process by which the assertion is obtained, and | ||||
| the method of validating the assertion are defined by the assertion | ||||
| issuer and the authorization server, and are beyond the scope of this | ||||
| specification. | ||||
| The client credentials flow is used when the client acts autonomously | The client credentials flow is used when the client acts autonomously | |||
| without acting on behalf of a separate resource owner. | without acting on behalf of a separate resource owner. | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| | | | | | | | | | | |||
| | |>--(A)------ Assertion ---------->| Authorization | | | |>--(A)------ Assertion ---------->| Authorization | | |||
| | Client | | Server | | | Client | | Server | | |||
| | |<--(B)---- Access Token ---------<| | | | |<--(B)---- Access Token ---------<| | | |||
| | | (w/ Optional Refresh Token) | | | | | | | | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| Figure 8 | Figure 8 | |||
| The client credential flow illustrated in Figure 8 includes the | The client credential flow illustrated in Figure 8 includes the | |||
| following steps: | following steps: | |||
| (A) The client sends an access token request to the authorization | (A) The client sends an access token request to the authorization | |||
| server and includes an assertion. | server and includes an assertion. | |||
| (B) The authorization server validates the assertion and issues an | (B) The authorization server validates the assertion and issues an | |||
| access token. | access token. | |||
| 3.7.2.1. Client Requests Access Token | 3.7.2.1. Client Requests Access Token | |||
| The client requests an access token by making an HTTP "POST" request | The client requests an access token by making an HTTP "POST" request | |||
| to the token endpoint. The client constructs a request URI by adding | to the token endpoint. The client constructs a request URI by adding | |||
| the following parameters to the request: | the following parameters to the request: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to 'assertion' (case | REQUIRED. The parameter value MUST be set to "assertion". | |||
| sensitive). | ||||
| format | format | |||
| REQUIRED. The format of the assertion as defined by the | REQUIRED. The format of the assertion as defined by the | |||
| authorization server. | authorization server. The value MUST be an absolute URI. | |||
| assertion | assertion | |||
| REQUIRED. The assertion. | REQUIRED. The assertion. | |||
| secret_type | secret_type | |||
| OPTIONAL. The access token secret type as described by | OPTIONAL. The access token secret type as described by | |||
| Section 5.3. If omitted, the authorization server will issue a | Section 5.3. If omitted, the authorization server will issue a | |||
| bearer token (an access token without a matching secret) as | bearer token (an access token without a matching secret) as | |||
| described by Section 5.2. | described by Section 5.2. | |||
| skipping to change at page 35, line 5 ¶ | skipping to change at page 35, line 9 ¶ | |||
| The response contains the following parameters: | The response contains the following parameters: | |||
| access_token | access_token | |||
| REQUIRED. The access token. | REQUIRED. The access token. | |||
| expires_in | expires_in | |||
| OPTIONAL. The duration in seconds of the access token | OPTIONAL. The duration in seconds of the access token | |||
| lifetime. | lifetime. | |||
| refresh_token | ||||
| OPTIONAL. The refresh token. | ||||
| access_token_secret | access_token_secret | |||
| REQUIRED if requested by the client. The corresponding access | REQUIRED if requested by the client. The corresponding access | |||
| token secret as requested by the client. | token secret as requested by the client. | |||
| For example: | For example: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| access_token=FJQbwq9OD8 | access_token=FJQbwq9OD8 | |||
| If the assertion is invalid, the authorization server returns an | If the assertion is invalid, the authorization server returns an | |||
| error message in the HTTP response body using the | error message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | |||
| The response contains the following parameter: | The response contains the following parameter: | |||
| error | error | |||
| OPTIONAL. The parameter value MUST be set to either | OPTIONAL. The parameter value MUST be set to either | |||
| "invalid_assertion" or "unknown_format" (case sensitive). | "invalid_assertion" or "unknown_format". | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=incorrect_credentials | error=incorrect_credentials | |||
| Authorization servers SHOULD issue access tokens with a limited | Authorization servers SHOULD issue access tokens with a limited | |||
| lifetime and require clients to refresh them by requesting a new | lifetime and require clients to refresh them by requesting a new | |||
| skipping to change at page 35, line 49 ¶ | skipping to change at page 36, line 4 ¶ | |||
| access token using the same assertion if it is still valid. | access token using the same assertion if it is still valid. | |||
| Otherwise the client MUST obtain a new valid assertion. | Otherwise the client MUST obtain a new valid assertion. | |||
| 4. Refreshing an Access Token | 4. Refreshing an Access Token | |||
| Token refresh is used when the lifetime of an access token is shorter | Token refresh is used when the lifetime of an access token is shorter | |||
| than the lifetime of the authorization grant. It allows clients to | than the lifetime of the authorization grant. It allows clients to | |||
| obtain a new access token without having to go through the | obtain a new access token without having to go through the | |||
| authorization flow again or involve the resource owner. It is also | authorization flow again or involve the resource owner. It is also | |||
| used to obtain a new token with different security properties (e.g. | used to obtain a new token with different security properties (e.g. | |||
| bearer token, token with shared symmetric secret). | bearer token, token with shared symmetric secret). | |||
| +--------+ Client Credentials, +---------------+ | +--------+ Client Credentials, +---------------+ | |||
| | | Refresh Token, | | | | | Refresh Token, | | | |||
| | |>--(A)----- & Secret Type ------->| Authorization | | | |>--(A)----- & Secret Type ------->| Authorization | | |||
| | Client | | Server | | | Client | | Server | | |||
| | |<--(B)----- Access Token --------<| | | | |<--(B)----- Access Token --------<| | | |||
| | | & Optional Secret | | | | | & Optional Secret | | | |||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| Figure 9 | Figure 9 | |||
| To refresh a token, the client constructs an HTTP "POST" request to | To refresh a token, the client constructs an HTTP "POST" request to | |||
| the token endpoint and includes the following parameters in the HTTP | the token endpoint and includes the following parameters in the HTTP | |||
| request body using the "application/x-www-form-urlencoded" content | request body using the "application/x-www-form-urlencoded" content | |||
| type as defined by [W3C.REC-html40-19980424]: | type as defined by [W3C.REC-html40-19980424]: | |||
| type | type | |||
| REQUIRED. The parameter value MUST be set to 'refresh' (case | REQUIRED. The parameter value MUST be set to "refresh". | |||
| sensitive). | ||||
| client_id | client_id | |||
| REQUIRED. The client identifier as described in Section 3.4. | REQUIRED. The client identifier as described in Section 3.4. | |||
| client_secret | client_secret | |||
| REQUIRED if the client was issued a secret. The client secret. | REQUIRED if the client was issued a secret. The client secret. | |||
| refresh_token | refresh_token | |||
| REQUIRED. The refresh token associated with the access token | REQUIRED. The refresh token associated with the access token | |||
| to be refreshed. | to be refreshed. | |||
| secret_type | secret_type | |||
| OPTIONAL. The access token secret type as described by | OPTIONAL. The access token secret type as described by | |||
| Section 5.3. If omitted, the authorization server will issue a | Section 5.3. If omitted, the authorization server will issue a | |||
| bearer token (an access token without a matching secret) as | bearer token (an access token without a matching secret) as | |||
| described by Section 5.2. | described by Section 5.2. | |||
| For example, the client makes the following HTTPS request (line break | For example, the client makes the following HTTPS request (line break | |||
| are for display purposes only): | are for display purposes only): | |||
| POST /authorize 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 | |||
| type=refresh_token&client_id=s6BhdRkqt3&client_secret=8eSEIpnqmM | type=refresh_token&client_id=s6BhdRkqt3&client_secret=8eSEIpnqmM | |||
| &refresh_token=n4E9O119d&secret_type=hmac-sha256 | &refresh_token=n4E9O119d&secret_type=hmac-sha256 | |||
| The authorization server MUST verify the client credential, the | The authorization server MUST verify the client credential, the | |||
| validity of the refresh token, and that the resource owner's | validity of the refresh token, and that the resource owner's | |||
| authorization is still valid. If the request is valid, the | authorization is still valid. If the request is valid, the | |||
| authorization server issues a new access token and includes the | authorization server issues a new access token and includes the | |||
| skipping to change at page 37, line 41 ¶ | skipping to change at page 37, line 41 ¶ | |||
| If the request fails verification, the authorization server returns | If the request fails verification, the authorization server returns | |||
| an error message in the HTTP response body using the | an error message in the HTTP response body using the | |||
| "application/x-www-form-urlencoded" content type as defined by | "application/x-www-form-urlencoded" content type as defined by | |||
| [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | [W3C.REC-html40-19980424] with a 400 status code (Bad Request). | |||
| The response contains the following parameter: | The response contains the following parameter: | |||
| error | error | |||
| OPTIONAL. The parameter value MUST be set to either | OPTIONAL. The parameter value MUST be set to either | |||
| "incorrect_credentials", "authorization_expired", or | "incorrect_credentials", "authorization_expired", or | |||
| "unsupported_secret_type" (case sensitive). | "unsupported_secret_type". | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| error=incorrect_credentials | error=incorrect_credentials | |||
| 5. Accessing a Protected Resource | 5. Accessing a Protected Resource | |||
| Clients access protected resources by presenting an access token to | Clients access protected resources by presenting an access token to | |||
| the resource server. The methods used by the resource server to | the resource server. The methods used by the resource server to | |||
| validate the access token are beyond the scope of this specification, | validate the access token are beyond the scope of this specification, | |||
| but generally involve an interaction or coordination between the | but generally involve an interaction or coordination between the | |||
| resource server and authorization server. | resource server and authorization server. | |||
| The method in which a client uses an access token depends on the | The method in which a client uses an access token depends on the | |||
| security properties of the access tokens. By default, access tokens | security properties of the access tokens. By default, access tokens | |||
| are issued without a matching secret. Clients MAY request an access | are issued without a matching secret. Clients MAY request an access | |||
| token with a matchin secret by specifying the desired secret type | token with a matching secret by specifying the desired secret type | |||
| using the "secret_type" token request parameter. | using the "secret_type" token request parameter. | |||
| When an access token does not include a matching secret, the access | When an access token does not include a matching secret, the access | |||
| token acts as a bearer token, where the token string is a shared | token acts as a bearer token, where the token string is a shared | |||
| symmetric secret. This requires treating the access token with the | symmetric secret. This requires treating the access token with the | |||
| same care as other secrets (e.g. user passwords). Access tokens | same care as other secrets (e.g. user passwords). Access tokens | |||
| SHOULD NOT be sent in the clear over an insecure channel. | SHOULD NOT be sent in the clear over an insecure channel. | |||
| However, when it is necessary to transmit bearer tokens in the clear | However, when it is necessary to transmit bearer tokens in the clear | |||
| without a secure channel, authorization servers must issue access | without a secure channel, authorization servers SHOULD issue access | |||
| tokens with limited scope and lifetime to reduce the potential risk | tokens with limited scope and lifetime to reduce the potential risk | |||
| from a compromised access token. Clients SHOULD request and utilize | from a compromised access token. Clients SHOULD request and utilize | |||
| an access token with a matching secret when making protected resource | an access token with a matching secret when making protected resource | |||
| requests over an insecure channel (e.g. an HTTP request without using | requests over an insecure channel (e.g. an HTTP request without using | |||
| SSL/TLS). | TLS/SSL). | |||
| When an access token includes a matching secret, the secret is not | When an access token includes a matching secret, the secret is not | |||
| included directly in the request but is used instead to generate a | included directly in the request but is used instead to generate a | |||
| cryptographic signature of the request. The signature can only be | cryptographic signature of the request. The signature can only be | |||
| generated and verified by entities with access to the secret. | generated and verified by entities with access to the secret. | |||
| Clients SHOULD NOT make authenticated requests with an access token | Clients SHOULD NOT make authenticated requests with an access token | |||
| to unfamiliar resource servers, especially when using bearer tokens, | to unfamiliar resource servers, especially when using bearer tokens, | |||
| regardless of the presence of a secure channel. | regardless of the presence of a secure channel. | |||
| skipping to change at page 41, line 8 ¶ | skipping to change at page 41, line 8 ¶ | |||
| GET /resource?oauth_token=vF9dft4qmT HTTP/1.1 | GET /resource?oauth_token=vF9dft4qmT HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| The HTTP request URI query can include other request-specific | The HTTP request URI query can include other request-specific | |||
| parameters, in which case, the "oauth_token" parameters SHOULD be | parameters, in which case, the "oauth_token" parameters SHOULD be | |||
| appended following the request-specific parameters, properly | appended following the request-specific parameters, properly | |||
| separated by an "&" character (ASCII code 38). | separated by an "&" character (ASCII code 38). | |||
| The resource server MUST validate the access token and ensure it has | The resource server MUST validate the access token and ensure it has | |||
| not expired and its includes the requested resource. If the resource | not expired and its scope includes the requested resource. If the | |||
| expired or is not valid, the resource server MUST reply with an HTTP | resource expired or is not valid, the resource server MUST reply with | |||
| 401 status code (Unauthorized) and include the HTTP | an HTTP 401 status code (Unauthorized) and include the HTTP | |||
| "WWW-Authenticate" response header as described in Section 6.1. | "WWW-Authenticate" response header as described in Section 6.1. | |||
| 5.2.2. Form-Encoded Body Parameter | 5.2.2. Form-Encoded Body Parameter | |||
| When including the access token in the HTTP request entity-body, the | When including the access token in the HTTP request entity-body, the | |||
| client adds the access token to the request body using the | client adds the access token to the request body using the | |||
| "oauth_token" parameter. The client can use this method only if the | "oauth_token" parameter. The client can use this method only if the | |||
| following REQUIRED conditions are met: | following REQUIRED conditions are met: | |||
| o The entity-body is single-part. | o The entity-body is single-part. | |||
| skipping to change at page 41, line 45 ¶ | skipping to change at page 41, line 45 ¶ | |||
| For example, the client makes the following HTTPS request: | For example, the client makes the following HTTPS request: | |||
| POST /resource HTTP/1.1 | POST /resource 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 | |||
| oauth_token=vF9dft4qmT | oauth_token=vF9dft4qmT | |||
| The resource server MUST validate the access token and ensure it has | The resource server MUST validate the access token and ensure it has | |||
| not expired and its includes the requested resource. If the resource | not expired and its scope includes the requested resource. If the | |||
| expired or is not valid, the resource server MUST reply with an HTTP | resource expired or is not valid, the resource server MUST reply with | |||
| 401 status code (Unauthorized) and include the HTTP | an HTTP 401 status code (Unauthorized) and include the HTTP | |||
| "WWW-Authenticate" response header as described in Section 6.1. | "WWW-Authenticate" response header as described in Section 6.1. | |||
| 5.3. Cryptographic Tokens Requests | 5.3. Cryptographic Tokens Requests | |||
| Clients make authenticated protected resource requests using an | Clients make authenticated protected resource requests using an | |||
| access token with a matching secret by calculating a set of values | access token with a matching secret by calculating a set of values | |||
| and including them in the request using the "Authorization" header | and including them in the request using the "Authorization" header | |||
| field. The way clients calculate these values depends on the access | field. The way clients calculate these values depends on the access | |||
| token secret type as issued by the authorization server. | token secret type as issued by the authorization server. | |||
| This specification defines the "hmac-sha256" algorithm, and | This specification defines the "hmac-sha256" algorithm, and | |||
| establishes a registry for providing additional algorithms. Clients | establishes a registry for providing additional algorithms. Clients | |||
| obtain an access token with a matchin "hmac-sha256" secret by using | obtain an access token with a matching "hmac-sha256" secret by using | |||
| the "token_type" parameter when requesting an access token. | the "token_type" parameter when requesting an access token. | |||
| 5.3.1. The 'hmac-sha256' Algorithm | 5.3.1. The 'hmac-sha256' Algorithm | |||
| The "hmac-sha256" algorithm uses the HMAC method as defined in | The "hmac-sha256" algorithm uses the HMAC method as defined in | |||
| [RFC2104] together with the SHA-256 hash function defined in [NIST | [RFC2104] together with the SHA-256 hash function defined in [NIST | |||
| FIPS-180-3] to apply the access token secret to the request and | FIPS-180-3] to apply the access token secret to the request and | |||
| generate a signature value that is included in the request instead of | generate a signature value that is included in the request instead of | |||
| transmitting the secret in the clear. | transmitting the secret in the clear. | |||
| skipping to change at page 44, line 9 ¶ | skipping to change at page 44, line 9 ¶ | |||
| concatenation of several of the HTTP request elements into a single | concatenation of several of the HTTP request elements into a single | |||
| string. The string is used as an input to the selected cryptographic | string. The string is used as an input to the selected cryptographic | |||
| method and includes the HTTP request method (e.g. "GET", "POST", | method and includes the HTTP request method (e.g. "GET", "POST", | |||
| etc.), the authority as declared by the HTTP "Host" request header, | etc.), the authority as declared by the HTTP "Host" request header, | |||
| and the request resource URI. | and the request resource URI. | |||
| The normalized request string does not cover the entire HTTP request. | The normalized request string does not cover the entire HTTP request. | |||
| Most notably, it does not include the entity-body or most HTTP | Most notably, it does not include the entity-body or most HTTP | |||
| entity-headers. It is important to note that the resource server | entity-headers. It is important to note that the resource server | |||
| cannot verify the authenticity of the excluded request elements | cannot verify the authenticity of the excluded request elements | |||
| without using additional protections such as SSL/TLS. | without using additional protections such as TLS/SSL. | |||
| The normalized request string is constructed by concatenating | The normalized request string is constructed by concatenating | |||
| together, in order, the following HTTP request elements, separated by | together, in order, the following HTTP request elements, separated by | |||
| the "," character (ASCII code 44): | the "," character (ASCII code 44): | |||
| 1. The request timestamp as described in Section 5.3.1.1. | 1. The request timestamp as described in Section 5.3.1.1. | |||
| 2. The request nonce as described in Section 5.3.1.1. | 2. The request nonce as described in Section 5.3.1.1. | |||
| 3. The cryptographic algorithm used. | 3. The cryptographic algorithm used. | |||
| skipping to change at page 47, line 9 ¶ | skipping to change at page 47, line 9 ¶ | |||
| [[ Add OAuth 1.0a authors + WG contributors ]] | [[ Add OAuth 1.0a authors + WG contributors ]] | |||
| Appendix A. Differences from OAuth 1.0a | Appendix A. Differences from OAuth 1.0a | |||
| [[ Todo ]] | [[ Todo ]] | |||
| Appendix B. Document History | Appendix B. Document History | |||
| [[ to be removed by RFC editor before publication as an RFC ]] | [[ to be removed by RFC editor before publication as an RFC ]] | |||
| -01 | ||||
| o Editorial changes based on feedback from Brian Eaton, Bill Keenan, | ||||
| and Chuck Mortimore. | ||||
| o Changed devide flow "type" parameter values and switch to use only | ||||
| the token endpoint. | ||||
| -00 | -00 | |||
| o Initial draft based on a combination of WRAP and OAuth 1.0a. | o Initial draft based on a combination of WRAP and OAuth 1.0a. | |||
| 10. References | 10. References | |||
| 10.1. Normative References | 10.1. Normative References | |||
| [I-D.ietf-httpbis-p1-messaging] | [I-D.ietf-httpbis-p1-messaging] | |||
| Fielding, R., Gettys, J., Mogul, J., Nielsen, H., | Fielding, R., Gettys, J., Mogul, J., Nielsen, H., | |||
| End of changes. 146 change blocks. | ||||
| 235 lines changed or deleted | 249 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/ | ||||