<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type='text/xsl' href='http://xml2rfc.tools.ietf.org/authoring/rfc2629.xslt' ?>
<!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN"
"http://xml2rfc.tools.ietf.org/authoring/rfc2629.dtd">

<rfc category="std" docName="draft-ietf-oauth-token-binding-00" ipr="trust200902">

  <?rfc toc="yes" ?>
  <?rfc tocdepth="5" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc strict="yes" ?>
  <?rfc compact="yes" ?>
  <?rfc subcompact="no" ?>

  <front>
    <title abbrev="OAuth 2.0 Token Binding">OAuth 2.0 Token Binding</title>

    <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
      <organization abbrev="Microsoft">Microsoft</organization>
      <address>
        <email>mbj@microsoft.com</email>
	<uri>http://self-issued.info/</uri>
      </address>
    </author>

    <author fullname="John Bradley" initials="J." surname="Bradley">
      <organization abbrev="Ping Identity">Ping Identity</organization>
      <address>
        <email>ve7jtb@ve7jtb.com</email>
	<uri>http://www.thread-safe.com/</uri>
      </address>
    </author>

    <author fullname="Brian Campbell" initials="B." surname="Campbell">
      <organization>Ping Identity</organization>
      <address>
	<email>brian.d.campbell@gmail.com</email>
	<uri>https://twitter.com/__b_c</uri>
      </address>
    </author>

    <date day="7" month="September" year="2016" />

    <area>Security</area>
    <workgroup>OAuth Working Group</workgroup>

    <keyword>OAuth</keyword>
    <keyword>Token Binding</keyword>
    <keyword>Proof-of-Possession</keyword>
    <keyword>PoP</keyword>

    <abstract>
      <t>
	This specification enables OAuth 2.0 implementations to apply
	Token Binding to Access Tokens and Refresh Tokens.
	This cryptographically binds these tokens to the TLS connections
	over which they are intended to be used.
	This use of Token Binding protects these tokens
	from man-in-the-middle and token export and replay attacks.
       </t>
    </abstract>
  </front>

  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>
	This specification enables OAuth 2.0 <xref target="RFC6749"/> implementations to apply
	Token Binding
	<xref target="I-D.ietf-tokbind-protocol">The Token Binding Protocol Version 1.0</xref>
	<xref target="I-D.ietf-tokbind-https">Token Binding over HTTP</xref>
	to Access Tokens and Refresh Tokens.
	This cryptographically binds these tokens to the TLS connections
	over which they are intended to be used.
	This use of Token Binding protects these tokens
	from man-in-the-middle and token export and replay attacks.
      </t>

      <section anchor="rnc" title="Requirements Notation and Conventions">
	<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
	"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
	document are to be interpreted as described in <xref
	target="RFC2119">RFC 2119</xref>.</t>
      </section>

      <section anchor="Terminology" title="Terminology">
	<t>
	  This specification uses the terms "Access Token", "Authorization Code",
	  "Authorization Endpoint", "Authorization Grant", "Authorization Server",
	  "Client", "Client Authentication", "Client Identifier", "Client Secret",
	  "Grant Type", "Protected Resource", "Redirection URI", "Refresh Token",
	  "Resource Owner", "Resource Server", "Response Type", and "Token Endpoint"
	  defined by <xref target="RFC6749">OAuth 2.0</xref>,
	  the terms "Claim", "Claim Name", "Claim Value", and "JSON Web Token (JWT)"
	  defined by <xref target="JWT">JSON Web Token (JWT)</xref>,
	  the term "User Agent" defined by <xref target="RFC7230">RFC 7230</xref>,
	  and
	  the terms "Provided", "Referred", "Token Binding" and "Token Binding ID"
	  defined by <xref target="I-D.ietf-tokbind-https">Token Binding over HTTP</xref>.
	</t>
      </section>
    </section>

    <section anchor="RefreshTokenBinding" title="Token Binding for Refresh Tokens">
      <t>
	Token Binding of refresh tokens is a straightforward first-party scenario,
	applying term "first-party" as used in
	<xref target="I-D.ietf-tokbind-https">Token Binding over HTTP</xref>.
	It cryptographically binds the refresh token to the TLS connection
	between the client and the token endpoint.
	This case is straightforward because the refresh token is
	both retrieved by the client from the token endpoint
	and sent by the client to the token endpoint.
	Unlike the federated scenarios described in
	Section 3 (Federation Use Cases) of 
	<xref target="I-D.ietf-tokbind-https">Token Binding over HTTP</xref>
	and the access token case described in the next section,
	only a single TLS connection is involved in the refresh token case.
      </t>
      <t>
	Token Binding a refresh token requires that the authorization server do two things.
	First, when refresh token is sent to the client, the authorization server needs to
	remember the Provided Token Binding ID
	and remember its association with the issued refresh token.
	Second, when a token request containing a refresh token is received at the token endpoint,
	the authorization server needs to verify that
	the Provided Token Binding ID for the request
	matches the remembered Token Binding ID associated with the refresh token.
	If the Token Binding IDs do not match,
	the authorization server should return an error in response to the request.
      </t>
      <t>
	The means by which the authorization server remembers the association
	between the refresh token and the Token Binding ID
	is an implementation detail that beyond the scope of this specification.
	Some authorization servers will choose to store the Token Binding ID
	(or a cryptographic hash of it, such a SHA-256 hash <xref target="SHS"/>)
	in the refresh token itself, thus reducing the amount of state to be kept by the server.
	Other authorization servers will add the Token Binding ID value (or a hash of it)
	to an internal data structure also containing other information about the refresh token,
	such as grant type information.
	These choices make no difference to the client, since the refresh token is opaque to it.
      </t>
    </section>

    <section anchor="AccessTokenBinding" title="Token Binding for Access Tokens">
      <t>
	Token Binding for access tokens cryptographically binds the access token
	to the TLS connection between the client and the resource server.
	Token Binding is applied to access tokens in a similar manner to that
	described in Section 3 (Federation Use Cases) of 
	<xref target="I-D.ietf-tokbind-https">Token Binding over HTTP</xref>.
	It is also builds upon the mechanisms for Token Binding of ID Tokens defined in
	<xref target="OpenID.TokenBinding">OpenID Connect Token Bound Authentication 1.0</xref>.
      </t>
      <t>
	In the OpenID Connect <xref target="OpenID.Core"/> use case,
	HTTP redirects are used to pass information
	between the identity provider and the relying party;
	this HTTP redirect makes the Token Binding ID of the relying party
	available to the identity provider as the Referred Token Binding ID,
	information about which is then added to the ID Token.
	No such redirect occurs between the authorization server and the resource server
	in the access token case;
	therefore, information about the Token Binding ID for the TLS connection
	between the client and the resource server needs to be explicitly
	communicated by the client to the authorization server to achieve Token Binding
	of the access token.
	This information is passed to the authorization server
	using this request parameter:
      </t>
      <t>
	<list style="hanging">
	  <t hangText="resource_tbh">
	    <vspace/>
	    Base64url encoding of the
	    SHA-256 hash <xref target="SHS"/>
	    of the Token Binding ID for the TLS connection
	    between the client and the resource server.
	  </t>
	</list>
      </t>
      <t>
	Note that to obtain this Token Binding ID,
	the client needs to establish a TLS connection between itself and the resource server
	prior to making the authorization request so that the Provided Token Binding ID
	for the TLS connection to the resource server can be obtained.
	The means by which the client retrieves this Token Binding ID
	from the underlying Token Binding API is implementation and operating system specific.
	An alternative, if supported, is for the client to generate a Token Binding key
	to use for the resource server, use the Token Binding ID for that key,
	and then later use that key when the TLS connection to the resource server is established.
      </t>
      <t>
	The authorization server MUST ignore the <spanx style="verb">resource_tbh</spanx>
	parameter if it does not support Token Binding for the access token.
      </t>

      <section anchor="InitialAccessToken" title="Initial Access Tokens">
	<t>
	  Upon receiving the hash of the Token Binding ID
	  in an authorization request containing the
	  <spanx style="verb">resource_tbh</spanx> (resource token binding hash)
	  authorization request parameter,
	  the authorization server then records it in the issued access token.
	  Alternatively, in some implementations, the resource's Token Binding ID hash
	  might be communicated to the resource server by other means,
	  such as by introspecting <xref target="RFC7662"/> the access token.
	</t>
      </section>

      <section anchor="RefreshedAccessToken" title="Refreshed Access Tokens">
	<t>
	  Access tokens obtained from refresh requests can also be token bound.
	  In this case, the hash of the Token Binding ID
	  of the TLS connection between the client and the resource server
	  is sent to the authorization server at the token endpoint using the
	  <spanx style="verb">resource_tbh</spanx> (resource token binding hash)
	  token request parameter;
	  its syntax is exactly the same as the corresponding authorization request parameter.
	  The authorization server then records it in the issued access token
	  or communicates it to the resource server by other means,
	  just as in the previous case.
	</t>
      </section>

      <section anchor="Resource" title="Resource Server Token Binding Validation">
	<t>
	  Upon receiving a token bound access token, the resource server validates the binding
	  by computing a SHA-256 hash of the Provided Token Binding ID and comparing it
	  to the token binding hash value for the access token.
	  If these values do not match, the resource access attempt MUST be rejected with an error.
	</t>
      </section>

      <section anchor="Representation" title="Representing Token Binding in JWT Access Tokens">
	<t>
	  If the access token is represented as a JWT,
	  the token binding information SHOULD be represented in the same way
	  that it is in token bound OpenID Connect ID Tokens
	  <xref target="OpenID.TokenBinding"/>.
	  That specification defines the new JWT Confirmation Method
	  <xref target="RFC7800">RFC 7800</xref>
	  member <spanx style="verb">tbh</spanx> (token binding hash) 
	  to represent the SHA-256 hash of a Token Binding ID
	  in an ID Token.
	  The value of the <spanx style="verb">tbh</spanx> member is the
	  base64url encoding of the SHA-256 hash of the Token Binding ID.
	</t>
	<t>
	  The following example demonstrates the JWT Claims Set of an access token
	  containing the base64url encoding of the SHA-256 hash of a Token Binding ID
	  as the value of the <spanx style="verb">tbh</spanx> (token binding hash)
	  element in the <spanx style="verb">cnf</spanx> (confirmation) claim:
	</t>
	<figure>
	  <!-- TBD Generate an actual "tbh" value from an actual Token Binding ID -->
	  <artwork><![CDATA[
  {
   "iss": "https://server.example.com",
   "aud": "https://resource.example.com",
   "iat": 1467324320,
   "exp": 1467324920,
   "cnf":{
     "tbh": "n0jI3trBK6_Gp2qiLOf48ZEZTjpBnhm-QOyzJxhBeAk"
    }
  }
]]></artwork>
	</figure>

      </section>

    </section>

    <section anchor="Phasing" title="Phasing in Token Binding and Preventing Downgrade Attacks">
      <t>
	Many OAuth implementations will be deployed in situations in which
	not all participants support Token Binding.
	Any of combination of the client, the authorization server, the resource server,
	and the User Agent may not yet support Token Binding,
	in which case it will not work end-to-end.
      </t>
      <t>
	It is a context-dependent deployment choice whether to allow
	interactions to proceed in which Token Binding is not supported
	or whether to treat Token Binding failures at any step as fatal errors.
	Particularly in dynamic deployment environments in which End Users have choices
	of clients, authorization servers, resource servers, and/or User Agents,
	it is RECOMMENDED that authorizations using one or more components
	that do not implement Token Binding be allowed to successfully proceed.
	This enables different components to be upgraded to supporting Token Binding
	at different times, providing a smooth transition path for
	phasing in Token Binding.
	However, when Token Binding has been performed,
	any Token Binding key mismatches MUST be treated as fatal errors.
      </t>
      <t>
	If all the participants in an authorization interaction
	support Token Binding and yet one or more of them does not use it,
	this is likely evidence of a downgrade attack.
	In this case, the authorization SHOULD be aborted with an error.
	For instance, if the resource server knows that the authorization server and the User Agent both
	support Token Binding and yet the access token received does not contain
	Token Binding information, this is almost certainly a sign of an attack.
      </t>
      <t>
	The authorization server and client can determine whether the other supports Token Binding
	using the metadata values defined in the next section.
	They can determine whether the User Agent supports Token Binding
	by whether it negotiated Token Binding for the TLS connection.
	At present, there is no defined mechanism for determining whether
	the resource server supports Token Binding or not.
	However, it always safe to proceed as if it does;
	at worst, the resource server simply won't verify the Token Binding.
      </t>
    </section>

    <section anchor="Metadata" title="Token Binding Metadata">
      <section anchor="ClientMetadata" title="Token Binding Client Metadata">
	<t>
	  Clients supporting Token Binding that also support
	  the <xref target="RFC7591">OAuth 2.0 Dynamic Client Registration Protocol</xref>
	  use these metadata values to register their support for Token Binding
	  of Access Tokens and Refresh Tokens:
	</t>
	<t>
	  <list style="hanging">
	    <t hangText="client_access_token_token_binding_supported">
	      <vspace/>
	      OPTIONAL.
	      Boolean value specifying whether the Client supports Token Binding of Access Tokens.
	      If omitted, the default value is <spanx style="verb">false</spanx>.
	    </t>
	    <t hangText="client_refresh_token_token_binding_supported">
	      <vspace/>
	      OPTIONAL.
	      Boolean value specifying whether the Client supports Token Binding of Refresh Tokens.
	      If omitted, the default value is <spanx style="verb">false</spanx>.
	    </t>
	  </list>
	</t>
      </section>

      <section anchor="ASMetadata" title="Token Binding Authorization Server Metadata">
	<t>
	  Authorization Servers supporting Token Binding that also support
	  <xref target="OAuth.AuthorizationMetadata">OAuth 2.0 Authorization Server Metadata</xref>
	  use these metadata values to register their support for Token Binding
	  of Access Tokens and Refresh Tokens:
	</t>
	<t>
	  <list style="hanging">
	    <t hangText="as_access_token_token_binding_supported">
	      <vspace/>
	      OPTIONAL.
	      Boolean value specifying whether the Authorization Server supports Token Binding of Access Tokens.
	      If omitted, the default value is <spanx style="verb">false</spanx>.
	    </t>
	    <t hangText="as_refresh_token_token_binding_supported">
	      <vspace/>
	      OPTIONAL.
	      Boolean value specifying whether the Authorization Server supports Token Binding of Refresh Tokens.
	      If omitted, the default value is <spanx style="verb">false</spanx>.
	    </t>
	  </list>
	</t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>
	If a refresh request is received by the authorization server containing a
	<spanx style="verb">resource_tbh</spanx> (resource token binding hash)
	value requesting a token bound access token and the refresh token in the request
	is not itself token bound, then it is not clear that token binding
	the access token adds significant value.
	This situation should be considered an open issue for discussion by the working group.
      </t>
    </section>

    <section anchor="IANA" title="IANA Considerations">

      <section anchor="OAuthParametersRegistry" title="OAuth Parameters Registration">

	<t>
	  This specification registers the following parameter
	  in the IANA
	  "OAuth Parameters" registry <xref target="IANA.OAuth.Parameters"/>
	  established by <xref target="RFC6749">RFC 6749</xref>:
	</t>

	<section anchor='ParametersContents' title='Registry Contents'>
	  <t> <?rfc subcompact="yes"?>
	    <list style="symbols">
	      <t>Parameter name: <spanx style="verb">resource_tbh</spanx></t>

	      <t>Parameter usage location: Authorization Request, Token Request</t>

	      <t>Change controller: IESG</t>

	      <t>Specification document(s): <xref target="AccessTokenBinding"/> of this document</t>

	      <t>Related information: None</t>
	    </list>
	  </t>

	</section>
	<?rfc subcompact="no"?>

      </section>

      <section anchor="DynRegRegistration" title="OAuth Dynamic Client Registration Metadata Registration">
	<t>
	  This specification registers the following client metadata definitions
	  in the IANA "OAuth Dynamic Client Registration Metadata" registry
	  <xref target="IANA.OAuth.Parameters"/>
	  established by <xref target="RFC7591"/>:
	</t>

	<section anchor="DynRegContents" title="Registry Contents">
	  <t> <?rfc subcompact="yes"?>
	    <list style="symbols">
	      <t>
		Client Metadata Name: <spanx style="verb">client_access_token_token_binding_supported</spanx>
	      </t>
	      <t>
		Client Metadata Description:
		Boolean value specifying whether the Client supports Token Binding of Access Tokens
	      </t>
	      <t>
		Change Controller: IESG
	      </t>
	      <t>
		Specification Document(s): <xref target="ClientMetadata"/> of [[ this specification ]]
	      </t>
	    </list>
	  </t>
	  <t>
	    <list style="symbols">
	      <t>
		Client Metadata Name: <spanx style="verb">client_refresh_token_token_binding_supported</spanx>
	      </t>
	      <t>
		Client Metadata Description:
		Boolean value specifying whether the Client supports Token Binding of Refresh Tokens
	      </t>
	      <t>
		Change Controller: IESG
	      </t>
	      <t>
		Specification Document(s): <xref target="ClientMetadata"/> of [[ this specification ]]
	      </t>
	    </list>
	  </t>
	</section>
	<?rfc subcompact="no"?>
      </section>

      <section anchor="DiscRegistration" title="OAuth Authorization Server Discovery Metadata Registration">
	<t>
	  This specification registers the following discovery metadata definitions
	  in the IANA "OAuth Authorization Server Discovery Metadata" registry
	  <!-- <xref target="IANA.OAuth.Parameters"/> TBD Uncomment once registry has been established -->
	  established by <xref target="OAuth.AuthorizationMetadata"/>:
	</t>

	<section anchor="DiscContents" title="Registry Contents">
	  <t> <?rfc subcompact="yes"?>
	    <list style="symbols">
	      <t>
		Discovery Metadata Name: <spanx style="verb">as_access_token_token_binding_supported</spanx>
	      </t>
	      <t>
		Discovery Metadata Description:
		Boolean value specifying whether the Authorization Server supports Token Binding of Access Tokens
	      </t>
	      <t>
		Change Controller: IESG
	      </t>
	      <t>
		Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
	      </t>
	    </list>
	  </t>
	  <t>
	    <list style="symbols">
	      <t>
		Discovery Metadata Name: <spanx style="verb">as_refresh_token_token_binding_supported</spanx>
	      </t>
	      <t>
		Discovery Metadata Description:
		Boolean value specifying whether the Authorization Server supports Token Binding of Refresh Tokens
	      </t>
	      <t>
		Change Controller: IESG
	      </t>
	      <t>
		Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
	      </t>
	    </list>
	  </t>
	</section>
	<?rfc subcompact="no"?>
      </section>

    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119"?>
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6749"?>
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7230"?>
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7662"?>
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7800"?>

      <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tokbind-protocol-10.xml' ?>
      <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-tokbind-https-06.xml' ?>

      <reference anchor="OpenID.TokenBinding" target="http://openid.net/specs/openid-connect-token-bound-authentication-1_0.html">
        <front>
          <title>OpenID Connect Token Bound Authentication 1.0</title>

          <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
            <organization abbrev="Microsoft">Microsoft</organization>
          </author>

          <author fullname="John Bradley" initials="J." surname="Bradley">
            <organization abbrev="Ping Identity">Ping Identity</organization>
          </author>

	  <author fullname="Brian Campbell" initials="B." surname="Campbell">
	    <organization>Ping Identity</organization>
	  </author>

          <date day="4" month="July" year="2016"/>
        </front>
      </reference>

      <reference anchor="JWT" target="http://tools.ietf.org/html/rfc7519">
	<front>
	  <title>JSON Web Token (JWT)</title>

	  <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
	    <organization abbrev="Microsoft">Microsoft</organization>
	  </author>

	  <author fullname="John Bradley" initials="J." surname="Bradley">
	    <organization abbrev="Ping Identity">Ping Identity</organization>
	  </author>

	  <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
	    <organization abbrev="NRI">Nomura Research Institute, Ltd.</organization>
	  </author>

	  <date month="May" year="2015" />
	</front>

	<seriesInfo name="RFC" value="7519"/>
	<seriesInfo name="DOI" value="10.17487/RFC7519"/>
      </reference>

      <reference anchor="SHS" target="http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf">
        <front>
          <title>Secure Hash Standard (SHS)</title>

          <author>
            <organization>National Institute of Standards and
            Technology</organization>
          </author>

          <date month="March" year="2012" />
        </front>
        <seriesInfo name="FIPS" value="PUB 180-4" />
        <format target="http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf" type="PDF" />
      </reference>

      <reference anchor="IANA.OAuth.Parameters" target="http://www.iana.org/assignments/oauth-parameters">
        <front>
          <title>OAuth Parameters</title>
          <author>
            <organization>IANA</organization>
          </author>
	  <date/>
        </front>
      </reference>

    </references>

    <references title="Informative References">
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7591"?>

      <reference anchor="OAuth.AuthorizationMetadata" target="http://tools.ietf.org/html/draft-ietf-oauth-discovery-04">
        <front>
	  <title>OAuth 2.0 Authorization Server Metadata</title>

	  <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
	    <organization abbrev="Microsoft">Microsoft</organization>
	    <address>
	      <email>mbj@microsoft.com</email>
	      <uri>http://self-issued.info/</uri>
	    </address>
	  </author>

	  <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
	    <organization abbrev="NRI">Nomura Research Institute, Ltd.</organization>
	    <address>
	      <email>n-sakimura@nri.co.jp</email>
	      <uri>http://nat.sakimura.org/</uri>
	    </address>
	  </author>

	  <author fullname="John Bradley" initials="J." surname="Bradley">
	    <organization abbrev="Ping Identity">Ping Identity</organization>
	    <address>
	      <email>ve7jtb@ve7jtb.com</email>
	      <uri>http://www.thread-safe.com/</uri>
	    </address>
	  </author>

	  <date day="3" month="August" year="2016" />
        </front>
	<seriesInfo name="Internet-Draft" value="draft-ietf-oauth-discovery-02"/>
      </reference>

      <reference anchor="OpenID.Core" target="http://openid.net/specs/openid-connect-core-1_0.html">
        <front>
          <title>OpenID Connect Core 1.0</title>

          <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
            <organization abbrev="NRI">Nomura Research Institute, Ltd.</organization>
          </author>

          <author fullname="John Bradley" initials="J." surname="Bradley">
            <organization abbrev="Ping Identity">Ping Identity</organization>
          </author>

          <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
            <organization abbrev="Microsoft">Microsoft</organization>
          </author>

          <author fullname="Breno de Medeiros" initials="B." surname="de Medeiros">
            <organization abbrev="Google">Google</organization>
          </author>

	  <author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
	    <organization abbrev="Salesforce">Salesforce</organization>
	  </author>

          <date day="8" month="November" year="2014"/>
        </front>
      </reference>

    </references>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>
	The authors would like to thank the following people for their contributions to the specification:
	Dirk Balfanz,
	William Denniss,
	Andrei Popov,
	and
	Nat Sakimura.
      </t>
    </section>

    <section anchor="TBD" title="Open Issues">
      <t>
	<list style="symbols">
	  <t>
	    Some token binding implementations apparently provide APIs that
	    enable native applications to provide Referred Token Bindings,
	    just as the federation support in the HTTPS Token Binding spec does.
	    Can we count on these APIs being supported on all platforms,
	    and if so, does this enable us to somehow do without the
	    <spanx style="verb">resource_tbh</spanx> parameter
	    by mandating that the client send both a Provided and a Referred
	    Token Binding to the authorization server?
	    If this isn't the case, is <spanx style="verb">resource_tbh</spanx>
	    actually secure or does this open a cross-channel validation hole?
	    This area probably needs more attention from both the Token Binding
	    and OAuth working groups.
	  </t>
          <t>
	    How should we support crypto agility for the hash function?
	  </t>
        </list>
      </t>
    </section>

    <section anchor="History" title="Document History">
      <t>[[ to be removed by the RFC Editor before publication as an RFC ]]</t>

      <t>
	-00
        <list style="symbols">
	  <t>
	    Created the initial working group version from draft-jones-oauth-token-binding-00.
	  </t>
	</list>
      </t>

    </section>

  </back>
</rfc>
