diff options
Diffstat (limited to 'doc/specs')
-rw-r--r-- | doc/specs/draft-ietf-oauth.html | 3072 |
1 files changed, 3072 insertions, 0 deletions
diff --git a/doc/specs/draft-ietf-oauth.html b/doc/specs/draft-ietf-oauth.html new file mode 100644 index 0000000..6cc7582 --- /dev/null +++ b/doc/specs/draft-ietf-oauth.html @@ -0,0 +1,3072 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- saved from url=(0052)http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html --> +<HTML lang="en"><HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><TITLE>The OAuth 2.0 Protocol</TITLE> + +<META name="description" content="The OAuth 2.0 Protocol"> +<META name="generator" content="xml2rfc v1.35 (http://xml.resource.org/)"> +<META name="viewport" content="width=600;"> +<STYLE type="text/css"><!-- + body { + font-family: verdana, charcoal, helvetica, arial, sans-serif; + font-size: 85%; + max-width: 80ex; + color: #000; background-color: #FFF; + margin: 2em; + } + h1, h2, h3, h4, h5, h6 { + font-family: helvetica, monaco, "MS Sans Serif", arial, sans-serif; + font-weight: bold; font-style: normal; + } + h1 { color: #900; background-color: transparent; text-align: right; } + h3 { color: #333; background-color: transparent; } + + td.RFCbug { + font-size: x-small; text-decoration: none; + width: 30px; height: 30px; padding-top: 2px; + text-align: justify; vertical-align: middle; + background-color: #000; + } + td.RFCbug span.RFC { + font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, verdana, sans-serif; + font-weight: bold; color: #666; + } + td.RFCbug span.hotText { + font-family: charcoal, monaco, geneva, "MS Sans Serif", helvetica, verdana, sans-serif; + font-weight: normal; text-align: center; color: #FFF; + } + + table.TOCbug { width: 30px; height: 15px; } + td.TOCbug { + text-align: center; width: 30px; height: 15px; + color: #FFF; background-color: #900; + } + td.TOCbug a { + font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, sans-serif; + font-weight: bold; font-size: x-small; text-decoration: none; + color: #FFF; background-color: transparent; + } + + td.header { + font-family: arial, helvetica, sans-serif; font-size: x-small; + vertical-align: top; width: 33%; + color: #FFF; background-color: #666; + } + td.author { font-weight: bold; font-size: x-small; margin-left: 4em; } + td.author-text { font-size: x-small; } + + /* info code from SantaKlauss at http://www.madaboutstyle.com/tooltip2.html */ + a.info { + /* This is the key. */ + position: relative; + z-index: 24; + text-decoration: none; + } + a.info:hover { + z-index: 25; + color: #FFF; background-color: #900; + } + a.info span { display: none; } + a.info:hover span.info { + /* The span will display just on :hover state. */ + display: block; + position: absolute; + font-size: smaller; + top: 2em; left: -5em; width: 15em; + padding: 2px; border: 1px solid #333; + color: #900; background-color: #EEE; + text-align: left; + } + + a { font-weight: bold; } + a:link { color: #900; background-color: transparent; } + a:visited { color: #633; background-color: transparent; } + a:active { color: #633; background-color: transparent; } + + p { margin-left: 2em; margin-right: 2em; } + p.copyright { font-size: x-small; } + p.toc { font-size: 85%; + max-width: 80ex; + font-weight: bold; margin-left: 3em; } + table.toc { margin: 0 0 0 3em; padding: 0; border: 0; vertical-align: text-top; } + td.toc { font-size: 85%; + max-width: 80ex; + font-weight: bold; vertical-align: text-top; } + + ol.text { margin-left: 2em; margin-right: 2em; } + ul.text { margin-left: 2em; margin-right: 2em; } + li { margin-left: 3em; } + + /* RFC-2629 <spanx>s and <artwork>s. */ + em { font-style: italic; } + strong { font-weight: bold; } + dfn { font-weight: bold; font-style: normal; } + cite { font-weight: normal; font-style: normal; } + tt { color: #036; } + tt, pre, pre dfn, pre em, pre cite, pre span { + font-family: "Courier New", Courier, monospace; font-size: small; + } + pre { + text-align: left; padding: 4px; + color: #000; background-color: #CCC; + } + pre dfn { color: #900; } + pre em { color: #66F; background-color: #FFC; font-weight: normal; } + pre .key { color: #33C; font-weight: bold; } + pre .id { color: #900; } + pre .str { color: #000; background-color: #CFF; } + pre .val { color: #066; } + pre .rep { color: #909; } + pre .oth { color: #000; background-color: #FCF; } + pre .err { background-color: #FCC; } + + /* RFC-2629 <texttable>s. */ + table.all, table.full, table.headers, table.none { + font-size: 85%; + max-width: 80ex; + text-align: center; border-width: 2px; + vertical-align: top; border-collapse: collapse; + } + table.all, table.full { border-style: solid; border-color: black; } + table.headers, table.none { border-style: none; } + th { + font-weight: bold; border-color: black; + border-width: 2px 2px 3px 2px; + } + table.all th, table.full th { border-style: solid; } + table.headers th { border-style: none none solid none; } + table.none th { border-style: none; } + table.all td { + border-style: solid; border-color: #333; + border-width: 1px 2px; + } + table.full td, table.headers td, table.none td { border-style: none; } + + hr { height: 1px; } + hr.insert { + width: 80%; border-style: none; border-width: 0; + color: #CCC; background-color: #CCC; + } +--></STYLE> +</HEAD><BODY> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<TABLE summary="layout" width="66%" border="0" cellpadding="0" cellspacing="0"><TBODY><TR><TD><TABLE summary="layout" width="100%" border="0" cellpadding="2" cellspacing="1"> +<TBODY><TR><TD class="header">Network Working Group</TD><TD class="header">E. Hammer-Lahav, Ed.</TD></TR> +<TR><TD class="header">Internet-Draft</TD><TD class="header">Yahoo!</TD></TR> +<TR><TD class="header">Obsoletes: <A href="http://tools.ietf.org/html/rfc5849">5849</A> (if approved)</TD><TD class="header">D. Recordon</TD></TR> +<TR><TD class="header">Intended status: Standards Track</TD><TD class="header">Facebook</TD></TR> +<TR><TD class="header">Expires: January 12, 2011</TD><TD class="header">D. Hardt</TD></TR> +<TR><TD class="header"> </TD><TD class="header">Microsoft</TD></TR> +<TR><TD class="header"> </TD><TD class="header">July 11, 2010</TD></TR> +</TBODY></TABLE></TD></TR></TBODY></TABLE> +<H1><BR>The OAuth 2.0 Protocol<BR>draft-ietf-oauth-v2-10</H1> + +<H3>Abstract</H3> + +<P> + This specification describes the OAuth 2.0 protocol. + +</P> +<H3>Status of this Memo</H3> +<P> +This Internet-Draft is submitted in full +conformance with the provisions of BCP 78 and BCP 79.</P> +<P> +Internet-Drafts are working documents of the Internet Engineering +Task Force (IETF). Note that other groups may also distribute +working documents as Internet-Drafts. The list of current +Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.</P> +<P> +Internet-Drafts are draft documents valid for a maximum of six months +and may be updated, replaced, or obsoleted by other documents at any time. +It is inappropriate to use Internet-Drafts as reference material or to cite +them other than as “work in progress.”</P> +<P> +This Internet-Draft will expire on January 12, 2011.</P> + +<H3>Copyright Notice</H3> +<P> +Copyright (c) 2010 IETF Trust and the persons identified as the +document authors. All rights reserved.</P> +<P> +This document is subject to BCP 78 and the IETF Trust's Legal +Provisions Relating to IETF Documents +(http://trustee.ietf.org/license-info) in effect on the date of +publication of this document. Please review these documents +carefully, as they describe your rights and restrictions with respect +to this document. Code Components extracted from this document must +include Simplified BSD License text as described in Section 4.e of +the Trust Legal Provisions and are provided without warranty as +described in the Simplified BSD License.</P> +<A name="toc"></A><BR><HR> +<H3>Table of Contents</H3> +<P class="toc"> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor1">1.</A> +Introduction<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor2">1.1.</A> +Notational Conventions<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor3">1.2.</A> +Terminology<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor4">1.3.</A> +Overview<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor5">1.4.</A> +Client Profiles<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor6">1.4.1.</A> +Web Server<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-agent">1.4.2.</A> +User-Agent<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor7">1.4.3.</A> +Native Application<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor8">1.4.4.</A> +Autonomous<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">2.</A> +Client Credentials<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor9">2.1.</A> +Client Password Credentials<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">3.</A> +Obtaining End-User Authorization<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor10">3.1.</A> +Authorization Response<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#auth-error">3.2.</A> +Error Response<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#auth-error-codes">3.2.1.</A> +Error Codes<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#obtaining-token">4.</A> +Obtaining an Access Token<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-grant-types">4.1.</A> +Access Grant Types<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor11">4.1.1.</A> +Authorization Code<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor12">4.1.2.</A> +Resource Owner Password Credentials<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor13">4.1.3.</A> +Assertion<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#token-refresh">4.1.4.</A> +Refresh Token<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-token-response">4.2.</A> +Access Token Response<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#token-error">4.3.</A> +Error Response<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#token-error-codes">4.3.1.</A> +Error Codes<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-resource">5.</A> +Accessing a Protected Resource<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor14">5.1.</A> +Authenticated Requests<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#authz-header">5.1.1.</A> +The Authorization Request Header Field<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#query-param">5.1.2.</A> +URI Query Parameter<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#body-param">5.1.3.</A> +Form-Encoded Body Parameter<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#authn-header">5.2.</A> +The WWW-Authenticate Response Header Field<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#resource-error-codes">5.2.1.</A> +Error Codes<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor15">6.</A> +Extensibility<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor16">6.1.</A> +Defining New Client Credentials Types<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor17">6.2.</A> +Defining New Endpoint Parameters<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor18">6.3.</A> +Defining New Header Field Parameters<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor19">6.4.</A> +Defining New Access Grant Types<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor20">7.</A> +Security Considerations<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor21">8.</A> +IANA Considerations<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#parameters-registry">8.1.</A> +The OAuth Parameters Registry<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor22">8.1.1.</A> +Registration Template<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor23">8.1.2.</A> +Example<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor24">Appendix A.</A> +Examples<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor25">Appendix B.</A> +Contributors<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor26">Appendix C.</A> +Acknowledgements<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#anchor27">Appendix D.</A> +Document History<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#rfc.references1">9.</A> +References<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#rfc.references1">9.1.</A> +Normative References<BR> + <A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#rfc.references2">9.2.</A> +Informative References<BR> +<A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#rfc.authors">§</A> +Authors' Addresses<BR> +</P> +<BR clear="all"> + +<A name="anchor1"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1"></A><H3>1. +Introduction</H3> + +<P> + With the increasing use of distributed web services and cloud computing, third-party + applications require access to server-hosted resources. These resources are usually + protected and require authentication using the resource owner's credentials (typically a + username and password). + +</P> +<P> + In the traditional client-server authentication model, the client accesses a protected + resource on the server by authenticating with the server using the resource owner's + credentials. In order to provide third-party applications access to protected resources, + the resource owner shares its credentials with the third-party. This creates several + problems and limitations: + + </P> +<UL class="text"> +<LI> + Third-party applications are required to store the resource-owner's credentials + for future use, typically a password in clear-text. + +</LI> +<LI> + Servers are required to support password (symmetric) authentication, despite the + security weaknesses created by passwords. + +</LI> +<LI> + Third-party applications gain overly broad access to the resource-owner's protected + resources, leaving resource owners without any ability to restrict access to a limited + subset of resources, to limit access duration, or to limit access to the methods + supported by these resources. + +</LI> +<LI> + Resource owners cannot revoke access to an individual third-party without revoking + access to all third-parties, and must do so by changing their password. + +</LI> +</UL><P> + +</P> +<P> + OAuth address these issues by separating the role of the client from that of the + resource owner. In OAuth, the client (which is usually not the resource owner, but is + acting on the resource owner's behalf) requests access to resources controlled by the + resource owner and hosted by the resource server, and is issued a different set of + credentials than those of the resource owner. + +</P> +<P> + Instead of using the resource owner's credentials to access protected resources, clients + obtain an access token (a string which denotes a specific scope, duration, and other + attributes). The format and structure of access tokens is beyond the scope of this + specification. + +</P> +<P> + Tokens are issued to third-party clients by an authorization server with the approval of + the resource owner. The client uses the access token to access the protected resources + hosted by the resource server. The interaction between the authorization server and + resource server is beyond the scope of this specification. + +</P> +<P> + For example, a web user (resource owner) can grant a printing service (client) access to + her protected photos stored at a photo sharing service (resource server), without sharing + her username and password with the printing service. Instead, she authenticates directly + with an authentication service trusted by the photo sharing service (authorization server) + which issues the printing service delegation-specific credentials (token). + +</P> +<P> + This specification defines the use of OAuth over <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2616">HTTP<SPAN> (</SPAN><SPAN class="info">Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, “Hypertext Transfer Protocol -- HTTP/1.1,” June 1999.</SPAN><SPAN>)</SPAN></A> [RFC2616] + (or HTTP over TLS as defined by <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2818">[RFC2818]<SPAN> (</SPAN><SPAN class="info">Rescorla, E., “HTTP Over TLS,” May 2000.</SPAN><SPAN>)</SPAN></A>). Other specifications may + extend it for use with other transport protocols. + +</P> +<A name="anchor2"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.1"></A><H3>1.1. +Notational Conventions</H3> + +<P> + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD + NOT', 'RECOMMENDED', 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2119">[RFC2119]<SPAN> (</SPAN><SPAN class="info">Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + This document uses the Augmented Backus-Naur Form (ABNF) notation of + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#I-D.ietf-httpbis-p1-messaging">[I‑D.ietf‑httpbis‑p1‑messaging]<SPAN> (</SPAN><SPAN class="info">Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., Leach, P., Berners-Lee, T., and J. Reschke, “HTTP/1.1, part 1: URIs, Connections, and Message Parsing,” March 2010.</SPAN><SPAN>)</SPAN></A>. Additionally, the following rules are + included from <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2617">[RFC2617]<SPAN> (</SPAN><SPAN class="info">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, “HTTP Authentication: Basic and Digest Access Authentication,” June 1999.</SPAN><SPAN>)</SPAN></A>: realm, auth-param; from + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC3986">[RFC3986]<SPAN> (</SPAN><SPAN class="info">Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.</SPAN><SPAN>)</SPAN></A>: URI-Reference; and from + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#I-D.ietf-httpbis-p1-messaging">[I‑D.ietf‑httpbis‑p1‑messaging]<SPAN> (</SPAN><SPAN class="info">Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., Leach, P., Berners-Lee, T., and J. Reschke, “HTTP/1.1, part 1: URIs, Connections, and Message Parsing,” March 2010.</SPAN><SPAN>)</SPAN></A>: OWS, RWS, and quoted-string. + +</P> +<P> + Unless otherwise noted, all the protocol parameter names and values are case sensitive. + +</P> +<A name="anchor3"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.2"></A><H3>1.2. +Terminology</H3> + +<P> + </P> +<BLOCKQUOTE class="text"><DL> +<DT>protected resource</DT> +<DD> + + An access-restricted resource which can be obtained using an OAuth-authenticated + request. + +</DD> +<DT>resource server</DT> +<DD> + + A server capable of accepting and responding to protected resource requests. + +</DD> +<DT>client</DT> +<DD> + + An application obtaining authorization and making protected resource requests. + +</DD> +<DT>resource owner</DT> +<DD> + + An entity capable of granting access to a protected resource. + +</DD> +<DT>end-user</DT> +<DD> + + A human resource owner. + +</DD> +<DT>token</DT> +<DD> + + A string representing an access authorization issued to the client. The string is + usually opaque to the client. Tokens represent specific scopes and durations of + access, granted by the resource owner, and enforced by the resource server and + authorization servers. The token may denote an identifier used to retrieve the + authorization information, or self-contain the authorization information in a + verifiable manner (i.e. a token string consisting of some data and a signature). + Tokens may be pure capabilities. Specific additional authentication credentials may + be required in order for a client to use a token. + +</DD> +<DT>access token</DT> +<DD> + + A token used by the client to make authenticated requests on behalf of the resource + owner. + +</DD> +<DT>refresh token</DT> +<DD> + + A token used by the client to obtain a new access token without having to involve + the resource owner. + +</DD> +<DT>authorization code</DT> +<DD> + A short-lived token representing the access grant provided by the end-user. The + authorization code is used to obtain an access token and a refresh token. + +</DD> +<DT>authorization server</DT> +<DD> + + A server capable of issuing tokens after successfully authenticating the resource + owner and obtaining authorization. The authorization server may be the same server as + the resource server, or a separate entity. + +</DD> +<DT>end-user authorization endpoint</DT> +<DD> + + The authorization server's HTTP endpoint capable of authenticating the end-user and + obtaining authorization. The end-user authorization endpoint is described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">Section 3<SPAN> (</SPAN><SPAN class="info">Obtaining End-User Authorization</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>token endpoint</DT> +<DD> + + The authorization server's HTTP endpoint capable of issuing tokens and refreshing + expired tokens. The token endpoint is described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#obtaining-token">Section 4<SPAN> (</SPAN><SPAN class="info">Obtaining an Access Token</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>client identifier</DT> +<DD> + + A unique identifier issued to the client to identify itself to the authorization + server. Client identifiers may have a matching secret. The client identifier is + described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A>. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<A name="anchor4"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.3"></A><H3>1.3. +Overview</H3> + +<P> + OAuth provides a method for clients to access a protected resource on behalf of a + resource owner. Before a client can access a protected resource, it must first obtain + authorization from the resource owner, then exchange the access grant for an access token + (representing the grant's scope, duration, and other attributes). The client accesses the + protected resource by presenting the access token to the resource server. + +</P><BR><HR class="insert"> +<A name="Figure 1"></A> +<DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + +--------+ +---------------+ + | |--(A)-- Authorization Request --->| Resource | + | | | Owner | + | |<-(B)------ Access Grant ---------| | + | | +---------------+ + | | + | | Client Credentials & +---------------+ + | |--(C)------ Access Grant -------->| Authorization | + | Client | | Server | + | |<-(D)------ Access Token ---------| | + | | (w/ Optional Refresh Token) +---------------+ + | | + | | +---------------+ + | |--(E)------ Access Token -------->| Resource | + | | | Server | + | |<-(F)---- Protected Resource -----| | + +--------+ +---------------+ + +</PRE></DIV><TABLE border="0" cellpadding="0" cellspacing="2" align="center"><TBODY><TR><TD align="center"><FONT face="monaco, MS Sans Serif" size="1"><B> Figure 1: Abstract Protocol Flow </B></FONT><BR></TD></TR></TBODY></TABLE><HR class="insert"> + +<P> + The abstract flow illustrated in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#Figure 1">Figure 1<SPAN> (</SPAN><SPAN class="info">Abstract Protocol Flow</SPAN><SPAN>)</SPAN></A> includes the following + steps: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>(A)</DT> +<DD> + The client requests authorization from the resource owner. The client should not + request the resource owner's credentials directly. Instead, it should request + authorization via an authorization server or other entities. For example, the client + directs the resource owner to the authorization server which in turn issues it an + access grant. When unavoidable, the client interacts directly with the end-user, + asking for the end-user's username and password. If the client is acting + autonomously, the authorization request is beyond the scope of this specification. + +</DD> +<DT>(B)</DT> +<DD> + The client is issued an access grant which represents the authorization provided by + the resource owner. The access grant can be expressed as: + + +<UL class="text"> +<LI> + Authorization code - an access grant obtained via an authorization server. + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">Section 3<SPAN> (</SPAN><SPAN class="info">Obtaining End-User Authorization</SPAN><SPAN>)</SPAN></A> describes how to obtain an authorization + code when the end-user is present and using a user-agent. + +</LI> +<LI> + Assertion - an access grant obtained using a different trust framework. + Assertions enable the client to utilize existing trust relationships to obtain an + access token. They provide a bridge between OAuth and other trust frameworks. The + access grant represented by an assertion depends on the assertion type, its + content, and how it was issued, which are beyond the scope of this specification. + +</LI> +<LI> + Resource owner password credentials - obtained when interacting directly with a + resource-owner. Resource owner password credentials (i.e. a username and + password) should only be used when there is a high degree of trust between the + resource owner and the client (e.g. its computer operating system or a highly + privileged application). However, unlike the HTTP Basic authentication scheme + defined in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2617">[RFC2617]<SPAN> (</SPAN><SPAN class="info">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, “HTTP Authentication: Basic and Digest Access Authentication,” June 1999.</SPAN><SPAN>)</SPAN></A>, the resource owner's credentials are used + for a single request and are exchanged for an access token and refresh token. + This eliminates the need for the client to store the resource-owner's credentials + for future use. + +</LI> +</UL> + +</DD> +<DT>(C)</DT> +<DD> + The client requests an access token by authenticating with the authorization server, + and presenting the access grant. The token request is described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#obtaining-token">Section 4<SPAN> (</SPAN><SPAN class="info">Obtaining an Access Token</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>(D)</DT> +<DD> + The authorization server validates the client credentials and the access grant, and + issues an access token with an optional refresh token. Access tokens usually have a + shorter lifetime than the access grant. Refresh tokens usually have a lifetime equal + to the duration of the access grant. When an access token expires, the refresh token + is used to obtain a new access token without having to request another access grant + from the resource owner. + +</DD> +<DT>(E)</DT> +<DD> + The client makes a protected resource request to the resource server, and presents + the access token in order to gain access. Accessing a protected resource is described + in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-resource">Section 5<SPAN> (</SPAN><SPAN class="info">Accessing a Protected Resource</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>(F)</DT> +<DD> + The resource server validates the access token, and if valid, serves the request. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + When the client is acting on its own behalf (the client is also the resource owner), + the client does not obtain an access grant. The simplified protocol flow is illustrated + in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#Figure 2">Figure 2<SPAN> (</SPAN><SPAN class="info">Protocol Flow for Client Acting On Its Own Behalf</SPAN><SPAN>)</SPAN></A>: + +</P><BR><HR class="insert"> +<A name="Figure 2"></A> +<DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + +--------+ +---------------+ + | |--(C)--- Client Credentials ----->| Authorization | + | | | Server | + | |<-(D)------ Access Token ---------| | + | | +---------------+ + | Client | + | | +---------------+ + | |--(E)------ Access Token -------->| Resource | + | | | Server | + | |<-(F)---- Protected Resource -----| | + +--------+ +---------------+ + +</PRE></DIV><TABLE border="0" cellpadding="0" cellspacing="2" align="center"><TBODY><TR><TD align="center"><FONT face="monaco, MS Sans Serif" size="1"><B> Figure 2: Protocol Flow for Client Acting On Its Own Behalf </B></FONT><BR></TD></TR></TBODY></TABLE><HR class="insert"> + +<P> + When the client uses the user-agent profile (described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-agent">Section 1.4.2<SPAN> (</SPAN><SPAN class="info">User-Agent</SPAN><SPAN>)</SPAN></A>), + the authorization request results in an access token, as illustrated in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#Figure 3">Figure 3<SPAN> (</SPAN><SPAN class="info">Indirect Access Grant Protocol Flow</SPAN><SPAN>)</SPAN></A>: + +</P><BR><HR class="insert"> +<A name="Figure 3"></A> +<DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + +--------+ +----------+ +---------------+ + | |--(A)-- Authorization --+- -+-->| | + | | Request | Resource | | Authorization | + | | | Owner | | Server | + | |<-(D)-- Access Token ---+- -+---| | + | | +----------+ +---------------+ + | Client | + | | +---------------+ + | |--(E)-------- Access Token ----------->| Resource | + | | | Server | + | |<-(F)------ Protected Resource --------| | + +--------+ +---------------+ + +</PRE></DIV><TABLE border="0" cellpadding="0" cellspacing="2" align="center"><TBODY><TR><TD align="center"><FONT face="monaco, MS Sans Serif" size="1"><B> Figure 3: Indirect Access Grant Protocol Flow </B></FONT><BR></TD></TR></TBODY></TABLE><HR class="insert"> + +<A name="anchor5"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.4"></A><H3>1.4. +Client Profiles</H3> + +<P> + OAuth supports a wide range of client types by providing a rich and extensible framework + for establishing authorization and exchanging it for an access token. The methods detailed + in this specification were designed to accommodate four client types: web servers, + user-agents, native applications, and autonomous clients. Additional authorization flows + and client profiles may be defined by other specifications to cover additional scenarios + and client types. + +</P> +<A name="anchor6"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.4.1"></A><H3>1.4.1. +Web Server</H3> + +<P> + The web server profile is suitable for clients capable of interacting with the end-user's + user-agent (typically a web browser) and capable of receiving incoming requests from the + authorization server (capable of acting as an HTTP server). + +</P><BR><HR class="insert"> +<A name="Figure 4"></A> +<DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + +----------+ Client Identifier +---------------+ + | -+----(A)--- & Redirect URI ------>| | + | End-user | | Authorization | + | at |<---(B)-- User authenticates --->| Server | + | Browser | | | + | -+----(C)-- Authorization Code ---<| | + +-|----|---+ +---------------+ + | | ^ v + (A) (C) | | + | | | | + ^ v | | + +---------+ | | + | |>---(D)-- Client Credentials, --------' | + | Web | Authorization Code, | + | Client | & Redirect URI | + | | | + | |<---(E)----- Access Token -------------------' + +---------+ (w/ Optional Refresh Token) + +</PRE></DIV><TABLE border="0" cellpadding="0" cellspacing="2" align="center"><TBODY><TR><TD align="center"><FONT face="monaco, MS Sans Serif" size="1"><B> Figure 4: Web Server Flow </B></FONT><BR></TD></TR></TBODY></TABLE><HR class="insert"> + +<P> + The web server flow illustrated in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#Figure 4">Figure 4<SPAN> (</SPAN><SPAN class="info">Web Server Flow</SPAN><SPAN>)</SPAN></A> includes the following + steps: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>(A)</DT> +<DD> + The web client initiates the flow by redirecting the end-user's user-agent to the + end-user authorization endpoint as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">Section 3<SPAN> (</SPAN><SPAN class="info">Obtaining End-User Authorization</SPAN><SPAN>)</SPAN></A>. + The client includes its client identifier, requested scope, local state, and a + redirect URI to which the authorization server will send the end-user back once + access is granted (or denied). + +</DD> +<DT>(B)</DT> +<DD> + The authorization server authenticates the end-user (via the user-agent) and + establishes whether the end-user grants or denies the client's access request. + +</DD> +<DT>(C)</DT> +<DD> + Assuming the end-user granted access, the authorization server redirects the + user-agent back to the client to the redirection URI provided earlier. The + authorization includes an authorization code for the client to use to obtain an + access token. + +</DD> +<DT>(D)</DT> +<DD> + The client requests an access token from the authorization server by authenticating + and including the authorization code received in the previous step as described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#obtaining-token">Section 4<SPAN> (</SPAN><SPAN class="info">Obtaining an Access Token</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>(E)</DT> +<DD> + The authorization server validates the client credentials and the authorization + code and responds back with the access token. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<A name="user-agent"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.4.2"></A><H3>1.4.2. +User-Agent</H3> + +<P> + The user-agent profile is suitable for client applications residing in a user-agent, + typically implemented in a browser using a scripting language such as JavaScript. These + clients cannot keep client secrets confidential and the authentication of the client is + based on the user-agent's same-origin policy. + +</P> +<P> + Unlike other profiles in which the client makes separate requests for end-user + authorization and access token, the client receives the access token as a result of the + end-user authorization request in the form of an HTTP redirection. The client requests + the authorization server to redirect the user-agent to another web server or local + resource accessible to the user-agent which is capable of extracting the access token + from the response and passing it to the client. + +</P> +<P> + This user-agent profile does not utilize the client secret since the client executables + reside on the end-user's computer or device which makes the client secret accessible + and exploitable. Because the access token is encoded into the redirection URI, it may + be exposed to the end-user and other applications residing on the computer or device. + +</P><BR><HR class="insert"> +<A name="Figure 5"></A> +<DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + +----------+ Client Identifier +----------------+ + | |>---(A)-- & Redirection URI --->| | + | | | | + End <--+ - - - +----(B)-- User authenticates -->| Authorization | + User | | | Server | + | |<---(C)--- Redirect URI -------<| | + | Client | with Access Token | | + | in | in Fragment +----------------+ + | Browser | + | | +----------------+ + | |>---(D)--- Redirect URI ------->| | + | | without Fragment | Web Server | + | | | with Client | + | (F) |<---(E)--- Web Page with ------<| Resource | + | Access | Script | | + | Token | +----------------+ + +----------+ + +</PRE></DIV><TABLE border="0" cellpadding="0" cellspacing="2" align="center"><TBODY><TR><TD align="center"><FONT face="monaco, MS Sans Serif" size="1"><B> Figure 5: User-Agent Flow </B></FONT><BR></TD></TR></TBODY></TABLE><HR class="insert"> + +<P> + The user-agent flow illustrated in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#Figure 5">Figure 5<SPAN> (</SPAN><SPAN class="info">User-Agent Flow</SPAN><SPAN>)</SPAN></A> includes the following + steps: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>(A)</DT> +<DD> + The client sends the user-agent to the end-user authorization endpoint as described + in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">Section 3<SPAN> (</SPAN><SPAN class="info">Obtaining End-User Authorization</SPAN><SPAN>)</SPAN></A>. The client includes its client identifier, + requested scope, local state, and a redirect URI to which the authorization server + will send the end-user back once authorization is granted (or denied). + +</DD> +<DT>(B)</DT> +<DD> + The authorization server authenticates the end-user (via the user-agent) and + establishes whether the end-user grants or denies the client's access request. + +</DD> +<DT>(C)</DT> +<DD> + If the end-user granted access, the authorization server redirects the + user-agent to the redirection URI provided earlier. The redirection URI includes + the access token in the URI fragment. + +</DD> +<DT>(D)</DT> +<DD> + The user-agent follows the redirection instructions by making a request to the web + server which does not include the fragment. The user-agent retains the fragment + information locally. + +</DD> +<DT>(E)</DT> +<DD> + The web server returns a web page (typically an HTML page with an embedded script) + capable of accessing the full redirection URI including the fragment retained by the + user-agent, and extracting the access token (and other parameters) contained in the + fragment. + +</DD> +<DT>(F)</DT> +<DD> + The user-agent executes the script provided by the web server locally, which + extracts the access token and passes it to the client. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<A name="anchor7"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.4.3"></A><H3>1.4.3. +Native Application</H3> + +<P> + Native application are clients running as native code on the end-user's computer or + device (i.e. executing outside a user-agent or as a desktop program). These clients are + often capable of interacting with (or embedding) the end-user's user-agent but are + limited in how such interaction affects their end-user experience. In many cases, + native applications are incapable of receiving direct callback requests from the + server (e.g. firewall, operating system restrictions). + +</P> +<P> + Native application clients can be implemented in different ways based on their + requirements and desired end-user experience. Native application clients can: + + </P> +<UL class="text"> +<LI> + Utilize the end-user authorization endpoint as described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">Section 3<SPAN> (</SPAN><SPAN class="info">Obtaining End-User Authorization</SPAN><SPAN>)</SPAN></A> by launching an external user-agent. The + client can capture the response by providing a redirection URI with a custom URI + scheme (registered with the operating system to invoke the client application), or + by providing a redirection URI pointing to a server-hosted resource under the + client's control which makes the response available to the client (e.g. using the + window title or other locations accessible from outside the user-agent). + +</LI> +<LI> + Utilize the end-user authorization endpoint as described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#user-authorization">Section 3<SPAN> (</SPAN><SPAN class="info">Obtaining End-User Authorization</SPAN><SPAN>)</SPAN></A> by using an embedded user-agent. The client + obtains the response by directly communicating with the embedded user-agent. + +</LI> +<LI> + Prompt end-users for their password and use them directly to obtain an access + token. This is generally discouraged, as it hands the end-user's password directly + to the third-party client which in turn has to store it in clear-text. It also + requires the server to support password-based authentication. + +</LI> +</UL><P> + +</P> +<P> + When choosing between launching an external browser and an embedded user-agent, + developers should consider the following: + + </P> +<UL class="text"> +<LI> + External user-agents may improve completion rate as the end-user may already be + logged-in and not have to re-authenticate. + +</LI> +<LI> + Embedded user-agents often offer a better end-user flow, as they remove the need to + switch context and open new windows. + +</LI> +<LI> + Embedded user-agents pose a security challenge because users are authenticating in + an unidentified window without access to the visual protections offered by many + user-agents. + +</LI> +</UL><P> + +</P> +<A name="anchor8"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.1.4.4"></A><H3>1.4.4. +Autonomous</H3> + +<P> + Autonomous clients utilize an existing trust relationship or framework to establish + authorization. Autonomous clients can be implemented in different ways based on their + requirements and the existing trust framework they rely upon. Autonomous clients can: + + </P> +<UL class="text"> +<LI> + Obtain an access token by authenticating with the authorization server using their + client credentials. The scope of the access token is limited to the protected + resources under the control of the client, or that of another resource owner + previously arranged with the authorization server. + +</LI> +<LI> + Use an existing access grant expressed as an assertion using an assertion format + supported by the authorization server. Using assertions requires the client to + obtain a assertion (such as a <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#OASIS.saml-core-2.0-os">SAML<SPAN> (</SPAN><SPAN class="info">Cantor, S., Kemp, J., Philpott, R., and E. Maler, “Assertions and Protocol for the OASIS Security Assertion Markup Language (SAML) V2.0,” March 2005.</SPAN><SPAN>)</SPAN></A> [OASIS.saml‑core‑2.0‑os] + assertion) from an assertion issuer or to self-issue an assertion. 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. + +</LI> +</UL><P> + +</P> +<A name="client-authentication"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.2"></A><H3>2. +Client Credentials</H3> + +<P> + When interacting with the authorization server, the client identifies itself using a client + identifier and authenticates using a set of client credentials. This specification provides + one mechanism for authenticating the client using password credentials. + +</P> +<P> + The means through which the client obtains its credentials are beyond the scope of this + specification, but usually involve registration with the authorization server. + [[ OAuth Discovery provides one way of obtaining a client password ]] + +</P> +<P> + Due to the nature of some clients, authorization servers SHOULD NOT make assumptions + about the confidentiality of client secrets without establishing trust with the + client operator. Authorization servers SHOULD NOT issue client secrets to clients + incapable of keeping their secrets confidential. + +</P> +<P> + The authorization server MAY authenticate the client using any appropriate set of + credentials and authentication scheme. The client MUST NOT utilize more than one set of + credentials or authentication mechanism with each request. + +</P> +<A name="anchor9"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.2.1"></A><H3>2.1. +Client Password Credentials</H3> + +<P> + The client password credentials use a shared symmetric secret to authenticate the client. + The client identifier and password are included in the request using the + HTTP Basic authentication scheme as defined in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2617">[RFC2617]<SPAN> (</SPAN><SPAN class="info">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, “HTTP Authentication: Basic and Digest Access Authentication,” June 1999.</SPAN><SPAN>)</SPAN></A> by including the + client identifier as the username and client password as the password. + +</P> +<P> + For example (line breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /token HTTP/1.1 + Host: server.example.com + Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW + Content-Type: application/x-www-form-urlencoded + + grant_type=authorization_code&client_id=s6BhdRkqt3&code=i1WsRn1uB1& + redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb + +</PRE></DIV> +<P> + Alternatively, the client MAY include the password in the request body using the + following parameter: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>client_secret</DT> +<DD> + REQUIRED. The client password. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example (line breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /token HTTP/1.1 + Host: server.example.com + Content-Type: application/x-www-form-urlencoded + + grant_type=authorization_code&client_id=s6BhdRkqt3& + client_secret=gX1fBat3bV&code=i1WsRn1uB1& + redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb + +</PRE></DIV> +<P> + The authorization server MUST accept the client credentials using both the request + parameter, and the HTTP Basic authentication scheme. The authorization server MAY + support additional authentication schemes suitable for the transmission of a password. + +</P> +<A name="user-authorization"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.3"></A><H3>3. +Obtaining End-User Authorization</H3> + +<P> + When the client interacts with an end-user, the end-user MUST first grant the client + authorization to access its protected resources. Once obtained, the end-user access + grant is expressed as an authorization code which the client uses to obtain an access + token. To obtain an end-user authorization, the client sends the end-user to the + end-user authorization endpoint. + +</P> +<P> + At the end-user authorization endpoint, the end-user first authenticates with the + authorization server, and then grants or denies the access request. The way in which the + authorization server authenticates the end-user (e.g. username and password login, OpenID, + session cookies) and in which the authorization server obtains the end-user's + authorization, including whether it uses a secure channel such as TLS, is beyond the scope + of this specification. However, the authorization server MUST first verify the identity of + the end-user. + +</P> +<P> + The location of the end-user authorization endpoint can be found in the service + documentation, or can be obtained by using [[ OAuth Discovery ]]. The end-user + authorization endpoint URI MAY include a query component as defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC3986">[RFC3986]<SPAN> (</SPAN><SPAN class="info">Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.</SPAN><SPAN>)</SPAN></A> section 3, which must be retained when adding additional + query parameters. + +</P> +<P> + Since requests to the end-user authorization endpoint result in user authentication and + the transmission of sensitive information, the authorization server SHOULD require the + use of a transport-layer security mechanism such as TLS when sending requests to the + end-user authorization endpoint. + +</P> +<P> + In order to direct the end-user's user-agent to the authorization server, the client + constructs the request URI by adding the following parameters to the end-user + authorization endpoint URI query component using the + <TT>application/x-www-form-urlencoded</TT> format as defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#W3C.REC-html401-19991224">[W3C.REC‑html401‑19991224]<SPAN> (</SPAN><SPAN class="info">Raggett, D., Hors, A., and I. Jacobs, “HTML 4.01 Specification,” December 1999.</SPAN><SPAN>)</SPAN></A>: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>response_type</DT> +<DD> + + REQUIRED. The requested response: an access token, an authorization code, or both. The + parameter value MUST be set to <TT>token</TT> for requesting an + access token, <TT>code</TT> for requesting an authorization code, or + <TT>code_and_token</TT> to request both. The authorization server + MAY decline to provide one or more of these response types. [[ The 'code_and_token' + type is pending use cases and may be removed for the specification ]] + +</DD> +<DT>client_id</DT> +<DD> + + REQUIRED. The client identifier as described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>redirect_uri</DT> +<DD> + + REQUIRED, unless a redirection URI has been established between the client and + authorization server via other means. An absolute URI to which the authorization + server will redirect the user-agent to when the end-user authorization step is + completed. The authorization server SHOULD require the client to pre-register + their redirection URI. + +</DD> +<DT>scope</DT> +<DD> + + OPTIONAL. The scope of the access request expressed as a list of space-delimited + strings. The value of the <TT>scope</TT> parameter is defined + by the authorization server. If the value contains multiple space-delimited + strings, their order does not matter, and each string adds an additional access + range to the requested scope. + +</DD> +<DT>state</DT> +<DD> + + OPTIONAL. An opaque value used by the client to maintain state between the request + and callback. The authorization server includes this value when redirecting the + user-agent back to the client. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + 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-user's user-agent. The + authorization server MUST support the use of the HTTP <TT>GET</TT> + method for the end-user authorization endpoint, and MAY support the use of the + <TT>POST</TT> method as well. + +</P> +<P> + For example, the client directs the end-user's user-agent to make the following HTTP + request using transport-layer security (line breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + GET /authorize?response_type=code&client_id=s6BhdRkqt3& + redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 + Host: server.example.com + +</PRE></DIV> +<P> + If the client has previously registered a redirection URI with the authorization server, + the authorization server MUST verify that the redirection URI received matches the + registered URI associated with the client identifier. [[ provide guidance on how to + perform matching ]] + +</P> +<P> + Parameters sent without a value MUST be treated as if they were omitted from the request. + The authorization server SHOULD ignore unrecognized request parameters. + +</P> +<P> + The authorization server validates the request to ensure all required parameters are + present and valid. If the request is invalid, the authorization server immediately + redirects the user-agent back to the client using the redirection URI provided with the + appropriate error code as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#auth-error">Section 3.2<SPAN> (</SPAN><SPAN class="info">Error Response</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + The authorization server authenticates the end-user and obtains an authorization + decision (by asking the end-user or by establishing approval via other means). When a + decision has been established, the authorization server directs the end-user's + user-agent to the provided client redirection URI using an HTTP redirection response, + or by other means available to it via the end-user's user-agent. + +</P> +<A name="anchor10"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.3.1"></A><H3>3.1. +Authorization Response</H3> + +<P> + If the end-user grants the access request, the authorization server issues an access + token, an authorization code, or both, and delivers them to the client by adding the + following parameters to the redirection URI (as described below): + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>code</DT> +<DD> + + REQUIRED if the response type is <TT>code</TT> or + <TT>code_and_token</TT>, otherwise MUST NOT be included. The + authorization code generated by the authorization server. The authorization code + SHOULD expire shortly after it is issued. The authorization server MUST invalidate + the authorization code after a single usage. The authorization code is bound to the + client identifier and redirection URI. + +</DD> +<DT>access_token</DT> +<DD> + + REQUIRED if the response type is <TT>token</TT> or + <TT>code_and_token</TT>, otherwise MUST NOT be included. The + access token issued by the authorization server. The access token string MUST comply + with the access-token rule defined in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#authz-header">Section 5.1.1<SPAN> (</SPAN><SPAN class="info">The Authorization Request Header Field</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>expires_in</DT> +<DD> + + OPTIONAL. The duration in seconds of the access token lifetime if an access token + is included. For example, the value <TT>3600</TT> denotes that the + access token will expire in one hour from the time the response was generated by the + authorization server. + +</DD> +<DT>scope</DT> +<DD> + + OPTIONAL. The scope of the access token as a list of space-delimited strings if an + access token is included. The value of the <TT>scope</TT> + parameter is defined by the authorization server. If the value contains multiple + space-delimited strings, their order does not matter, and each string adds an + additional access range to the requested scope. The authorization server SHOULD + include the parameter if the requested scope is different from the one requested by + the client. + +</DD> +<DT>state</DT> +<DD> + + REQUIRED if the <TT>state</TT> parameter was present in the + client authorization request. Set to the exact value received from the client. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + The method in which the authorization server adds the parameter to the redirection + URI is determined by the response type requested by the client in the authorization + request using the <TT>response_type</TT> parameter. + +</P> +<P> + If the response type is <TT>code</TT>, the authorization + server adds the parameters to the redirection URI query component using the + <TT>application/x-www-form-urlencoded</TT> format as defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#W3C.REC-html401-19991224">[W3C.REC‑html401‑19991224]<SPAN> (</SPAN><SPAN class="info">Raggett, D., Hors, A., and I. Jacobs, “HTML 4.01 Specification,” December 1999.</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + For example, the authorization server redirects the end-user's user-agent by + sending the following HTTP response: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 302 Found + Location: https://client.example.com/cb?code=i1WsRn1uB1 + +</PRE></DIV> +<P> + If the response type is <TT>token</TT>, the authorization + server adds the parameters to the redirection URI fragment component using the + <TT>application/x-www-form-urlencoded</TT> format as defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#W3C.REC-html401-19991224">[W3C.REC‑html401‑19991224]<SPAN> (</SPAN><SPAN class="info">Raggett, D., Hors, A., and I. Jacobs, “HTML 4.01 Specification,” December 1999.</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + For example, the authorization server redirects the end-user's user-agent by + sending the following HTTP response: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 302 Found + Location: http://example.com/rd#access_token=FJQbwq9&expires_in=3600 + +</PRE></DIV> +<P> + If the response type is <TT>code_and_token</TT>, the authorization + server adds the <TT>code</TT> and <TT>state</TT> + parameters to the redirection URI query component and the + <TT>access_token</TT>, <TT>scope</TT>, and + <TT>expires_in</TT> to the redirection URI fragment using the + <TT>application/x-www-form-urlencoded</TT> format as defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#W3C.REC-html401-19991224">[W3C.REC‑html401‑19991224]<SPAN> (</SPAN><SPAN class="info">Raggett, D., Hors, A., and I. Jacobs, “HTML 4.01 Specification,” December 1999.</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + For example, the authorization server redirects the end-user's user-agent by + sending the following HTTP response (line breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 302 Found + Location: http://example.com/rd?code=i1WsRn1uB1 + #access_token=FJQbwq9&expires_in=3600 + +</PRE></DIV> +<P> + Clients SHOULD ignore unrecognized response parameters. The sizes of tokens and other + values received from the authorization server, are left undefined by this specification. + Clients should avoid making assumptions about value sizes. Servers should document the + expected size of any value they issue. + +</P> +<A name="auth-error"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.3.2"></A><H3>3.2. +Error Response</H3> + +<P> + If the end-user denies the access request or if the request is invalid, the authorization + server informs the client by adding the following parameters to the redirection URI query + component using the <TT>application/x-www-form-urlencoded</TT> format + as defined by <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#W3C.REC-html401-19991224">[W3C.REC‑html401‑19991224]<SPAN> (</SPAN><SPAN class="info">Raggett, D., Hors, A., and I. Jacobs, “HTML 4.01 Specification,” December 1999.</SPAN><SPAN>)</SPAN></A>: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>error</DT> +<DD> + + REQUIRED. A single error code as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#auth-error-codes">Section 3.2.1<SPAN> (</SPAN><SPAN class="info">Error Codes</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>error_description</DT> +<DD> + OPTIONAL. A human-readable text providing additional information, used to assist in + the understanding and resolution of the error occurred. + +</DD> +<DT>error_uri</DT> +<DD> + OPTIONAL. A URI identifying a human-readable web page with information about the + error, used to provide the end-user with additional information about the error. + +</DD> +<DT>state</DT> +<DD> + + REQUIRED if the <TT>state</TT> parameter was present in the + client authorization request. Set to the exact value received from the client. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example, the authorization server redirects the end-user's user-agent by + sending the following HTTP response: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 302 Found + Location: https://client.example.com/cb?error=access-denied + +</PRE></DIV> +<A name="auth-error-codes"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.3.2.1"></A><H3>3.2.1. +Error Codes</H3> + +<P> + The authorization server includes one of the following error codes with the error + response: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>invalid_request</DT> +<DD> + + The request is missing a required parameter, includes an unsupported parameter or + parameter value, or is otherwise malformed. + +</DD> +<DT>invalid_client</DT> +<DD> + + The client identifier provided is invalid. + +</DD> +<DT>unauthorized_client</DT> +<DD> + + The client is not authorized to use the requested response type. + +</DD> +<DT>redirect_uri_mismatch</DT> +<DD> + + The redirection URI provided does not match a pre-registered value. + +</DD> +<DT>access_denied</DT> +<DD> + + The end-user or authorization server denied the request. + +</DD> +<DT>unsupported_response_type</DT> +<DD> + + The requested response type is not supported by the authorization server. + +</DD> +<DT>invalid_scope</DT> +<DD> + + The requested scope is invalid, unknown, or malformed. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + [[ Add mechanism for extending error codes ]] + +</P> +<A name="obtaining-token"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4"></A><H3>4. +Obtaining an Access Token</H3> + +<P> + The client obtains an access token by authenticating with the authorization server and + presenting its access grant (in the form of an authorization code, resource owner + credentials, an assertion, or a refresh token). + +</P> +<P> + Since requests to the token endpoint result in the transmission of plain text + credentials in the HTTP request and response, the authorization server MUST require the + use of a transport-layer security mechanism when sending requests to the token endpoints. + Servers MUST support TLS 1.2 as defined in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC5246">[RFC5246]<SPAN> (</SPAN><SPAN class="info">Dierks, T. and E. Rescorla, “The Transport Layer Security (TLS) Protocol Version 1.2,” August 2008.</SPAN><SPAN>)</SPAN></A>, and MAY support + additional transport-layer security mechanisms. + +</P> +<P> + The client requests an access token by making an HTTP <TT>POST</TT> + request to the token endpoint. The location of the token endpoint can be found in the + service documentation, or can be obtained by using [[ OAuth Discovery ]]. The token + endpoint URI MAY include a query component. + +</P> +<P> + The client authenticates with the authorization server by adding its client credentials to + the request as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A>. The authorization + server MAY allow unauthenticated access token requests when the client identity does not + matter (e.g. anonymous client) or when the client identity is established via other means + (e.g. using an assertion access grant). + +</P> +<P> + The client constructs the request by including the following parameters using the + <TT>application/x-www-form-urlencoded</TT> format in the HTTP request + entity-body: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>grant_type</DT> +<DD> + + REQUIRED. The access grant type included in the request. Value MUST be one of + <TT>authorization_code</TT>, + <TT>password</TT>, + <TT>assertion</TT>, + <TT>refresh_token</TT>, or <TT>none</TT>. + +</DD> +<DT>client_id</DT> +<DD> + + REQUIRED, unless the client identity can be establish via other means (e.g. assertion). + The client identifier as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>scope</DT> +<DD> + + OPTIONAL. The scope of the access request expressed as a list of space-delimited + strings. The value of the <TT>scope</TT> parameter is defined + by the authorization server. If the value contains multiple space-delimited + strings, their order does not matter, and each string adds an additional access + range to the requested scope. If the access grant being used already represents an + approved scope (e.g. authorization code, assertion), the requested scope MUST be equal + or lesser than the scope previously granted. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + In addition, the client MUST include the appropriate parameters listed for the selected + access grant type as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-grant-types">Section 4.1<SPAN> (</SPAN><SPAN class="info">Access Grant Types</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + Parameters sent without a value MUST be treated as if they were omitted from the request. + The authorization server SHOULD ignore unrecognized request parameters. + +</P> +<A name="access-grant-types"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.1"></A><H3>4.1. +Access Grant Types</H3> + +<P> + The client requests an access token using one of the four types of access grants: + authorization code, password credentials, assertion, or refresh token. + +</P> +<P> + When requesting an access token using the <TT>none</TT> access grant + type (no access grant is included), the client is requesting access to the protected + resources under its control, or those of another resource owner which has been previously + arranged with the authorization server (the method of which is beyond the scope of this + specification). + +</P> +<A name="anchor11"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.1.1"></A><H3>4.1.1. +Authorization Code</H3> + +<P> + The client includes the authorization code using the + <TT>authorization_code</TT> access grant type and the following + parameters: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>code</DT> +<DD> + + REQUIRED. The authorization code received from the authorization server. + +</DD> +<DT>redirect_uri</DT> +<DD> + + REQUIRED. The redirection URI used in the initial request. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example, the client makes the following HTTP request by including its client + credentials via the <TT>client_secret</TT> parameter described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A> and using transport-layer security (line + breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /token HTTP/1.1 + Host: server.example.com + Content-Type: application/x-www-form-urlencoded + + grant_type=authorization_code&client_id=s6BhdRkqt3& + client_secret=gX1fBat3bV&code=i1WsRn1uB1& + redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb + +</PRE></DIV> +<P> + The authorization server MUST: + + </P> +<UL class="text"> +<LI> + Validate the client credentials (if present) and ensure they match the + authorization code. + +</LI> +<LI> + Verify that the authorization code and redirection URI are all valid and match its + stored association. + +</LI> +</UL><P> + +</P> +<P> + If the request is valid, the authorization server issues a successful response as + described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-token-response">Section 4.2<SPAN> (</SPAN><SPAN class="info">Access Token Response</SPAN><SPAN>)</SPAN></A>. + +</P> +<A name="anchor12"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.1.2"></A><H3>4.1.2. +Resource Owner Password Credentials</H3> + +<P> + The client includes the resource owner credentials using the + <TT>password</TT> access grant type and the following + parameters: [[ add internationalization consideration for username and password ]] + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>username</DT> +<DD> + + REQUIRED. The resource owner's username. + +</DD> +<DT>password</DT> +<DD> + + REQUIRED. The resource owner's password. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example, the client makes the following HTTP request by including its client + credentials via the <TT>client_secret</TT> parameter described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A> and using transport-layer security (line + breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /token HTTP/1.1 + Host: server.example.com + Content-Type: application/x-www-form-urlencoded + + grant_type=password&client_id=s6BhdRkqt3& + client_secret=47HDu8s&username=johndoe&password=A3ddj3w + +</PRE></DIV> +<P> + The authorization server MUST validate the client credentials (if present) and end-user + credentials and if valid issue an access token response as described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-token-response">Section 4.2<SPAN> (</SPAN><SPAN class="info">Access Token Response</SPAN><SPAN>)</SPAN></A>. + +</P> +<A name="anchor13"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.1.3"></A><H3>4.1.3. +Assertion</H3> + +<P> + The client includes the assertion using the <TT>assertion</TT> access + grant type and the following parameters: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>assertion_type</DT> +<DD> + + REQUIRED. The format of the assertion as defined by the authorization server. The + value MUST be an absolute URI. + +</DD> +<DT>assertion</DT> +<DD> + + REQUIRED. The assertion. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example, the client makes the following HTTP request using transport-layer + security, and client authentication is achieved via the assertion (line breaks are + for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /token HTTP/1.1 + Host: server.example.com + Content-Type: application/x-www-form-urlencoded + + grant_type=assertion& + assertion_type=urn%3Aoasis%3Anames%3Atc%3ASAML%3A2.0%3Aassertion& + assertion=PHNhbWxwOl...[omitted for brevity]...ZT4%3D + +</PRE></DIV> +<P> + The authorization server MUST validate the client credentials (if present) and the + assertion and if valid issues an access token response as described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-token-response">Section 4.2<SPAN> (</SPAN><SPAN class="info">Access Token Response</SPAN><SPAN>)</SPAN></A>. The authorization server SHOULD NOT issue a + refresh token (instead, require the client to use the same or new assertion). + +</P> +<P> + Authorization servers SHOULD issue access tokens with a limited lifetime and require + clients to refresh them by requesting a new access token using the same assertion if it + is still valid. Otherwise the client MUST obtain a new valid assertion. + +</P> +<A name="token-refresh"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.1.4"></A><H3>4.1.4. +Refresh Token</H3> + +<P> + The client includes the refresh token using the + <TT>refresh_token</TT> access grant type and the following + parameter: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>refresh_token</DT> +<DD> + + REQUIRED. The refresh token associated with the access token to be refreshed. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example, the client makes the following HTTP request by including its client + credentials via the <TT>client_secret</TT> parameter described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#client-authentication">Section 2<SPAN> (</SPAN><SPAN class="info">Client Credentials</SPAN><SPAN>)</SPAN></A> and using transport-layer security (line + breaks are for display purposes only): + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /token HTTP/1.1 + Host: server.example.com + Content-Type: application/x-www-form-urlencoded + + grant_type=refresh_token&client_id=s6BhdRkqt3& + client_secret=8eSEIpnqmM&refresh_token=n4E9O119d + +</PRE></DIV> +<P> + The authorization server MUST verify the client credentials (if present), the validity + of the refresh token, and that the resource owner's authorization is still valid. If + the request is valid, the authorization server issues an access token response as + described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#access-token-response">Section 4.2<SPAN> (</SPAN><SPAN class="info">Access Token Response</SPAN><SPAN>)</SPAN></A>. The authorization server MAY + issue a new refresh token. + +</P> +<A name="access-token-response"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.2"></A><H3>4.2. +Access Token Response</H3> + +<P> + After receiving and verifying a valid and authorized access token request from the + client, the authorization server issues the access token and optional refresh token, + and constructs the response by adding the following parameters to the entity body of + the HTTP response with a 200 (OK) status code: + +</P> +<P> + The token response contains the following parameters: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>access_token</DT> +<DD> + + REQUIRED. The access token issued by the authorization server. The access token + string MUST comply with the access-token rule defined in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#authz-header">Section 5.1.1<SPAN> (</SPAN><SPAN class="info">The Authorization Request Header Field</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>expires_in</DT> +<DD> + + OPTIONAL. The duration in seconds of the access token lifetime. For example, the + value <TT>3600</TT> denotes that the access token will expire in + one hour from the time the response was generated by the authorization server. + +</DD> +<DT>refresh_token</DT> +<DD> + + OPTIONAL. The refresh token used to obtain new access tokens using the same + end-user access grant as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#token-refresh">Section 4.1.4<SPAN> (</SPAN><SPAN class="info">Refresh Token</SPAN><SPAN>)</SPAN></A>. The + authorization server SHOULD NOT issue a refresh token when the access grant type is + set to <TT>none</TT>. + +</DD> +<DT>scope</DT> +<DD> + + OPTIONAL. The scope of the access token as a list of space-delimited strings. The + value of the <TT>scope</TT> parameter is defined by the + authorization server. If the value contains multiple space-delimited strings, + their order does not matter, and each string adds an additional access range to + the requested scope. The authorization server SHOULD include the parameter if the + requested scope is different from the one requested by the client. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + The parameters are including in the entity body of the HTTP response using the + <TT>application/json</TT> media type as defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC4627">[RFC4627]<SPAN> (</SPAN><SPAN class="info">Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</SPAN><SPAN>)</SPAN></A>. The parameters are serialized into a JSON structure by + adding each parameter at the highest structure level. Parameter names and string values + are included as JSON strings. Numerical values are included as JSON numbers. + +</P> +<P> + The authorization server MUST include the HTTP <TT>Cache-Control</TT> + response header field with a value of <TT>no-store</TT> in any + response containing tokens, secrets, or other sensitive information. + +</P> +<P> + For example: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 200 OK + Content-Type: application/json + Cache-Control: no-store + + { + "access_token":"SlAV32hkKG", + "expires_in":3600, + "refresh_token":"8xLOxBtZp8" + } + +</PRE></DIV> +<P> + Clients SHOULD ignore unrecognized response parameters. The sizes of tokens and other + values received from the authorization server, are left undefined by this specification. + Clients should avoid making assumptions about value sizes. Servers should document the + expected size of any value they issue. + +</P> +<A name="token-error"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.3"></A><H3>4.3. +Error Response</H3> + +<P> + If the token request is invalid or unauthorized, the authorization server constructs + the response by adding the following parameter to the entity body of the HTTP + response using the <TT>application/json</TT> media type: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>error</DT> +<DD> + + REQUIRED. A single error code as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#token-error-codes">Section 4.3.1<SPAN> (</SPAN><SPAN class="info">Error Codes</SPAN><SPAN>)</SPAN></A>. + +</DD> +<DT>error_description</DT> +<DD> + OPTIONAL. A human-readable text providing additional information, used to assist in + the understanding and resolution of the error occurred. + +</DD> +<DT>error_uri</DT> +<DD> + OPTIONAL. A URI identifying a human-readable web page with information about the + error, used to provide the end-user with additional information about the error. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + For example: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 400 Bad Request + Content-Type: application/json + Cache-Control: no-store + + { + "error":"invalid_request" + } + +</PRE></DIV> +<P> + If the client provided invalid credentials using an HTTP authentication scheme via the + <TT>Authorization</TT> request header field, the authorization server + MUST respond with the HTTP 401 (Unauthorized) status code. Otherwise, the authorization + server SHALL respond with the HTTP 400 (Bad Request) status code. + +</P> +<A name="token-error-codes"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.4.3.1"></A><H3>4.3.1. +Error Codes</H3> + +<P> + The authorization server includes one of the following error codes with the error + response: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>invalid_request</DT> +<DD> + + The request is missing a required parameter, includes an unsupported parameter or + parameter value, repeats a parameter, includes multiple credentials, utilizes + more than one mechanism for authenticating the client, or is otherwise malformed. + +</DD> +<DT>invalid_client</DT> +<DD> + + The client identifier provided is invalid, the client failed to authenticate, the + client did not include its credentials, provided multiple client credentials, or + used unsupported credentials type. + +</DD> +<DT>unauthorized_client</DT> +<DD> + + The authenticated client is not authorized to use the access grant type provided. + +</DD> +<DT>invalid_grant</DT> +<DD> + + The provided access grant is invalid, expired, or revoked (e.g. invalid assertion, + expired authorization token, bad end-user password credentials, or mismatching + authorization code and redirection URI). + +</DD> +<DT>unsupported_grant_type</DT> +<DD> + + The access grant included - its type or another attribute - is not supported by the + authorization server. + +</DD> +<DT>invalid_scope</DT> +<DD> + + The requested scope is invalid, unknown, malformed, or exceeds the previously + granted scope. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + [[ Add mechanism for extending error codes ]] + +</P> +<A name="access-resource"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5"></A><H3>5. +Accessing a Protected Resource</H3> + +<P> + Clients access protected resources by presenting an access token to the resource server. + Access tokens act as bearer tokens, where the token string acts as a shared symmetric + secret. This requires treating the access token with the same care as other secrets (e.g. + end-user passwords). Access tokens SHOULD NOT be sent in the clear over an insecure + channel. + +</P> +<P> + However, when it is necessary to transmit access tokens in the clear without a secure + channel, authorization servers SHOULD issue access tokens with limited scope and lifetime + to reduce the potential risk from a compromised access token. + +</P> +<P> + Clients MUST NOT make authenticated requests with an access token to unfamiliar resource + servers, regardless of the presence of a secure channel. + +</P> +<P> + The resource server MUST validate the access token and ensure it has not expired and + that its scope covers the requested resource. The methods used by the resource server + to validate the access token are beyond the scope of this specification, but generally + involve an interaction or coordination between the resource server and authorization + server. + +</P> +<A name="anchor14"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5.1"></A><H3>5.1. +Authenticated Requests</H3> + +<P> + Clients make authenticated token requests using the + <TT>Authorization</TT> request header field. Resource servers MUST + accept authenticated requests using the <TT>OAuth</TT> HTTP + authentication scheme as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#authz-header">Section 5.1.1<SPAN> (</SPAN><SPAN class="info">The Authorization Request Header Field</SPAN><SPAN>)</SPAN></A>, and MAY support + additional methods. + +</P> +<P> + Alternatively, clients MAY attempt to include the access token using the HTTP request + URI in the query component as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#query-param">Section 5.1.2<SPAN> (</SPAN><SPAN class="info">URI Query Parameter</SPAN><SPAN>)</SPAN></A>, or in the HTTP + body when using the <TT>application/x-www-form-urlencoded</TT> content + type as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#body-param">Section 5.1.3<SPAN> (</SPAN><SPAN class="info">Form-Encoded Body Parameter</SPAN><SPAN>)</SPAN></A>. Resource server MAY support these + alternative methods. + +</P> +<P> + Clients SHOULD only use the request URI or body when the + <TT>Authorization</TT> request header field is not available, and MUST + NOT use more than one method in each request. + +</P> +<A name="authz-header"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5.1.1"></A><H3>5.1.1. +The Authorization Request Header Field</H3> + +<P> + The <TT>Authorization</TT> request header field is used by clients + to make authenticated token requests. The client uses the + <TT>OAuth</TT> authentication scheme to include the access token in + the request. + +</P> +<P> + For example: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + GET /resource HTTP/1.1 + Host: server.example.com + Authorization: OAuth vF9dft4qmT + +</PRE></DIV> +<P> + The <TT>Authorization</TT> header field uses the framework defined by + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2617">[RFC2617]<SPAN> (</SPAN><SPAN class="info">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, “HTTP Authentication: Basic and Digest Access Authentication,” June 1999.</SPAN><SPAN>)</SPAN></A> as follows: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + credentials = "OAuth" RWS access-token [ CS 1#auth-param ] + access-token = 1*( quoted-char / <"> ) + + CS = OWS "," OWS + + quoted-char = "!" / "#" / "$" / "%" / "&" / "'" / "(" + / ")" / "*" / "+" / "-" / "." / "/" / DIGIT + / ":" / "<" / "=" / ">" / "?" / "@" / ALPHA + / "[" / "]" / "^" / "_" / "`" / "{" / "|" + / "}" / "~" / "\" / "," / ";" + +</PRE></DIV> +<P> + </P> +<BLOCKQUOTE class="text"> +<P> + NOTE: <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC5849">[RFC5849]<SPAN> (</SPAN><SPAN class="info">Hammer-Lahav, E., “The OAuth 1.0 Protocol,” April 2010.</SPAN><SPAN>)</SPAN></A> defines a different format for the + <TT>OAuth</TT> authentication scheme. Resource servers can + differentiate between the two protocol versions based on the presence of the + <TT>oauth_signature_method</TT> which is REQUIRED in the + previous version and is not supported by this specification. + +</P> +</BLOCKQUOTE><P> + +</P> +<A name="query-param"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5.1.2"></A><H3>5.1.2. +URI Query Parameter</H3> + +<P> + When including the access token in the HTTP request URI, the client adds the access + token to the request URI query component as defined by <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC3986">[RFC3986]<SPAN> (</SPAN><SPAN class="info">Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.</SPAN><SPAN>)</SPAN></A> using + the <TT>oauth_token</TT> parameter. + +</P> +<P> + For example, the client makes the following HTTP request using transport-layer + security: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + GET /resource?oauth_token=vF9dft4qmT HTTP/1.1 + Host: server.example.com + +</PRE></DIV> +<P> + The HTTP request URI query can include other request-specific parameters, in which + case, the <TT>oauth_token</TT> parameters SHOULD be appended + following the request-specific parameters, properly separated by an + <TT>&</TT> character (ASCII code 38). + +</P> +<P> + For example: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + http://example.com/resource?x=y&oauth_token=vF9dft4qmT + +</PRE></DIV> +<P> + </P> +<BLOCKQUOTE class="text"> +<P> + NOTE: The <TT>oauth_token</TT> parameter is used by the previous + version of the OAuth protocol as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC5849">[RFC5849]<SPAN> (</SPAN><SPAN class="info">Hammer-Lahav, E., “The OAuth 1.0 Protocol,” April 2010.</SPAN><SPAN>)</SPAN></A>. Resource + servers can differentiate between the two protocol versions based on the presence + of the <TT>oauth_signature_method</TT> which is REQUIRED in the + previous version and is not supported by this specification. + +</P> +</BLOCKQUOTE><P> + +</P> +<A name="body-param"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5.1.3"></A><H3>5.1.3. +Form-Encoded Body Parameter</H3> + +<P> + When including the access token in the HTTP request entity-body, the client adds the + access token to the request body using the <TT>oauth_token</TT> + parameter. The client can use this method only if the following REQUIRED conditions are + met: + + </P> +<UL class="text"> +<LI> + The entity-body is single-part. + +</LI> +<LI> + The entity-body follows the encoding requirements of the + <TT>application/x-www-form-urlencoded</TT> content-type as + defined by <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#W3C.REC-html401-19991224">[W3C.REC‑html401‑19991224]<SPAN> (</SPAN><SPAN class="info">Raggett, D., Hors, A., and I. Jacobs, “HTML 4.01 Specification,” December 1999.</SPAN><SPAN>)</SPAN></A>. + +</LI> +<LI> + The HTTP request entity-header includes the <TT>Content-Type</TT> + header field set to <TT>application/x-www-form-urlencoded</TT>. + +</LI> +<LI> + The HTTP request method is <TT>POST</TT>, + <TT>PUT</TT>, or <TT>DELETE</TT>. + +</LI> +</UL><P> + +</P> +<P> + The entity-body can include other request-specific parameters, in which case, the + <TT>oauth_token</TT> parameters SHOULD be appended following the + request-specific parameters, properly separated by an <TT>&</TT> + character (ASCII code 38). + +</P> +<P> + For example, the client makes the following HTTP request using transport-layer + security: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + POST /resource HTTP/1.1 + Host: server.example.com + Content-Type: application/x-www-form-urlencoded + + oauth_token=vF9dft4qmT + +</PRE></DIV> +<P> + </P> +<BLOCKQUOTE class="text"> +<P> + NOTE: The <TT>oauth_token</TT> parameter is used by the previous + version of the OAuth protocol as described in <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC5849">[RFC5849]<SPAN> (</SPAN><SPAN class="info">Hammer-Lahav, E., “The OAuth 1.0 Protocol,” April 2010.</SPAN><SPAN>)</SPAN></A>. Resource + servers can differentiate between the two protocol versions based on the presence + of the <TT>oauth_signature_method</TT> which is REQUIRED in the + previous version and is not supported by this specification. + +</P> +</BLOCKQUOTE><P> + +</P> +<A name="authn-header"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5.2"></A><H3>5.2. +The WWW-Authenticate Response Header Field</H3> + +<P> + If the protected resource request contains an invalid access token or is malformed, the + resource server MUST include the HTTP <TT>WWW-Authenticate</TT> + response header field. The <TT>WWW-Authenticate</TT> header field + uses the framework defined by <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2617">[RFC2617]<SPAN> (</SPAN><SPAN class="info">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, “HTTP Authentication: Basic and Digest Access Authentication,” June 1999.</SPAN><SPAN>)</SPAN></A> as follows: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + challenge = "OAuth" RWS token-challenge + + token-challenge = realm + [ CS error ] + [ CS error-desc ] + [ CS error-uri ] + [ CS scope ] + [ CS 1#auth-param ] + + error = "error" "=" <"> token <"> + error-desc = "error_description" "=" quoted-string + error-uri = "error_uri" = <"> URI-Reference <"> + scope = quoted-value / + <"> quoted-value *( 1*SP quoted-value ) <"> + quoted-value = 1*quoted-char + +</PRE></DIV> +<P> + For example: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 401 Unauthorized + WWW-Authenticate: OAuth realm='Example Service', error='expired-token' + +</PRE></DIV> +<P> + The <TT>realm</TT> attribute is used to provide the protected + resources partition as defined by <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC2617">[RFC2617]<SPAN> (</SPAN><SPAN class="info">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, “HTTP Authentication: Basic and Digest Access Authentication,” June 1999.</SPAN><SPAN>)</SPAN></A>. [[ add explanation ]] + +</P> +<P> + The <TT>error</TT> attribute is used to provide the client with the + reason why the access request was declined. The parameter values are described in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#resource-error-codes">Section 5.2.1<SPAN> (</SPAN><SPAN class="info">Error Codes</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + The <TT>error_description</TT> attribute provides a human-readable + text containing additional information, used to assist in the understanding and + resolution of the error occurred. + +</P> +<P> + The <TT>error_uri</TT> attribute provides a URI identifying a + human-readable web page with information about the error, used to offer the end-user + with additional information about the error. If the value is not an absolute URI, it is + relative to the URI of the requested protected resource. + +</P> +<P> + The <TT>scope</TT> attribute is a space-delimited list of scope values + indicating the required scope of the access token for accessing the requested resource. + +</P> +<A name="resource-error-codes"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.5.2.1"></A><H3>5.2.1. +Error Codes</H3> + +<P> + The authorization server includes one of the following error codes with the error + response: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>invalid_request</DT> +<DD> + + The request is missing a required parameter, includes an unsupported parameter or + parameter value, repeats the same parameter, uses more than one method for + including an access token, or is otherwise malformed. The resource server MUST + respond with the HTTP 400 (Bad Request) status code. + +</DD> +<DT>invalid_token</DT> +<DD> + + The access token provided is invalid. Resource servers SHOULD use this error code + when receiving an expired token which cannot be refreshed to indicate to the client + that a new authorization is necessary. The resource server MUST respond with the + HTTP 401 (Unauthorized) status code. + +</DD> +<DT>expired_token</DT> +<DD> + + The access token provided has expired. Resource servers SHOULD only use this error + code when the client is expected to be able to handle the response and request a + new access token using the refresh token issued with the expired access token. The + resource server MUST respond with the HTTP 401 (Unauthorized) status code. + +</DD> +<DT>insufficient_scope</DT> +<DD> + + The request requires higher privileges than provided by the access token. The + resource server SHOULD respond with the HTTP 403 (Forbidden) status code and MAY + include the <TT>scope</TT> attribute with the scope necessary to + access the protected resource. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<P> + [[ Add mechanism for extending error codes ]] + +</P> +<P> + If the request lacks any authentication information (i.e. the client was unaware + authentication is necessary or attempted using an unsupported authentication method), + the resource server SHOULD not include an error code or other error information. + +</P> +<P> + For example: + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + HTTP/1.1 401 Unauthorized + WWW-Authenticate: OAuth realm='Example Service' + +</PRE></DIV> +<A name="anchor15"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.6"></A><H3>6. +Extensibility</H3> + +<A name="anchor16"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.6.1"></A><H3>6.1. +Defining New Client Credentials Types</H3> + +<P> + [[ TBD ]] + +</P> +<A name="anchor17"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.6.2"></A><H3>6.2. +Defining New Endpoint Parameters</H3> + +<P> + Applications that wish to define new request or response parameters for use with the + end-user authorization endpoint or the token endpoint SHALL do so in one of two ways: + register them in the parameters registry (following the procedures in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#parameters-registry">Section 8.1<SPAN> (</SPAN><SPAN class="info">The OAuth Parameters Registry</SPAN><SPAN>)</SPAN></A>), or use the <TT>x_</TT> + parameter name prefix. + +</P> +<P> + Parameters utilizing the <TT>x_</TT> parameter name prefix MUST be + limited to vendor-specific extensions that are not commonly applicable, and are specific + to the implementation details of the authorization server where they are used. All other + new parameters MUST be registered, and MUST NOT use the <TT>x_</TT> + parameter name prefix. + +</P> +<P> + Parameter names MUST conform to the param-name ABNF, and parameter values syntax MUST be + well-defined (e.g., using ABNF, or a reference to the syntax of an existing parameter). + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + param-name = 1*name-char + name-char = "-" / "." / "_" / DIGIT / ALPHA + +</PRE></DIV> +<A name="anchor18"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.6.3"></A><H3>6.3. +Defining New Header Field Parameters</H3> + +<P> + Applications that wish to define new parameters for use in the OAuth + <TT>Authorization</TT> or <TT>WWW-Authenticate</TT> + header fields MUST register them in the parameters registry, following the procedures in + <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#parameters-registry">Section 8.1<SPAN> (</SPAN><SPAN class="info">The OAuth Parameters Registry</SPAN><SPAN>)</SPAN></A>. + +</P> +<P> + Parameter names MUST conform to the param-name ABNF and MUST NOT begin with + <TT>x_</TT>. Parameter values MUST conform to the param-value ABNF and + their syntax MUST be well-defined (e.g., using ABNF, or a reference to the syntax of an + existing parameter). + +</P><DIV style="display: table; width: 0; margin-left: 3em; margin-right: auto"><PRE> + param-value = quoted-value | quoted-string + +</PRE></DIV> +<A name="anchor19"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.6.4"></A><H3>6.4. +Defining New Access Grant Types</H3> + +<P> + The assertion access grant type was designed to allow the authorization server to + accept additional access grants not specified. Applications that wish to define + additional access grant types can do so by utilizing a new or existing assertion type + and format. + +</P> +<A name="anchor20"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.7"></A><H3>7. +Security Considerations</H3> + +<P> + [[ TBD ]] + +</P> +<A name="anchor21"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.8"></A><H3>8. +IANA Considerations</H3> + +<A name="parameters-registry"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.8.1"></A><H3>8.1. +The OAuth Parameters Registry</H3> + +<P> + This document establishes the OAuth parameters registry. + +</P> +<P> + Additional parameters to be use in the end-user authorization endpoint request, the + end-user authorization endpoint response, the token endpoint request, the token endpoint + response, the <TT>Authorization</TT> header field, or the + <TT>WWW-Authenticate</TT> header field, are registered on the advice + of one or more Designated Experts (appointed by the IESG or their delegate), with a + Specification Required (using terminology from <A class="info" href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#RFC5226">[RFC5226]<SPAN> (</SPAN><SPAN class="info">Narten, T. and H. Alvestrand, “Guidelines for Writing an IANA Considerations Section in RFCs,” May 2008.</SPAN><SPAN>)</SPAN></A>). However, to + allow for the allocation of values prior to publication, the Designated Expert(s) may + approve registration once they are satisfied that such a specification will be published. + +</P> +<P> + Registration requests should be sent to the [TBD]@ietf.org mailing list for review and + comment, with an appropriate subject (e.g., "Request for parameter: example"). + [[ Note to RFC-EDITOR: The name of the mailing list should be determined in consultation + with the IESG and IANA. Suggested name: oauth-ext-review. ]] + +</P> +<P> + Before a period of 14 days has passed, the Designated Expert(s) will either approve or + deny the registration request, communicating this decision both to the review list and to + IANA. Denials should include an explanation and, if applicable, suggestions as to how to + make the request successful. Registration requests that are undetermined for a period + longer than 21 days can be brought to the IESG's attention (using the iesg@iesg.org + mailing list) for resolution. + +</P> +<A name="anchor22"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.8.1.1"></A><H3>8.1.1. +Registration Template</H3> + +<P> + </P> +<BLOCKQUOTE class="text"><DL> +<DT>Parameter name:</DT> +<DD> + The name requested (e.g., "example"). + +</DD> +<DT>Parameter usage location:</DT> +<DD> + The location(s) where parameter can be used. The possible locations are: the + end-user authorization endpoint request, the end-user authorization endpoint + response, the token endpoint request, the token endpoint response, the + <TT>Authorization</TT> header field, or the + <TT>WWW-Authenticate</TT> header field. + +</DD> +<DT>Change controller:</DT> +<DD> + For standards-track RFCs, state "IETF". For others, give the name of the + responsible party. Other details (e.g., postal address, e-mail address, home page + URI) may also be included. + +</DD> +<DT>Specification document(s):</DT> +<DD> + Reference to document that specifies the parameter, preferably including a URI that + can be used to retrieve a copy of the document. An indication of the relevant + sections may also be included, but is not required. + +</DD> +<DT>Related information:</DT> +<DD> + Optionally, citations to additional documents containing further relevant + information. + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<A name="anchor23"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.8.1.2"></A><H3>8.1.2. +Example</H3> + +<P> + The following is the parameter registration request for the + <TT>scope</TT> parameter as defined in this specification: + + </P> +<BLOCKQUOTE class="text"><DL> +<DT>Parameter name:</DT> +<DD> + scope + +</DD> +<DT>Parameter usage location:</DT> +<DD> + The end-user authorization endpoint request, the end-user authorization endpoint + response, the token endpoint request, the token endpoint response, and the + <TT>WWW-Authenticate</TT> header field. + +</DD> +<DT>Change controller:</DT> +<DD> + IETF + +</DD> +<DT>Specification document(s):</DT> +<DD> + [[ this document ]] + +</DD> +<DT>Related information:</DT> +<DD> + None + +</DD> +</DL></BLOCKQUOTE><P> + +</P> +<A name="anchor24"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.A"></A><H3>Appendix A. +Examples</H3> + +<P> + [[ TBD ]] + +</P> +<A name="anchor25"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.B"></A><H3>Appendix B. +Contributors</H3> + +<P> + The following people contributed to preliminary versions of this document: + Blaine Cook (BT), Brian Eaton (Google), Yaron Goland (Microsoft), Brent Goldman (Facebook), + Raffi Krikorian (Twitter), Luke Shepard (Facebook), and Allen Tom (Yahoo!). The content and + concepts within are a product of the OAuth community, WRAP community, and the OAuth Working + Group. + +</P> +<P> + The OAuth Working Group has dozens of very active contributors who proposed ideas and + wording for this document, including: [[ If your name is missing or you think someone + should be added here, please send Eran a note - don't be shy ]] + +</P> +<P> + Michael Adams, Andrew Arnott, Dirk Balfanz, Brian Campbell, Leah Culver, Brian Ellin, + Igor Faynberg, George Fletcher, Evan Gilbert, Justin Hart, John Kemp, Chasen Le Hara, + Torsten Lodderstedt, Eve Maler, James Manger, Laurence Miao, Chuck Mortimore, + Justin Richer, Peter Saint-Andre, Nat Sakimura, Rob Sayre, Marius Scurtescu, Justin Smith, + Jeremy Suriel, and Franklin Tse. + +</P> +<A name="anchor26"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.C"></A><H3>Appendix C. +Acknowledgements</H3> + +<P> + [[ Add OAuth 1.0a authors + WG contributors ]] + +</P> +<A name="anchor27"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.D"></A><H3>Appendix D. +Document History</H3> + +<P> + [[ to be removed by RFC editor before publication as an RFC ]] + +</P> +<P> + -10 + + </P> +<UL class="text"> +<LI> + Fixed typos. Many editorial changes. Rewrote introduction. removed terminology + grouping. + +</LI> +<LI> + Allowed POST for end-user authorization endpoint. + +</LI> +<LI> + Fixed token endpoint to not require client authentication. + +</LI> +<LI> + Made URI query and POST body 'oauth_token' parameter optional. + +</LI> +<LI> + Moved all parameter names and values to use underscores. + +</LI> +<LI> + Changed 'basic_credentials' to 'password', 'invalid_client_credentials' and + 'invalid_client_id' to 'invalid_client'. + +</LI> +<LI> + Added note that access token requests without an access grant should not include + a refresh token. + +</LI> +<LI> + Changed scheme name from 'Token' to 'OAuth', simplified request format to simple + string for token instead of key=value pair (still supported for extensions). + +</LI> +<LI> + Defined permitted access token string characters (suitable for inclusion in an HTTP + header). + +</LI> +<LI> + Added a note about conflicts with previous versions. + +</LI> +<LI> + Moved 'client_id' definition from client authentication to access token endpoint. + +</LI> +</UL><P> + +</P> +<P> + -09 + + </P> +<UL class="text"> +<LI> + Fixed typos, editorial changes. + +</LI> +<LI> + Added token expiration example. + +</LI> +<LI> + Added scope parameter to end-user authorization endpoint response. + +</LI> +<LI> + Added note about parameters with empty values (same as omitted). + +</LI> +<LI> + Changed parameter values to use '-' instead of '_'. Parameter names still use '_'. + +</LI> +<LI> + Changed authorization endpoint client type to response type with values: code, token, + and both. + +</LI> +<LI> + Complete cleanup of error codes. Added support for error description and URI. + +</LI> +<LI> + Add initial extensibility support. + +</LI> +</UL><P> + +</P> +<P> + -08 + + </P> +<UL class="text"> +<LI> + Renamed verification code to authorization code. + +</LI> +<LI> + Revised terminology, structured section, added new terms. + +</LI> +<LI> + Changed flows to profiles and moved to introduction. + +</LI> +<LI> + Added support for access token rescoping. + +</LI> +<LI> + Cleaned up client credentials section. + +</LI> +<LI> + New introduction overview. + +</LI> +<LI> + Added error code for invalid username and password, and renamed error code to be more + consistent. + +</LI> +<LI> + Added access grant type parameter to token endpoint. + +</LI> +</UL><P> + +</P> +<P> + -07 + + </P> +<UL class="text"> +<LI> + Major rewrite of entire document structure. + +</LI> +<LI> + Removed device profile. + +</LI> +<LI> + Added verification code support to user-agent flow. + +</LI> +<LI> + Removed multiple formats support, leaving JSON as the only format. + +</LI> +<LI> + Changed assertion <TT>assertion_format</TT> parameter to + <TT>assertion_type</TT>. + +</LI> +<LI> + Removed <TT>type</TT> parameter from token endpoint. + +</LI> +</UL><P> + +</P> +<P> + -06 + + </P> +<UL class="text"> +<LI> + Editorial changes, corrections, clarifications, etc. + +</LI> +<LI> + Removed conformance section. + +</LI> +<LI> + Moved authors section to contributors appendix. + +</LI> +<LI> + Added section on native applications. + +</LI> +<LI> + Changed error response to use the requested format. Added support for HTTP + <TT>Accept</TT> header. + +</LI> +<LI> + Flipped the order of the web server and user-agent flows. + +</LI> +<LI> + Renamed assertion flow <TT>format</TT> parameter name to + <TT>assertion_format</TT> to resolve conflict. + +</LI> +<LI> + Removed the term identifier from token definitions. Added a cryptographic token + definition. + +</LI> +<LI> + Added figure titles. + +</LI> +<LI> + Added server response 401 when client tried to authenticate using multiple credentials. + +</LI> +<LI> + Clarified support for TLS alternatives, and added requirement for TLS 1.2 support for + token endpoint. + +</LI> +<LI> + Removed all signature and cryptography. + +</LI> +<LI> + Removed all discovery. + +</LI> +<LI> + Updated HTML4 reference. + +</LI> +</UL><P> + +</P> +<P> + -05 + + </P> +<UL class="text"> +<LI> + Corrected device example. + +</LI> +<LI> + Added client credentials parameters to the assertion flow as OPTIONAL. + +</LI> +<LI> + Added the ability to send client credentials using an HTTP authentication scheme. + +</LI> +<LI> + Initial text for the <TT>WWW-Authenticate</TT> header (also added + scope support). + +</LI> +<LI> + Change authorization endpoint to end-user endpoint. + +</LI> +<LI> + In the device flow, change the <TT>user_uri</TT> parameter to + <TT>verification_uri</TT> to avoid confusion with the end-user + endpoint. + +</LI> +<LI> + Add <TT>format</TT> request parameter and support for XML and + form-encoded responses. + +</LI> +</UL><P> + +</P> +<P> + -04 + + </P> +<UL class="text"> +<LI> + Changed all token endpoints to use <TT>POST</TT> + +</LI> +<LI> + Clarified the authorization server's ability to issue a new refresh token when + refreshing a token. + +</LI> +<LI> + Changed the flow categories to clarify the autonomous group. + +</LI> +<LI> + Changed client credentials language not to always be server-issued. + +</LI> +<LI> + Added a <TT>scope</TT> response parameter. + +</LI> +<LI> + Fixed typos. + +</LI> +<LI> + Fixed broken document structure. + +</LI> +</UL><P> + +</P> +<P> + -03 + + </P> +<UL class="text"> +<LI> + Fixed typo in JSON error examples. + +</LI> +<LI> + Fixed general typos. + +</LI> +<LI> + Moved all flows sections up one level. + +</LI> +</UL><P> + +</P> +<P> + -02 + + </P> +<UL class="text"> +<LI> + Removed restriction on <TT>redirect_uri</TT> including a query. + +</LI> +<LI> + Added <TT>scope</TT> parameter. + +</LI> +<LI> + Initial proposal for a JSON-based token response format. + +</LI> +</UL><P> + +</P> +<P> + -01 + + </P> +<UL class="text"> +<LI> + Editorial changes based on feedback from Brian Eaton, Bill Keenan, and Chuck Mortimore. + +</LI> +<LI> + Changed device flow <TT>type</TT> parameter values and switch to use + only the token endpoint. + +</LI> +</UL><P> + +</P> +<P> + -00 + + </P> +<UL class="text"> +<LI> + Initial draft based on a combination of WRAP and OAuth 1.0a. + +</LI> +</UL><P> + +</P> +<A name="rfc.references"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<A name="rfc.section.9"></A><H3>9. +References</H3> + +<A name="rfc.references1"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<H3>9.1. Normative References</H3> +<TABLE width="99%" border="0"> +<TBODY><TR><TD class="author-text" valign="top"><A name="I-D.ietf-httpbis-p1-messaging">[I-D.ietf-httpbis-p1-messaging]</A></TD> +<TD class="author-text">Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., Leach, P., Berners-Lee, T., and J. Reschke, “<A href="http://www.ietf.org/internet-drafts/draft-ietf-httpbis-p1-messaging-09.txt">HTTP/1.1, part 1: URIs, Connections, and Message Parsing</A>,” draft-ietf-httpbis-p1-messaging-09 (work in progress), March 2010 (<A href="http://www.ietf.org/internet-drafts/draft-ietf-httpbis-p1-messaging-09.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="NIST FIPS-180-3">[NIST FIPS-180-3]</A></TD> +<TD class="author-text">National Institute of Standards and Technology, “<A href="http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf">Secure Hash Standard (SHS). FIPS PUB 180-3, October 2008</A>.”</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC2045">[RFC2045]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=ned@innosoft.com','Compose new message','width=640,height=480')" rel="noreferrer">Freed, N.</A> and <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=nsb@nsb.fv.com','Compose new message','width=640,height=480')" rel="noreferrer">N. Borenstein</A>, “<A href="http://tools.ietf.org/html/rfc2045">Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</A>,” RFC 2045, November 1996 (<A href="http://www.rfc-editor.org/rfc/rfc2045.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC2104">[RFC2104]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=hugo@watson.ibm.com','Compose new message','width=640,height=480')" rel="noreferrer">Krawczyk, H.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=mihir@cs.ucsd.edu','Compose new message','width=640,height=480')" rel="noreferrer">Bellare, M.</A>, and <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=canetti@watson.ibm.com','Compose new message','width=640,height=480')" rel="noreferrer">R. Canetti</A>, “<A href="http://tools.ietf.org/html/rfc2104">HMAC: Keyed-Hashing for Message Authentication</A>,” RFC 2104, February 1997 (<A href="http://www.rfc-editor.org/rfc/rfc2104.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC2119">[RFC2119]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=sob@harvard.edu','Compose new message','width=640,height=480')" rel="noreferrer">Bradner, S.</A>, “<A href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</A>,” BCP 14, RFC 2119, March 1997 (<A href="http://www.rfc-editor.org/rfc/rfc2119.txt">TXT</A>, <A href="http://xml.resource.org/public/rfc/html/rfc2119.html">HTML</A>, <A href="http://xml.resource.org/public/rfc/xml/rfc2119.xml">XML</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC2616">[RFC2616]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=fielding@ics.uci.edu','Compose new message','width=640,height=480')" rel="noreferrer">Fielding, R.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=jg@w3.org','Compose new message','width=640,height=480')" rel="noreferrer">Gettys, J.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=mogul@wrl.dec.com','Compose new message','width=640,height=480')" rel="noreferrer">Mogul, J.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=frystyk@w3.org','Compose new message','width=640,height=480')" rel="noreferrer">Frystyk, H.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=masinter@parc.xerox.com','Compose new message','width=640,height=480')" rel="noreferrer">Masinter, L.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=paulle@microsoft.com','Compose new message','width=640,height=480')" rel="noreferrer">Leach, P.</A>, and <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=timbl@w3.org','Compose new message','width=640,height=480')" rel="noreferrer">T. Berners-Lee</A>, “<A href="http://tools.ietf.org/html/rfc2616">Hypertext Transfer Protocol -- HTTP/1.1</A>,” RFC 2616, June 1999 (<A href="http://www.rfc-editor.org/rfc/rfc2616.txt">TXT</A>, <A href="http://www.rfc-editor.org/rfc/rfc2616.ps">PS</A>, <A href="http://www.rfc-editor.org/rfc/rfc2616.pdf">PDF</A>, <A href="http://xml.resource.org/public/rfc/html/rfc2616.html">HTML</A>, <A href="http://xml.resource.org/public/rfc/xml/rfc2616.xml">XML</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC2617">[RFC2617]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=john@math.nwu.edu','Compose new message','width=640,height=480')" rel="noreferrer">Franks, J.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=pbaker@verisign.com','Compose new message','width=640,height=480')" rel="noreferrer">Hallam-Baker, P.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=jeff@AbiSource.com','Compose new message','width=640,height=480')" rel="noreferrer">Hostetler, J.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=lawrence@agranat.com','Compose new message','width=640,height=480')" rel="noreferrer">Lawrence, S.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=paulle@microsoft.com','Compose new message','width=640,height=480')" rel="noreferrer">Leach, P.</A>, Luotonen, A., and <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=stewart@OpenMarket.com','Compose new message','width=640,height=480')" rel="noreferrer">L. Stewart</A>, “<A href="http://tools.ietf.org/html/rfc2617">HTTP Authentication: Basic and Digest Access Authentication</A>,” RFC 2617, June 1999 (<A href="http://www.rfc-editor.org/rfc/rfc2617.txt">TXT</A>, <A href="http://xml.resource.org/public/rfc/html/rfc2617.html">HTML</A>, <A href="http://xml.resource.org/public/rfc/xml/rfc2617.xml">XML</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC2818">[RFC2818]</A></TD> +<TD class="author-text">Rescorla, E., “<A href="http://tools.ietf.org/html/rfc2818">HTTP Over TLS</A>,” RFC 2818, May 2000 (<A href="http://www.rfc-editor.org/rfc/rfc2818.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC3023">[RFC3023]</A></TD> +<TD class="author-text">Murata, M., St. Laurent, S., and D. Kohn, “<A href="http://tools.ietf.org/html/rfc3023">XML Media Types</A>,” RFC 3023, January 2001 (<A href="http://www.rfc-editor.org/rfc/rfc3023.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC3447">[RFC3447]</A></TD> +<TD class="author-text">Jonsson, J. and B. Kaliski, “<A href="http://tools.ietf.org/html/rfc3447">Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1</A>,” RFC 3447, February 2003 (<A href="http://www.rfc-editor.org/rfc/rfc3447.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC3629">[RFC3629]</A></TD> +<TD class="author-text">Yergeau, F., “<A href="http://tools.ietf.org/html/rfc3629">UTF-8, a transformation format of ISO 10646</A>,” STD 63, RFC 3629, November 2003 (<A href="http://www.rfc-editor.org/rfc/rfc3629.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC3986">[RFC3986]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=timbl@w3.org','Compose new message','width=640,height=480')" rel="noreferrer">Berners-Lee, T.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=fielding@gbiv.com','Compose new message','width=640,height=480')" rel="noreferrer">Fielding, R.</A>, and <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=LMM@acm.org','Compose new message','width=640,height=480')" rel="noreferrer">L. Masinter</A>, “<A href="http://tools.ietf.org/html/rfc3986">Uniform Resource Identifier (URI): Generic Syntax</A>,” STD 66, RFC 3986, January 2005 (<A href="http://www.rfc-editor.org/rfc/rfc3986.txt">TXT</A>, <A href="http://xml.resource.org/public/rfc/html/rfc3986.html">HTML</A>, <A href="http://xml.resource.org/public/rfc/xml/rfc3986.xml">XML</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC4627">[RFC4627]</A></TD> +<TD class="author-text">Crockford, D., “<A href="http://tools.ietf.org/html/rfc4627">The application/json Media Type for JavaScript Object Notation (JSON)</A>,” RFC 4627, July 2006 (<A href="http://www.rfc-editor.org/rfc/rfc4627.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC5226">[RFC5226]</A></TD> +<TD class="author-text">Narten, T. and H. Alvestrand, “<A href="http://tools.ietf.org/html/rfc5226">Guidelines for Writing an IANA Considerations Section in RFCs</A>,” BCP 26, RFC 5226, May 2008 (<A href="http://www.rfc-editor.org/rfc/rfc5226.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC5246">[RFC5246]</A></TD> +<TD class="author-text">Dierks, T. and E. Rescorla, “<A href="http://tools.ietf.org/html/rfc5246">The Transport Layer Security (TLS) Protocol Version 1.2</A>,” RFC 5246, August 2008 (<A href="http://www.rfc-editor.org/rfc/rfc5246.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="RFC5849">[RFC5849]</A></TD> +<TD class="author-text">Hammer-Lahav, E., “<A href="http://tools.ietf.org/html/rfc5849">The OAuth 1.0 Protocol</A>,” RFC 5849, April 2010 (<A href="http://www.rfc-editor.org/rfc/rfc5849.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="W3C.REC-html401-19991224">[W3C.REC-html401-19991224]</A></TD> +<TD class="author-text">Raggett, D., Hors, A., and I. Jacobs, “<A href="http://www.w3.org/TR/1999/REC-html401-19991224">HTML 4.01 Specification</A>,” World Wide Web Consortium Recommendation REC-html401-19991224, December 1999 (<A href="http://www.w3.org/TR/1999/REC-html401-19991224">HTML</A>).</TD></TR> +</TBODY></TABLE> + +<A name="rfc.references2"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<H3>9.2. Informative References</H3> +<TABLE width="99%" border="0"> +<TBODY><TR><TD class="author-text" valign="top"><A name="I-D.hammer-oauth">[I-D.hammer-oauth]</A></TD> +<TD class="author-text">Hammer-Lahav, E., “<A href="http://www.ietf.org/internet-drafts/draft-hammer-oauth-10.txt">The OAuth 1.0 Protocol</A>,” draft-hammer-oauth-10 (work in progress), February 2010 (<A href="http://www.ietf.org/internet-drafts/draft-hammer-oauth-10.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="I-D.hardt-oauth">[I-D.hardt-oauth]</A></TD> +<TD class="author-text">Hardt, D., Tom, A., Eaton, B., and Y. Goland, “<A href="http://www.ietf.org/internet-drafts/draft-hardt-oauth-01.txt">OAuth Web Resource Authorization Profiles</A>,” draft-hardt-oauth-01 (work in progress), January 2010 (<A href="http://www.ietf.org/internet-drafts/draft-hardt-oauth-01.txt">TXT</A>).</TD></TR> +<TR><TD class="author-text" valign="top"><A name="OASIS.saml-core-2.0-os">[OASIS.saml-core-2.0-os]</A></TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=cantor.2@osu.edu','Compose new message','width=640,height=480')" rel="noreferrer">Cantor, S.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=John.Kemp@nokia.com','Compose new message','width=640,height=480')" rel="noreferrer">Kemp, J.</A>, <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=rphilpott@rsasecurity.com','Compose new message','width=640,height=480')" rel="noreferrer">Philpott, R.</A>, and <A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=eve.maler@sun.com','Compose new message','width=640,height=480')" rel="noreferrer">E. Maler</A>, “<A href="http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf">Assertions and Protocol for the OASIS Security Assertion Markup Language + (SAML) V2.0</A>,” OASIS Standard saml-core-2.0-os, March 2005.</TD></TR> +</TBODY></TABLE> + +<A name="rfc.authors"></A><BR><HR> +<TABLE summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><TBODY><TR><TD class="TOCbug"><A href="http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#toc"> TOC </A></TD></TR></TBODY></TABLE> +<H3>Authors' Addresses</H3> +<TABLE width="99%" border="0" cellpadding="0" cellspacing="0"> +<TBODY><TR><TD class="author-text"> </TD> +<TD class="author-text">Eran Hammer-Lahav (editor)</TD></TR> +<TR><TD class="author-text"> </TD> +<TD class="author-text">Yahoo!</TD></TR> +<TR><TD class="author" align="right">Email: </TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=eran@hueniverse.com','Compose new message','width=640,height=480')" rel="noreferrer">eran@hueniverse.com</A></TD></TR> +<TR><TD class="author" align="right">URI: </TD> +<TD class="author-text"><A href="http://hueniverse.com/">http://hueniverse.com</A></TD></TR> +<TR cellpadding="3"><TD> </TD><TD> </TD></TR> +<TR><TD class="author-text"> </TD> +<TD class="author-text">David Recordon</TD></TR> +<TR><TD class="author-text"> </TD> +<TD class="author-text">Facebook</TD></TR> +<TR><TD class="author" align="right">Email: </TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=davidrecordon@facebook.com','Compose new message','width=640,height=480')" rel="noreferrer">davidrecordon@facebook.com</A></TD></TR> +<TR><TD class="author" align="right">URI: </TD> +<TD class="author-text"><A href="http://www.davidrecordon.com/">http://www.davidrecordon.com/</A></TD></TR> +<TR cellpadding="3"><TD> </TD><TD> </TD></TR> +<TR><TD class="author-text"> </TD> +<TD class="author-text">Dick Hardt</TD></TR> +<TR><TD class="author-text"> </TD> +<TD class="author-text">Microsoft</TD></TR> +<TR><TD class="author" align="right">Email: </TD> +<TD class="author-text"><A href="javascript:void(0)" onclick="window.open('http://mail.google.com/mail/?view=cm&fs=1&tf=1&to=dick.hardt@gmail.com','Compose new message','width=640,height=480')" rel="noreferrer">dick.hardt@gmail.com</A></TD></TR> +<TR><TD class="author" align="right">URI: </TD> +<TD class="author-text"><A href="http://dickhardt.org/">http://dickhardt.org/</A></TD></TR> +</TBODY></TABLE> + +</BODY><STYLE type="text/css">#AdContainer,#RadAd_Skyscraper,#ad-frame,#bbccom_leaderboard,#bbccom_mpu,#center_banner,#footer_adcode,#hbBHeaderSpon,#header_adcode,#hiddenHeaderSpon,#navbar_adcode,#pagelet_adbox,#rightAds,#rightcolumn_adcode,#top-advertising,#topMPU,#tracker_advertorial,.ad-now,.adbox,.adspot,.dfpad,.prWrap,.sponsored,[id^="ad_block"],[id^="adbrite"],[id^="dclkAds"],[id^="konaLayer"],[id^="ew"][id$="_bannerDiv"],a.kLink span[id^="preLoadWrap"][class="preLoadWrap"],A[href^="http://adserver.adpredictive.com"],A[href^="http://ad."][href*=".doubleclick.net/"],div[class^="dms_ad_IDS"],DIV[id="adxLeaderboard"],DIV[id="rm_container"],div[id^="sponsorads"],div[id^="y5_direct"],DIV[id="FFN_Banner_Holder"],DIV[id="FFN_imBox_Container"],DIV[id="p360-format-box"],div[id="tooltipbox"][class^="itxt"],div[id^="adKontekst_"],div[id^="google_ads_div"],div[id^="kona_"][id$="_wrapper"],div[class="wnDVUtilityBlock"],embed[flashvars*="AdID"],embed[id="Advertisement"][name="Advertisement"],iframe[class="chitikaAdBlock"],iframe[id^="dapIfM"],iframe[name^="AdBrite"],iframe[name^="google_ads_"],iframe[src*="clicksor.com"],img[src*="clicksor.com"],IMG[src^="http://cdn.adnxs.com"],ispan#ab_pointer,object[id="flashad"],object[id="ve_threesixty_swf"][name="ve_threesixty_swf"],[src*="sixsigmatraffic.com"],div#dir_ads_site,div#tads table[align="center"][width="100%"],div#rhs div#rhs_block table#mbEnd,#A9AdsMiddleBoxTop,#A9AdsOutOfStockWidgetTop,#A9AdsServicesWidgetTop,#AD_CONTROL_22,#ADsmallWrapper,#Ad1,#Ad2,#Ad3Left,#Ad3Right,#AdBanner_F1,#AdBar1,#AdContainerTop,#AdHeader,#AdMiddle,#AdRectangle,#AdSenseDiv,#AdShowcase_F1,#AdSky23,#AdSkyscraper,#AdSponsor_SF,#AdTargetControl1_iframe,#AdText,#Ad_Block,#Ad_Center1,#Ad_Top,#Adbanner,#Adrectangle,#AdsContent,#AdsWrap,#AdvertMPU23b,#AdvertiseFrame,#Advertisement,#Advertorial,#BannerAdvert,#BigBoxAd,#CompanyDetailsNarrowGoogleAdsPresentationControl,#CompanyDetailsWideGoogleAdsPresentationControl,#ContentAd,#ContentAd1,#ContentAd2,#ContentAdPlaceHolder1,#ContentAdPlaceHolder2,#ContentAdXXL,#ContentPolepositionAds_Result,#FooterAd,#FooterAdContainer,#GoogleAdsense,#HEADERAD,#HOME_TOP_RIGHT_BOXAD,#HeaderAdsBlock,#HeaderAdsBlockFront,#HeaderBannerAdSpacer,#HeaderTextAd,#HeroAd,#HomeAd1,#HouseAd,#ID_Ad_Sky,#Journal_Ad_125,#Journal_Ad_300,#LeftAd,#LeftAdF1,#LeftAdF2,#LowerContentAd,#PREFOOTER_LEFT_BOXAD,#PREFOOTER_RIGHT_BOXAD,#PageLeaderAd,#RightAd,#RightSponsoredAd,#SectionAd300-250,#SidebarAdContainer,#SkyAd,#SpecialAds,#SponsoredAd,#TOP_ADROW,#TOP_RIGHT_BOXAD,#TopAdPos,#VM-MPU-adspace,#VM-footer-adspace,#VM-header-adspace,#VM-header-adwrap,#XEadLeaderboard,#XEadSkyscraper,#_ads,#ad-120x600-sidebar,#ad-160x600,#ad-160x600-sidebar,#ad-250x300,#ad-300,#ad-300x250,#ad-300x250-sidebar,#ad-300x250Div,#ad-728,#ad-article,#ad-banner,#ad-bottom,#ad-bottom-wrapper,#ad-colB-1,#ad-column,#ad-container,#ad-footer,#ad-footprint-160x600,#ad-front-footer,#ad-front-sponsoredlinks,#ad-halfpage,#ad-label,#ad-leaderboard,#ad-leaderboard-bottom,#ad-leaderboard-spot,#ad-leaderboard-top,#ad-left,#ad-list-row,#ad-lrec,#ad-medium-rectangle,#ad-middlethree,#ad-middletwo,#ad-module,#ad-mpu,#ad-mpu1-spot,#ad-mpu2-spot,#ad-placard,#ad-rectangle,#ad-righttop,#ad-side-text,#ad-skyscraper,#ad-slug-wrapper,#ad-space,#ad-splash,#ad-spot,#ad-target,#ad-target-Leaderbord,#ad-teaser,#ad-top,#ad-top-text-low,#ad-tower,#ad-trailerboard-spot,#ad-typ1,#ad-west,#ad-wrap,#ad-wrap-right,#ad-wrapper,#ad-wrapper1,#ad-yahoo-simple,#ad1,#ad125BL,#ad125BR,#ad125TL,#ad125TR,#ad125x125,#ad160x600,#ad160x600right,#ad1Sp,#ad2,#ad2Sp,#ad3,#ad300,#ad300-250,#ad300X250,#ad300_x_250,#ad300x150,#ad300x250,#ad300x250Module,#ad300x60,#ad300x600,#ad300x600_callout,#ad336,#ad336x280,#ad375x85,#ad468,#ad468x60,#ad526x250,#ad600,#ad7,#ad728,#ad728Wrapper,#ad728x90,#adB,#adBadges,#adBanner,#adBanner120x600,#adBannerTable,#adBannerTop,#adBar,#adBlock125,#adBlocks,#adBox,#adContainer,#adDiv,#adFps,#adFtofrs,#adGallery,#adGroup1,#adHeader,#adL,#adLB,#adLeaderboard,#adMPU,#adMiddle0Frontpage,#adMiniPremiere,#adP,#adPlaceHolderRight,#adRight,#adSenseModule,#adServer_marginal,#adSidebar,#adSidebarSq,#adSky,#adSkyscraper,#adSlider,#adSpace3,#adSpace300_ifrMain,#adSpace4,#adSpace5,#adSpace6,#adSpace7,#adSpace_footer,#adSpace_top,#adSpecial,#adSpot-Leader,#adSpot-banner,#adSpot-mrec1,#adSpot-sponsoredlinks,#adSpot-textbox1,#adSpot-widestrip,#adSpotAdvertorial,#adSpotIsland,#adSpotSponsoredLinks,#adSquare,#adStaticA,#adStrip,#adSuperPremiere,#adTableCell,#adTag1,#adTag2,#adText,#adText_container,#adTop,#adTopboxright,#adUnit,#adWrapper,#adZoneTop,#ad_160x160,#ad_160x600,#ad_190x90,#ad_300,#ad_300_250,#ad_300x250,#ad_468_60,#ad_5,#ad_728_foot,#ad_728x90,#ad_A,#ad_B,#ad_Banner,#ad_C,#ad_C2,#ad_D,#ad_E,#ad_F,#ad_G,#ad_H,#ad_I,#ad_J,#ad_K,#ad_L,#ad_M,#ad_N,#ad_O,#ad_P,#ad_YieldManager-300x250,#ad_anchor,#ad_banner,#ad_banner_top,#ad_bar,#ad_block_1,#ad_block_2,#ad_bottom,#ad_box_colspan,#ad_branding,#ad_bs_area,#ad_center_monster,#ad_container,#ad_content_wrap,#ad_feature,#ad_footer,#ad_haha_1,#ad_haha_4,#ad_halfpage,#ad_head,#ad_header,#ad_horseshoe_left,#ad_horseshoe_right,#ad_horseshoe_spacer,#ad_horseshoe_top,#ad_hotpots,#ad_island,#ad_label,#ad_layer2,#ad_leader,#ad_leaderBoard,#ad_leaderboard,#ad_lwr_square,#ad_medium_rectangle,#ad_medium_rectangular,#ad_middle,#ad_mpu,#ad_mrcontent,#ad_overlay,#ad_play_300,#ad_rect,#ad_rect_body,#ad_rect_bottom,#ad_rectangle,#ad_related_links_div,#ad_related_links_div_program,#ad_replace_div_1,#ad_report_leaderboard,#ad_report_rectangle,#ad_right,#ad_right_main,#ad_ros_tower,#ad_rr_1,#ad_sidebar1,#ad_sidebar2,#ad_sidebar3,#ad_skyscraper,#ad_slot_livesky,#ad_space,#ad_square,#ad_ss,#ad_term_bottom_place,#ad_top,#ad_top_holder,#ad_tp_banner_1,#ad_tp_banner_2,#ad_vertical,#ad_window,#ad_wrapper,#adbanner,#adbnr,#adboard,#adbottom,#adbox,#adbox2,#adclear,#adcode1,#adcode2,#adcode3,#adcode4,#adcolumnwrapper,#adcontainer,#adcontainsm,#adcontrolPushSite,#addiv-bottom,#addiv-top,#adfooter_728x90,#adframe:not(frameset),#adhead,#adhead_g,#adheader,#adhome,#adiframe1_iframe,#adiframe2_iframe,#adiframe3_iframe,#adimg,#adition_content_ad,#adlabel,#adlabelFooter,#adleaderboard,#adlinks,#adlinkws,#admid,#admiddle3center,#admiddle3left,#adposition,#adposition-C,#adposition-FPMM,#adposition2,#adposition3,#adposition4,#adrectanglea,#adrectangleb,#adright,#adright2,#ads,#ads-468,#ads-area,#ads-block,#ads-bot,#ads-bottom,#ads-dell,#ads-horizontal,#ads-indextext,#ads-leaderboard1,#ads-lrec,#ads-prices,#ads-rhs,#ads-top,#ads160left,#ads2,#ads300,#ads336x280,#ads7,#ads728bottom,#ads728top,#ads790,#adsDisplay,#adsID,#ads_160,#ads_300,#ads_728,#ads_belowforumlist,#ads_belownav,#ads_bottom_outer,#ads_catDiv,#ads_footer,#ads_right,#ads_sidebar_roadblock,#ads_top,#adsbottom,#adscolumn,#adsense,#adsense-text,#adsenseWrap,#adsense_inline,#adsense_leaderboard,#adsense_placeholder_2,#adsensetopplay,#adskyscraper,#adslot,#adsonar,#adspace,#adspace-300x250,#adspace300x250,#adspaceBox,#adspaceBox300,#adspace_header,#adspot-a,#adsright,#adstop,#adt,#adtech_googleslot_03c,#adtech_takeover,#adtop,#adv-masthead,#adv_google_300,#adv_google_728,#adv_top_banner_wrapper,#adv_wide_banner,#adver1,#adver2,#adver3,#adver4,#advert,#advert-1,#advert-boomer,#advert-display,#advert-header,#advert-leaderboard,#advert-top,#advert1,#advertBanner,#advert_250x250,#advert_box,#advert_leaderboard,#advert_lrec_format,#advert_mpu,#advertbox,#advertbox2,#advertbox3,#advertbox4,#adverthome,#advertise,#advertise-now,#advertise1,#advertisement,#advertisement160x600,#advertisement728x90,#advertisementLigatus,#advertisementPrio2,#advertiser-container,#advertiserLinks,#advertising,#advertising-skyscraper,#advertisingModule160x600,#advertisingModule728x90,#advertorial,#adwhitepaperwidget,#adwin_rec,#adwith,#adwords-4-container,#adwrapper,#adxtop,#adzerk,#adzoneBANNER,#agi-ad300x250,#agi-ad300x250overlay,#agi-sponsored,#anchorAd,#annoying_ad,#ap_adframe,#araHealthSponsorAd,#article-ad-container,#article-box-ad,#articleAdReplacement,#articleSideAd,#article_ad,#article_box_ad,#asinglead,#atlasAdDivGame,#banner-ad,#banner-ad-container,#banner-ads,#banner468x60,#banner728x90,#bannerAd,#bannerAdTop,#bannerAd_ctr,#banner_ad,#banner_ads,#banner_topad,#bannerad,#bannerad2,#bbccom_mpu,#bbo_ad1,#bg_YieldManager-300x250,#bigAd,#bigBoxAd,#bigadbox,#bigadspot,#billboard_ad,#block-ad_cube-1,#block-thewrap_ads_250x300-0,#block_advert,#blox-big-ad,#blox-halfpage-ad,#blox-tile-ad,#botad,#bott_ad2,#bott_ad2_300,#bottom-ad-container,#bottom-ads,#bottomAd,#bottomAdCCBucket,#bottomAdContainer,#bottomAdSense,#bottomAdSenseDiv,#bottomAds,#bottomRightAd,#bottomRightAdSpace,#bottom_ad,#bottom_ad_area,#bottom_ads,#bottom_banner_ad,#bottom_overture,#bottom_sponsor_ads,#bottom_sponsored_links,#bottom_text_ad,#bottomad,#bottomadsense,#box-googleadsense-1,#box-googleadsense-r,#box1ad,#boxAd300,#boxAdContainer,#box_ad,#box_mod_googleadsense,#boxad1,#boxad2,#boxad3,#boxad4,#boxad5,#bps-header-ad-container,#btr_horiz_ad,#burn_header_ad,#button-ads-horizontal,#button-ads-vertical,#button_ad_container,#button_ad_wrap,#cellAd,#channel_ad,#channel_ads,#ciHomeRHSAdslot,#circ_ad,#cnnRR336ad,#cnnTopAd,#colRightAd,#column4-google-ads,#commercial_ads,#common_right_lower_player_adspace,#common_right_player_adspace,#common_top_adspace,#containerLocalAds,#containerMrecAd,#content-ad-header,#contentAd,#content_ad,#content_ad_square,#content_ad_top,#content_ads_content,#content_box_300body_sponsoredoffers,#content_box_adright300_google,#contentad,#contentad_imtext,#contentad_right,#contentads,#contentinlineAd,#contextual-ads-block,#contextualad,#coverads,#ctl00_BottomAd,#ctl00_LHTowerAd,#ctl00_LeftHandAd,#ctl00_MasterHolder_IBanner_adHolder,#ctl00_TopAd,#ctl00_TowerAd,#ctl00_VBanner_adHolder,#ctl00_adFooter,#ctl00_atop_bt,#ctl00_cphMain_hlAd1,#ctl00_cphMain_hlAd2,#ctl00_cphMain_hlAd3,#ctl00_ctl00_MainPlaceHolder_itvAdSkyscraper,#ctl00_ctl00_ctl00_Main_Main_PlaceHolderGoogleTopBanner_MPTopBannerAd,#ctl00_ctl00_ctl00_Main_Main_SideBar_MPSideAd,#ctl00_ctl00_ctl00_tableAdsTop,#ctl00_m_skinTracker_m_adLBL,#ctl00_phCrackerMain_ucAffiliateAdvertDisplayMiddle_pnlAffiliateAdvert,#ctl00_phCrackerMain_ucAffiliateAdvertDisplayRight_pnlAffiliateAdvert,#ctrlsponsored,#cubeAd,#cube_ads,#cube_ads_inner,#cubead,#cubead-2,#dc-display-right-ad-1,#dcol-sponsored,#defer-adright,#detail_page_vid_topads,#divAd,#divAdBox,#divWrapper_Ad,#div_video_ads,#dlads,#dni-header-ad,#download_ads,#ds-mpu,#editorsmpu,#evotopTen_advert,#exads,#featuread,#featuredAdContainer2,#featuredAds,#feed_links_ad_container,#first_ad_unit,#firstad,#fl_hdrAd,#footer-ad,#footer-sponsored,#footerAd,#footerAdDiv,#footerAds,#footerAdverts,#footer_ad,#footer_ad_block,#footer_ads,#footer_adspace,#footer_text_ad,#footerad,#fr_ad_center,#frnContentAd,#from_our_sponsors,#front_advert,#front_mpu,#ft-ad,#ft-ad-1,#ft-ad-container,#ft_mpu,#fusionad,#fw-advertisement,#g_ad,#g_adsense,#ga_300x250,#gad,#gallery-ad-m0,#gallery_ads,#game-info-ad,#global_header_ad_area,#gmi-ResourcePageAd,#gmi-ResourcePageLowerAd,#google-ad,#google-ad-art,#google-ad-tower,#google-ads,#google-ads-bottom,#google-ads-left-side,#google-adsense-mpusize,#googleAd,#googleAds,#googleAdsense,#googleAdsenseBanner,#googleAdsenseBannerBlog,#googleAdwordsModule,#googleAfcContainer,#googleShoppingAdsRight,#googleShoppingAdsTop,#google_ad,#google_ad_test,#google_ads,#google_ads_frame1,#google_ads_test,#googlead,#googleads,#googlesponsor,#grid_ad,#gsyadrectangleload,#gsyadrightload,#gsyadtop,#gsyadtopload,#gtopadvts,#halfPageAd,#halfe-page-ad-box,#hdtv_ad_ss,#head-ad,#head_advert,#header-ad,#header-ads,#header-advert,#headerAd,#headerAdBackground,#headerAdContainer,#headerAdWrap,#headerAdsWrapper,#headerTopAd,#header_ad,#header_adcode,#header_ads,#header_advertisement_top,#header_leaderboard_ad_container,#headerad,#headeradbox,#headline_ad,#hiddenadAC,#homeTopRightAd,#home_ad,#home_contentad,#home_spensoredlinks,#homepage-ad,#homepage_right_ad,#homepage_right_ad_container,#hometop_234x60ad,#hor_ad,#horizontal-banner-ad,#horizontal_ad,#horizontal_ad_top,#horizontalads,#houseAd,#hp-store-ad,#hpV2_300x250Ad,#hpV2_googAds,#icePage_SearchLinks_AdRightDiv,#icePage_SearchLinks_DownloadToolbarAdRightDiv,#indexad,#inlinead,#inlinegoogleads,#inner-advert-row,#insider_ad_wrapper,#instoryad,#int-ad,#interstitial_ad_wrapper,#islandAd,#j_ad,#jmp-ad-buttons,#joead,#joead2,#ka_adRightSkyscraperWide,#landing-adserver,#largead,#lateAd,#lb-sponsor-left,#lb-sponsor-right,#leader-board-ad,#leader-sponsor,#leaderAdContainer,#leaderad,#leaderad_section,#leaderboard-ad,#leaderboard-bottom-ad,#leaderboard_ad,#left-ad-skin,#leftAdContainer,#leftAd_rdr,#leftAdvert,#leftSectionAd300-100,#left_ad,#left_adspace,#leftad,#leftads,#lg-banner-ad,#linkAds,#live-ad,#longAdSpace,#lowerthirdad,#mBannerAd,#main-ad,#main-ad160x600,#main-ad160x600-img,#main-ad728x90,#mainAd,#mainAdUnit,#mainAdvert,#main_ad,#main_rec_ad,#mastAdvert,#mastad,#masthead_ad,#masthead_topad,#medRecAd,#media_ad,#menuAds,#mi_story_assets_ad,#mid-ad300x250,#mid-table-ad,#mid_ad_title,#mid_mpu,#middlead,#middleads,#midrect_ad,#midstrip_ad,#mini-ad,#module-google_ads,#module_ad,#module_box_ad,#moogleAd,#most_popular_ad,#mpu,#mpu-advert,#mpuAd,#mpuDiv,#mpuWrapper,#mpuWrapperAd,#mpu_banner,#mpu_holder,#mpu_text_ad,#mpuad,#mrecAdContainer,#ms_ad,#msad,#multiLinkAdContainer,#n_sponsor_ads,#namecom_ad_hosting_main,#narrow_ad_unit,#natadad300x250,#national_microlink_ads,#navi_banner_ad_780,#nba300Ad,#nbaMidAds,#nbaVid300Ad,#new_topad,#ng_rtcol_ad,#noresultsads,#northad,#oanda_ads,#onespot-ads,#p-googleadsense,#page-header-ad,#pageAds,#pageAdsDiv,#page_content_top_ad,#pcworldAdBottom,#pcworldAdTop,#pinball_ad,#player_ad,#player_ads,#portlet-advertisement-left,#portlet-advertisement-right,#post5_adbox,#post_ad,#priceGrabberAd,#print_ads,#printads,#product-adsense,#promo-ad,#promoAds,#ps-vertical-ads,#pub468x60,#publicidad,#pushdown_ad,#r1SoftAd,#rail_ad1,#rail_ad2,#realEstateAds,#rect_ad,#rectangle-ad,#rectangle_ad,#refine-300-ad,#region-top-ad,#rh-ad-container,#rh_tower_ad,#rhsadvert,#right-ad,#right-ad-skin,#right-box-ad,#rightAd,#rightAd300x250,#rightAdColumn,#rightAd_rdr,#rightColAd,#rightColumnMpuAd,#rightColumnSkyAd,#right_ad_wrapper,#right_ads,#right_advertisement,#right_advertising,#right_column_ads,#rightad,#rightadvertbar-doubleclickads,#rightbar-ad,#rightside_ad,#rm_ad_text,#ros_ad,#rotatingads,#row2AdContainer,#rtMod_ad,#sAdsBox,#sb-ad-sq,#sb_advert,#search-google-ads,#search_ads,#secondBoxAdContainer,#section-container-ddc_ads,#section_advertorial_feature,#servfail-ads,#sew-ad1,#shoppingads,#show-ad,#side-ad,#side-ad-container,#sideAd,#sideBarAd,#side_ad_wrapper,#side_ads_by_google,#sidead,#sidebar-125x125-ads,#sidebar-125x125-ads-below-index,#sidebar-ad,#sidebar-ad-boxes,#sidebar-ad-space,#sidebar-ad-wrap,#sidebar-ads,#sidebar2ads,#sidebar_ad_widget,#sidebar_ads,#sidebar_sponsoredresult_body,#sidebarad,#sideline-ad,#single-mpu,#singlead,#site-leaderboard-ads,#site_top_ad,#sky-ad,#skyAd,#skyScrapperAd,#sky_ad,#sky_advert,#skyscraper-ad,#skyscraperAd,#skyscraper_ad,#skyscraper_advert,#sliderAdHolder,#slideshow_ad_300x250,#sm-banner-ad,#small_ad,#smallerAd,#speeds_ads,#speeds_ads_fstitem,#sphereAd,#splinks,#sponLinkDiv_1,#sponlink,#sponsAds,#sponsLinks,#spons_left,#sponseredlinks,#sponsor-search,#sponsorAd1,#sponsorAd2,#sponsorAdDiv,#sponsorLinks,#sponsorTextLink,#sponsor_banderole,#sponsor_box,#sponsor_deals,#sponsor_panSponsor,#sponsored,#sponsored-ads,#sponsored-features,#sponsored-links,#sponsored-resources,#sponsored1,#sponsoredBox1,#sponsoredBox2,#sponsoredLinks,#sponsoredList,#sponsoredResults,#sponsoredSiteMainline,#sponsoredSiteSidebar,#sponsored_ads_v4,#sponsored_content,#sponsored_game_row_listing,#sponsored_links,#sponsoredlinks,#sponsoredlinks_cntr,#sponsoredresults_top,#sponsorlink,#spotlightAds,#spotlightad,#squareAd,#squareAdSpace,#square_ad,#start_middle_container_advertisment,#sticky-ad,#stickyBottomAd,#story-ad-a,#story-ad-b,#story-sponsoredlinks,#storyAd,#storyAdWrap,#subpage-ad-right,#subpage-ad-top,#swads,#synch-ad,#tabAdvertising,#tblAd,#tbl_googlead,#template_ad_leaderboard,#tertiary_advertising,#text-ad,#textAd,#textAds,#text_ad,#text_advert,#the-last-ad-standing,#thefooterad,#themis-ads,#tile-ad,#tmglBannerAd,#top-ad,#top-ad-container,#top-ad-menu,#top-ads,#top-ads-tabs,#top-advertisement,#top-banner-ad,#top-search-ad-wrapper,#topAd,#topAd728x90,#topAdBanner,#topAdContainer,#topAdSenseDiv,#topAds,#topAdsContainer,#topAdvert,#topBannerAd,#topNavLeaderboardAdHolder,#top_ad,#top_ad_area,#top_ad_game,#top_ad_wrapper,#top_ads,#top_advertise,#top_advertising,#top_right_ad,#top_wide_ad,#topad,#topad_left,#topad_right,#topadblock,#topads,#topadzone,#topcustomad,#toprightAdvert,#toptextad,#towerad,#ttp_ad_slot1,#ttp_ad_slot2,#twogamesAd,#txt_link_ads,#undergameAd,#upperMpu,#upperad,#urban_contentad_article,#v_ad,#vert_ad,#vertical_ad,#vertical_ads,#video_cnv_ad,#video_overlay_ad,#walltopad,#welcomeAdsContainer,#welcome_ad_mrec,#welcome_advertisement,#wgtAd,#whatsnews_top_ad,#whitepaper-ad,#whoisRightAdContainer,#wide_ad_unit_top,#widget_advertisement,#wrapAdRight,#wrapAdTop,#y708-ad-expedia,#y708-ad-lrec,#y708-ad-partners,#y708-ad-ysm,#y708-advertorial-marketplace,#yahoo-ads,#yahoo-sponsors,#yahoo_ads,#yahoo_ads_2010,#yahooad-tbl,#yan-sponsored,#ybf-ads,#yfi_fp_ad_mort,#yfi_fp_ad_nns,#yfi_pf_ad_mort,#ygrp-sponsored-links,#ymap_adbanner,#yn-gmy-ad-lrec,#yreSponsoredLinks,#ysm_ad_iframe,#zoneAdserverMrec,#zoneAdserverSuper,.ADBAR,.ADPod,.AD_MOVIE_ITEM,.AD_MOVIE_ITEMLIST,.AD_MOVIE_ITEMROW,.Ad120x600,.Ad160x600,.Ad247x90,.Ad300x250,.Ad300x250L,.Ad728x90,.AdBox,.AdBox7,.AdContainerBox308,.AdHere,.AdInfo,.AdPlaceHolder,.AdRingtone,.AdSense,.AdSpace,.AdTitle,.AdUnit,.AdUnit300,.Ad_C,.Ad_D_Wrapper,.Ad_E_Wrapper,.Ad_Right,.Ads,.AdsBoxSection,.AdsLinks1,.AdsLinks2,.AdvertMidPage,.AdvertiseWithUs,.AdvertisementTextTag,.ArticleInlineAd,.BannerAd,.BlockAd,.BottomAffiliate,.CG_adkit_leaderboard,.CommentAd,.DeptAd,.FT_Ad,.FlatAds,.HPNewAdsBannerDiv,.HomeContentAd,.LeftTowerAd,.M2Advertisement,.MD_adZone,.MPU,.MPUHolder,.MiddleAdContainer,.OpenXad,.PU_DoubleClickAdsContent,.Post5ad,.RBboxAd,.RelatedAds,.RightRailTop300x250Ad,.RightSponsoredAdTitle,.RightTowerAd,.SidebarAd,.SponsoredAdTitle,.SponsoredContent,.SponsoredLinks,.SponsoredLinksGrayBox,.SquareAd,.StandardAdLeft,.StandardAdRight,.TextAd,.TheEagleGoogleAdSense300x250,.TopAd,.TopAdL,.TopAdR,.UIStandardFrame_SidebarAds,.UIWashFrame_SidebarAds,.UnderAd,.VerticalAd,.WidgetAdvertiser,.ad-160x600,.ad-250,.ad-300,.ad-300-block,.ad-300-blog,.ad-300x100,.ad-300x250,.ad-600,.ad-728,.ad-adlink-bottom,.ad-adlink-side,.ad-background,.ad-banner,.ad-bigsize,.ad-block,.ad-blog2biz,.ad-bottom,.ad-box,.ad-break,.ad-btn,.ad-btn-heading,.ad-button,.ad-cell,.ad-container,.ad-div,.ad-feedback,.ad-filler,.ad-footer,.ad-footer-leaderboard,.ad-google,.ad-gray,.ad-hdr,.ad-head,.ad-holder,.ad-homeleaderboard,.ad-img,.ad-island,.ad-leaderboard,.ad-links,.ad-medium,.ad-medium-two,.ad-mpu,.ad-other,.ad-permalink,.ad-placeholder,.ad-postText,.ad-poster,.ad-rect,.ad-rectangle,.ad-rectangle-text,.ad-related,.ad-rh,.ad-ri,.ad-right,.ad-right-header,.ad-right-txt,.ad-section,.ad-sidebar300,.ad-slot,.ad-slot-234-60,.ad-slot-300-250,.ad-slot-728-90,.ad-space,.ad-space-mpu-box,.ad-spot,.ad-statement,.ad-text,.ad-tile,.ad-top,.ad-top-left,.ad-unit,.ad-unit-300,.ad-unit-300-wrapper,.ad-unit-anchor,.ad-vtu,.ad-wrap,.ad-wrapper,.ad-zone-s-q-l,.ad0,.ad1,.ad10,.ad120,.ad160,.ad160x600,.ad18,.ad19,.ad2,.ad21,.ad250c,.ad3,.ad300,.ad300_250,.ad300x100,.ad300x250,.ad300x250Top,.ad300x250_container,.ad300x250box,.ad300x600,.ad310,.ad336x280,.ad343x290,.ad450,.ad468,.ad468_60,.ad468x60,.ad6,.ad620x70,.ad626X35,.ad7,.ad728,.ad728_90,.ad728x90,.ad728x90_container,.ad8,.adAgate,.adBanner,.adBannerTyp1,.adBannerTypSortableList,.adBannerTypW300,.adBgBottom,.adBgMId,.adBgTop,.adBox,.adBoxContent,.adBoxSidebar,.adBoxSingle,.adCMRight,.adColumn,.adContainer,.adContour,.adCreative,.adDiv,.adElement,.adFrame,.adFtr,.adFullWidthMiddle,.adGoogle,.adHeader,.adHeadline,.adHolder,.adHome300x250,.adInNews,.adLabel,.adLeader,.adLeaderForum,.adLeaderboard,.adLeft,.adMastheadLeft,.adMastheadRight,.adMkt2Colw,.adModule,.adNewsChannel,.adNoOutline,.adNoticeOut,.adObj,.adPageBorderL,.adPageBorderR,.adPanel,.adRect,.adRight,.adSelfServiceAdvertiseLink,.adServer,.adSlot,.adSpBelow,.adSpace,.adSpacer,.adSpot,.adSpot-searchAd,.adSpot-textBox,.adSpot-twin,.adSpotIsland,.adSquare,.adSummary,.adSuperboard,.adTag,.adText,.adTileWrap,.adTiler,.adTitle,.adTout,.adTxt,.adWithTab,.adWrap,.adWrapper,.ad_1,.ad_125,.ad_130x90,.ad_160,.ad_160x600,.ad_2,.ad_3,.ad_300,.ad_300_250,.ad_300x250,.ad_336,.ad_336x280,.ad_350x250,.ad_468,.ad_600,.ad_728,.ad_728x90,.ad_amazon,.ad_biz,.ad_block_338,.ad_bottom_leaderboard,.ad_box,.ad_box2,.ad_callout,.ad_caption,.ad_contain,.ad_container,.ad_content,.ad_content_wide,.ad_contents,.ad_descriptor,.ad_footer,.ad_framed,.ad_front_promo,.ad_header,.ad_hpm,.ad_info_block,.ad_label,.ad_launchpad,.ad_leader,.ad_leaderboard,.ad_left,.ad_linkunit,.ad_loc,.ad_lrec,.ad_medrect,.ad_mpu,.ad_mr,.ad_mrec,.ad_mrec_title_article,.ad_notice,.ad_p360,.ad_partner,.ad_partners,.ad_plus,.ad_post,.ad_power,.ad_rectangle,.ad_right,.ad_sidebar,.ad_skyscraper,.ad_slug_table,.ad_space,.ad_space_300_250,.ad_sponsor,.ad_sponsoredsection,.ad_spot_b,.ad_spot_c,.ad_square_r,.ad_square_top,.ad_text,.ad_title,.ad_top,.ad_top_leaderboard,.ad_tower,.ad_unit,.ad_unit_rail,.ad_warning,.ad_wide,.ad_wrap,.ad_wrapper,.ad_wrapper_fixed,.ad_wrapper_top,.ad_zone,.adarea,.adbanner,.adbannerright,.adbar,.adborder,.adbot,.adbottom,.adbottomright,.adbox,.adbox-outer,.adbox_366x280,.adbox_468X60,.adbox_bottom,.adboxclass,.adcode,.adcolumn_wrapper,.adcontainer,.adcopy,.addiv,.adfoot,.adfootbox,.adframe,.adhead,.adheader,.adheader100,.adhere,.adhoriz,.adi,.adinfo,.adinside,.adjlink,.adkit,.adkit-advert,.adkit-lb-footer,.adlabel-horz,.adlabel-vert,.adleft,.adline,.adlink,.adlinks,.adlist,.adlnklst,.admarker,.admedrec,.admessage,.admodule,.admpu,.adnotice,.adops,.adpadding,.adpic,.adright,.adrotate_widget,.adrow,.adrow-post,.adrule,.ads-banner,.ads-categories-bsa,.ads-favicon,.ads-links-general,.ads-mpu,.ads-profile,.ads-right,.ads-sidebar,.ads-sky,.ads-text,.ads2,.ads3,.ads:not(body),.adsArea,.adsBelowHeadingNormal,.adsBox,.adsImages,.adsTextHouse,.adsTower2,.adsTowerWrap,.adsWithUs,.ads_300,.ads_728x90,.ads_big,.ads_big-half,.ads_brace,.ads_catDiv,.ads_container,.ads_disc_anchor,.ads_disc_leader,.ads_disc_lwr_square,.ads_disc_skyscraper,.ads_disc_square,.ads_div,.ads_header,.ads_leaderboard,.ads_mpu,.ads_outer,.ads_right,.ads_sc_bl_i,.ads_sc_tl_i,.ads_side,.ads_takeover,.ads_tr,.adsborder,.adsbyyahoo,.adsc,.adscontainer,.adscreen,.adsection_a2,.adsection_c2,.adsense,.adsense-heading,.adsense-right,.adsense-title,.adsenseBlock,.adsenseContainer,.adsenseblock,.adsenselr,.adsensesq,.adsidebox,.adsingle,.adslogan,.adspace,.adspace-MR,.adspace_buysell,.adspace_rotate,.adspacer,.adspot,.adstrip,.adtag,.adtext,.adtext_gray,.adtext_onwhite,.adtop,.adtravel,.adv-mpu,.adverTag,.adver_cont_below,.advert,.advert-box,.advert-head,.advert-horizontal,.advert-mpu,.advert-skyscraper,.advert-text,.advertCont,.advertContainer,.advertHeadline,.advertRight,.advertText,.advert_468x60,.advert_box,.advert_cont,.advert_leaderboard,.advert_note,.advertise,.advertise-here,.advertise-homestrip,.advertise-horz,.advertise-leaderboard,.advertise-vert,.advertiseContainer,.advertiseText,.advertisement,.advertisement-728x90,.advertisement-block,.advertisement-top,.advertisement468,.advertisementColumnGroup,.advertisementContainer,.advertisementLabel,.advertisementPanel,.advertisement_caption,.advertisement_g,.advertisement_header,.advertisement_horizontal,.advertiser,.advertising,.advertising-header,.advertising2,.advertisingTable,.advertising_block,.advertisment,.advertisment_two,.advertize,.advertorial,.advertorial-promo-box,.adverts,.advt,.advt-banner-3,.advt300,.advt720,.adwordListings,.adwrapper,.adwrapper-lrec,.adwrapper948,.affiliate,.affiliate-link,.affiliate-sidebar,.affiliateAdvertText,.agi-adsaleslinks,.alt_ad,.anchorAd,.answer_ad_content,.aolSponsoredLinks,.aopsadvert,.article-ads,.articleAd,.articleAds,.articleAdsL,.articleEmbeddedAdBox,.article_ad,.article_adbox,.article_mpu_box,.articleads,.aseadn,.aux-ad-widget-2,.b-astro-sponsored-links_horizontal,.b-astro-sponsored-links_vertical,.banner-ad,.banner-ads,.banner-adverts,.banner300x100,.banner300x250,.banner468,.bannerAd,.bannerAdWrapper300x250,.bannerAdWrapper730x86,.banner_300x250,.banner_728x90,.banner_ad,.banner_ad_footer,.banner_ad_leaderboard,.bannerad,.barkerAd,.base-ad-mpu,.base_ad,.bgnavad,.big-ads,.bigAd,.big_ad,.big_ads,.bigad,.bigad2,.billboard_ad,.block-ad,.block-adsense,.block_ad,.block_ad_sb_text,.block_ad_sponsored_links,.block_ad_sponsored_links-wrapper,.blocked-ads,.blog-ads-container,.blogAd,.blogAdvertisement,.blogBigAd,.blog_ad,.blogads,.body_ad,.body_sponsoredresults_bottom,.body_sponsoredresults_middle,.body_sponsoredresults_top,.bookseller-header-advt,.bottomAd,.bottomAds,.bottom_ad_block,.bottom_sponsor,.bottomad,.bottomrightrailAd,.bottomvidad,.box-ad,.box-ads,.boxAd,.box_ad,.box_advertisment_62_border,.box_content_ad,.box_content_ads,.boxad,.bps-ad-wrapper,.bps-advertisement,.bps-advertisement-inline-ads,.bullet-sponsored-links,.bullet-sponsored-links-gray,.burstContentAdIndex,.buttonAd,.buttonAds,.buttonadbox,.bx_ad,.bx_ad_right,.cA-adStrap,.cColumn-TextAdsBox,.care2_adspace,.cb-ad-container,.cb_footer_sponsor,.cb_navigation_ad,.cbstv_ad_label,.cbzadvert,.cdAdTitle,.cdmainlineSearchAdParent,.cdsidebarSearchAdParent,.centerAd,.center_ad,.centerad,.clearerad,.cm_ads,.cms-Advert,.cnn160AdFooter,.cnnAd,.cnnMosaic160Container,.cnnStoreAd,.cnnStoryElementBoxAd,.cnnWCAdBox,.cnnWireAdLtgBox,.cnn_728adbin,.cnn_adcntr300x100,.cnn_adspc336cntr,.cnn_adtitle,.column2-ad,.conductor_ad,.confirm_ad_left,.confirm_ad_right,.confirm_leader_ad,.consoleAd,.container-adwords,.containerSqAd,.container_serendipity_plugin_google_adsense,.contentAd,.content_ad,.content_adsq,.contentad,.contenttextad,.contest_ad,.cp_ad,.cpmstarHeadline,.cpmstarText,.cs-mpu,.cspAd,.ct_ad,.cubeAd,.cube_ads,.currency_ad,.darla_ad,.dartAdImage,.dart_ad,.dart_tag,.dartadvert,.dartiframe,.dc-ad,.dcAdvertHeader,.deckAd,.deckads,.detail-ads,.detailMpu,.divAd,.divads,.divider_ad,.dmco_advert_iabrighttitle,.download_ad,.downloadad,.dynamic_ad,.e-ad,.ec-ads,.entryad,.ez-clientAd,.f_Ads,.featuredAds,.featuredadvertising,.flagads,.flash_advert,.flashad,.flexiad,.flipbook_v2_sponsor_ad,.footerAd,.footerAdModule,.footerTextAd,.footer_ad,.footer_ads,.footer_block_ad,.footer_line_ad,.footerad,.ft-ad,.ftdContentAd,.full_ad_box,.fullbannerad,.g3rtn-ad-site,.g_ggl_ad,.ga-textads-bottom,.ga-textads-top,.gads_cb,.gglAds,.googads,.google-ad-container,.google-ads,.google-ads-boxout,.google-ads-slim,.google-right-ad,.google-sponsored-ads,.google468_60,.googleAd,.googleAd-content,.googleAd-list,.googleAdBox,.googleAdSense,.googleAd_body,.googleAds,.googleAds_article_page_above_comments,.googleAdsense,.googleProfileAd,.google_ads_bom_title,.googlead,.googleaddiv,.googleaddiv2,.googleads,.googleads_300x250,.googleads_title,.gpAds,.gradientAd,.gsfAd,.gt_ad,.gt_ad_300x250,.gt_ad_728x90,.gt_adlabel,.gutter-ad-left,.gutter-ad-right,.h_Ads,.h_ad,.hd_advert,.header-ad,.header-advert,.headerAd,.headerAds,.headerAdvert,.header_ad,.header_ad_center,.header_advertisment,.hi5-ad,.highlightsAd,.hm_advertisment,.home-ad-links,.homeAd,.homeMediumAdGroup,.home_ad_bottom,.homead,.homepage-ad,.homepageFlexAdOuter,.homepageMPU,.hor_ad,.horiz_adspace,.horizontalAd,.horizontal_ad,.hortad,.houseAdsStyle,.hp2-adtag,.hp_ad_cont,.hp_ad_text,.hp_t_ad,.hp_w_ad,.ic-ads,.ico-adv,.idMultiAd,.image-advertisement,.imageads,.in-page-ad,.in-story-text-ad,.indy_googleads,.inline-mpu-left,.inlineSideAd,.inline_ad_title,.inlinead,.inlist-ad,.inner-advt-banner-3,.innerAds,.innerad,.inpostad,.is24-adplace,.islandAd,.islandAdvert,.islandad,.jp-advertisment-promotional,.js-advert,.kw_advert,.kw_advert_pair,.l_ad_sub,.l_banner.ads_show_if,.largeRectangleAd,.leader_ad,.leaderboardAd,.leaderboardad,.left-ad,.leftAd,.left_ads,.leftad,.leftbar_ad_160_600,.leftnavad,.lgRecAd,.lg_ad,.linead,.link_advertise,.live-search-list-ad-container,.log_ads,.lowerAds,.m4-adsbygoogle,.m_banner_ads,.macAd,.macad,.main-ad,.main-tabs-ad-block,.main_ad,.main_adbox,.map_media_banner_ad,.marginadsthin,.marketing-ad,.mdl-ad,.media-advert,.mediaAd,.mediaAdContainer,.medium-rectangle-ad,.menuItemBannerAd,.messageBoardAd,.micro_ad,.mid_ad,.midad,.min_navi_ad,.miniad,.mobile-sponsoring,.mod-ad-lrec,.mod-ad-n,.mod-adopenx,.mod_admodule,.module-ad-small,.module-ads,.moduleAdvertContent,.modulegad,.moduletable-advert,.moduletablesquaread,.mpu,.mpu-ad,.mpu-footer,.mpu-fp,.mpu-title,.mpu-top-left,.mpu-top-right,.mpuAd,.mpuBox,.mpuContainer,.mpuTextAd,.mpu_ad,.mpu_gold,.mpu_holder,.mpu_platinum,.mpu_text_ad,.mpuad,.mpuholderportalpage,.mrec_advert,.ms-ads-link,.msfg-shopping-mpu,.mwaads,.nSponsoredLcContent,.nSponsoredLcTopic,.nadvt300,.narrow_ad_unit,.narrow_ads,.naviad,.nba300Ad,.nbaT3Ad160,.nbaTVPodAd,.nbaTwo130Ads,.nbc_ad_carousel_wrp,.newTopAdContainer,.newad,.nf-adbox,.nn-mpu,.noAdForLead,.normalAds,.nrAds,.oas-bottom-ads,.oio-banner-zone,.oio-link-sidebar,.oio-zone-position,.onethirdadholder,.openx,.openx-ad,.other_adv2,.ov_spns,.pageGoogleAd,.pageGoogleAdFlat,.pageLeaderAd,.pagead,.partnersTextLinks,.pencil_ad,.player_ad_box,.player_page_ad_box,.pnp_ad,.podSponsoredLink,.post-ad,.post_ad,.post_sponsor_unit,.postbit_adbit_register,.postbit_adcode,.prebodyads,.premium_ad_container,.promoAd,.promoAds,.promo_ad,.publication-ad,.publicidad,.puff-advertorials,.qa_ad_left,.quigo-ad,.qzvAdDiv,.r_ad_box,.rad_container,.rectad,.rectangleAd,.rectanglead,.redads_cont,.regularad,.relatedAds,.remads,.result_ad,.results_sponsor,.results_sponsor_right,.reviewMidAdvertAlign,.rght300x250,.rhads,.rhs-ad,.rhs-ads-panel,.right-ad,.right-ad-holder,.right-ad2,.right-ads2,.rightAd,.right_ad,.right_ad_text,.right_ads,.right_col_ad,.right_hand_advert_column,.rightad,.rightad_1,.rightad_2,.rightads,.rightadunit,.rightcol_boxad,.rightcoladvert,.rnav_ad,.rt_ad1_300x90,.rt_ad_300x250,.rt_ad_call,.savvyad_unit,.sb-ad-sq-bg,.sbAdUnitContainer,.sb_adsN,.sb_adsNv2,.sb_adsW,.sb_adsWv2,.scanAd,.scc_advert,.sci-ad-main,.sci-ad-sub,.search-results-ad,.search-sponsor,.search-sponsored,.searchAd,.searchSponsoredResultsBox,.search_column_results_sponsored,.search_results_sponsored_top,.section-sponsor,.section_mpu_wrapper,.selfServeAds,.sidbaread,.side-ad,.side-ads,.side_ad,.side_ad2,.sidead,.sideadsbox,.sideadvert,.sidebar-ad,.sidebar-text-ad,.sidebarAd,.sidebarAdUnit,.sidebarAdvert,.sidebar_ad,.sidebar_ad_300_250,.sidebar_box_ad,.sidebarad,.sidebarad_bottom,.sideheadnarrowad,.sideheadsponsorsad,.singleAd,.singleAdsContainer,.singlead,.sitesponsor,.skinAd,.skin_ad_638,.sky-ad,.skyAd,.skyAdd,.sky_ad,.skyad,.skyscraper-ad,.slideshow-ad,.slinks,.slpBigSlimAdUnit,.slpSquareAdUnit,.sm_ad,.smallSkyAd1,.smallSkyAd2,.small_ad,.small_ads,.smallad-left,.smallsponsorad,.specialAd175x90,.speedyads,.sphereAdContainer,.spl_ad,.spl_ad2,.spl_ad_plus,.splitAd,.spons-link,.sponslink,.sponsor-ad,.sponsor-links,.sponsorArea,.sponsorPost,.sponsorPostWrap,.sponsor_ad_area,.sponsor_line,.sponsor_links,.sponsoradtitle,.sponsorbox,.sponsored,.sponsored-chunk,.sponsored-editorial,.sponsored-links,.sponsored-links-holder,.sponsored-post,.sponsored-results,.sponsored-text,.sponsoredLinks,.sponsoredLinksHeader,.sponsored_ads,.sponsored_box,.sponsored_box_search,.sponsored_by,.sponsored_links,.sponsored_links_title_container,.sponsored_links_title_container_top,.sponsored_links_top,.sponsored_results,.sponsoredibbox,.sponsoredlinks,.sponsoredtextlink_container,.sponsoredtextlink_container_ovt,.sponsorlink,.sponsorlink2,.spotlightAd,.squareAd,.square_ad,.squared_ad,.ss-ad-mpu,.staticAd,.store-ads,.story_AD,.subad,.subcontent-ad,.supercommentad_left,.supercommentad_right,.supportAdItem,.surveyad,.t10ad,.tab_ad,.tab_ad_area,.tablebordersponsor,.tadsanzeige,.tadsbanner,.tadselement,.tallad,.tblTopAds,.tbl_ad,.teaser-sponsor,.teaserAdContainer,.teaser_adtiles,.text-ad-links,.text-g-advertisement,.text-g-group-short-rec-ad,.text-g-net-grp-google-ads-article-page,.textAd,.textAds,.text_ad,.text_ads,.textad,.textad_headline,.textadbox,.textads,.textadsfoot,.textlink-ads,.thisIsAd,.thisIsAnAd,.ticket-ad,.tileAds,.title-ad,.title_adbig,.tncms-region-ads,.toolad,.toolbar-ad,.top-ad,.top-ad-space,.top-ads,.top-menu-ads,.topAdWrap,.topAds,.topAdvertisement,.topBannerAd,.top_Ad,.top_ad,.top_ad_728_90,.top_ad_disclaimer,.top_ad_wrapper,.top_ads,.top_advert,.top_advertising_lb,.top_container_ad,.top_sponsor,.topad,.topadbox,.topads,.topadspot,.topcontentadvertisement,.topic_inad,.topstoriesad,.towerAd,.towerAdLeft,.towerAds,.tower_ad_disclaimer,.ts-ad_unit_bigbox,.ts-banner_ad,.ttlAdsensel,.tto-sponsored-element,.twoColumnAd,.twoadcoll,.twoadcolr,.tx_smartadserver_pi1,.txt-ads,.txtadvertise,.type_miniad,.type_promoads,.undertimyads,.usenext,.vertad,.videoAd,.videoBoxAd,.video_ad,.view-promo-mpu-right,.wide-ad,.wide-skyscraper-ad,.wideAdTable,.wide_ad_unit_top,.wide_ads,.wide_google_ads,.widget-ad,.widget-entry-ads-160,.wikia_ad_placeholder,.withAds,.wnMultiAd,.wp125ad,.wpn_ad_content,.wsSponsoredLinksRight,.wsTopSposoredLinks,.x03-adunit,.x04-adunit,.y-ads,.y-ads-wide,.y7-advertisement,.yahoo-sponsored,.yahoo_ads,.yan-sponsored,.ygrp-ad,.yrail_ad_wrap,.yrail_ads,.ysmsponsor,.ysponsor,a[href^="http://adserving.liveuniversenetwork.com/"],a[href^="http://latestdownloads.net/download.php?"],a[href^="http://secure.signup-page.com/"],a[href^="http://secure.signup-way.com/"],a[href^="http://www.FriendlyDuck.com/AF_"],a[href^="http://www.adbrite.com/mb/commerce/purchase_form.php?"],a[href^="http://www.friendlyduck.com/AF_"],a[href^="http://www.google.com/aclk?"],a[href^="http://www.liutilities.com/aff"],a[href^="http://www.my-dirty-hobby.com/?sub="],a[href^="http://www.ringtonematcher.com/"],#mbEnd[cellspacing="0"][style="padding: 0pt; white-space: nowrap;"],div#mclip_container:first-child:last-child,div#tads.c,table.ra[align="left"][width="30%"],table.ra[align="right"][width="30%"] { visibility:hidden !important; display:none !important; }</STYLE></HTML>
\ No newline at end of file |