<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<rfc category="std" docName="draft-ietf-oauth-jwsreq-09" ipr="trust200902">
  <?rfc toc="yes"?>
  <?rfc tocompact="yes"?>
  <?rfc tocdepth="3"?>
  <?rfc tocindent="yes"?>
  <?rfc symrefs="yes"?>
  <?rfc sortrefs="yes"?>
  <?rfc comments="yes"?>
  <?rfc inline="yes"?>
  <?rfc compact="yes"?>
  <?rfc subcompact="no"?>
  <?rfc strict="no"?>

  <front>
    <title abbrev="OAuth JAR">The OAuth 2.0 Authorization Framework: JWT Secured Authorization Request (JAR)</title>

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

      <address>
        <postal>
          <street>1-6-5 Marunouchi, Marunouchi Kitaguchi Bldg.</street>
          <city>Chiyoda-ku</city>
          <code>100-0005</code>
          <region>Tokyo</region>
          <country>Japan</country>
        </postal>
        <phone>+81-3-5533-2111</phone>
        <email>n-sakimura@nri.co.jp</email>
        <uri>http://nat.sakimura.org/</uri>
      </address>
    </author>

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

      <address>
        <postal>
          <street>Casilla 177, Sucursal Talagante</street>
          <city>Talagante</city>
          <region>RM</region>
          <code/>
          <country>Chile</country>
        </postal>

        <phone>+44 20 8133 3718</phone>
        <facsimile/>
        <email>ve7jtb@ve7jtb.com</email>
        <uri>http://www.thread-safe.com/</uri>
      </address>
    </author>

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

    <area>Security</area>

    <workgroup>OAuth Working Group</workgroup>

    <keyword>RFC</keyword>
    <keyword>Request for Comments</keyword>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>Assertion</keyword>
    <keyword>Claim</keyword>
    <keyword>Security Token</keyword>
    <keyword>OAuth</keyword>
    <keyword>JavaScript Object Notation</keyword>
    <keyword>JSON</keyword>
    <keyword>JSON Web Token</keyword>
    <keyword>JWT</keyword>
    <keyword>JSON Web Signature</keyword>
    <keyword>JWS</keyword>
    <keyword>JSON Web Encryption</keyword>
    <keyword>JWE</keyword>

    <abstract>
      <t>The authorization request in OAuth 2.0 described in 
      RFC 6749 utilizes query parameter
      serialization, which means that Authorization Request parameters are 
	  encoded in the URI of the request and sent through user agents such as 
	  web browsers. 
	  While it is easy to implement, it means that 
	  (a) the communication through the user agents are not integrity protected 
	  and thus the parameters can be tainted, and 
	  (b) the source of the communication is not authenticated. 
	  Because of these weaknesses, several attacks to the protocol have now been 
	  put forward.</t>

      <t>This document introduces the ability to send request parameters in a 
      JSON Web Token (JWT) instead, which allows the request to be 
	  JWS signed and/or JWE encrypted 
	  so that the integrity, source authentication and confidentiallity property 
	  of the Authorization Request is attained. 
      The request can be sent by value or by reference.
      </t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>
	  The Authorization Request in <xref target="RFC6749">OAuth 2.0</xref> utilizes query parameter
      serialization and typically sent through user agents such as web browsers. 
	  </t>
	  <t>
	  For example, the parameters <spanx style="verb">response_type</spanx>, <spanx style="verb">client_id</spanx>, <spanx style="verb">state</spanx>, and <spanx style="verb">redirect_uri</spanx> are encoded in the URI of the request:
      </t>
      <figure>
        <artwork><![CDATA[
    GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz 
    &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 
    Host: server.example.com
        ]]></artwork>
	  </figure>	 

	  <t>
	  While it is easy to implement,  the encoding in the URI 
	  does not allow application layer security with confidentiality 
      and integrity protection to be used. 
	  While TLS is used to offer communication security 
      between the Client and the user-agent and the user-agent and the 
	  Authorization Server, TLS sessions are terminated in the user-agent. 
	  In addition, TLS sessions may be terminated 
      prematurely at some middlebox (such as a load balancer). 
	  </t>
	  <t>
	  As the result, the Authorization Request of <xref target="RFC6749" /> has a 
	  property that 
	  </t>
	  <t><list style="format (%c)">
	    <t>the communication through the user agents are 
		not integrity protected and thus the parameters can be tainted 
		(integrity protection failure);  </t>
	    <t>the source of the communication is not authenticated  
		(source authentication failure); and  </t>
		<t>the communication through the user agents can be monitored 
		(containment / confidentiality failure). </t>
	  </list></t>
	  <t>
	  Because of these weaknesses, several attacks against the protocol, such as Redirection URI rewriting, has been discovered.  
	  </t>
	  <t>
	  The use of application layer security mitigates these issues. 
	  </t>
      <t>
      In addition, it allows requests to be prepared 
      by a third party so that a client application cannot request more permissions 
      than previously agreed. This offers an additional degree of privacy protection.
      </t>
      <t>
      Furthermore, the request by reference allows the reduction of over-the- wire overhead.
      </t>
      <t>The <xref target="RFC7519">JWT</xref> encoding has been chosen because of </t>
      <t><list style="format (%d)">
        <t>its close relationship with JSON, 
        which is used as OAuth's response format; </t>
        <t>its developer friendliness due to its textual nature;  </t>
        <t>its relative compactness compared to XML; </t>
        <t>its development status that it is an RFC and so is its associated 
        signing and encryption methods as 
        <xref target="RFC7515" /> and <xref target="RFC7516" />; </t>
		<t>relative ease of JWS and JWE compared to XML Signature and Encryption. </t>
      </list>
      </t>
      <t>The parameters <spanx style="verb">request</spanx> and <spanx
      style="verb">request_uri</spanx> are introduced as additional
      authorization request parameters for the <xref target="RFC6749">OAuth
      2.0</xref> flows. The <spanx style="verb">request</spanx> parameter is a
      <xref target="RFC7519">JSON Web Token (JWT) </xref> whose JWT Claims Set holds the JSON
      encoded OAuth 2.0 authorization request parameters. 
	  This JWT is integrity protected and source authenticated using 
	  JWS. 
	  </t>
	  <t>
	  The <xref
      target="RFC7519">JWT</xref> can be passed to the authorization endpoint by reference,
      in which case the parameter <spanx style="verb">request_uri</spanx> is
      used instead of the <spanx style="verb">request</spanx>.</t>

      <t>Using <xref target="RFC7519">JWT</xref> as the request encoding instead of query
      parameters has several advantages:</t>

      <t><list style="format (%c)">
          <t>(integrity protection)
		  The request can be signed so that the integrity of the request can be checked ;</t>
		  <t>(source authentication)
		  The request can be signed so that the signer can be authenticated
		  ;</t>

          <t>(confidentiality protection)
		  The request can be encrypted so that end-to-end confidentiality can be provided even if the TLS connection is terminated at one point or another 
		  ; and </t>  
		  <t>(collection minimization)
		  The request can be signed by a third party attesting that 
		  the authorization request is compliant to certain policy. 
		  For example, a request can be pre-examined by a third party 
		  that all the personal data requested is strictly necessary 
		  to perform the process that the end-user asked for, and 
		  statically signed by that third party. The client would 
		  then send the request along with dynamic parameters such as 
		  state. 
		  The authorization server then examines the signature 
		  and shows the conformance status to the end-user, 
		  who would have some assurance as to 
		  the legitimacy of the request when authorizing it. 
		  In some cases, it may even be desirable to skip the authorization 
		  dialogue under such circumstances. 
		  
		  </t>
        </list></t>

      <t>There are a few cases that request by reference are useful such
      as:</t>

      <t><list style="numbers">
          <t>When it is desirable to reduce the size of transmitted request. 
		  The use of application layer security increases 
		  the size of the request, particularly when public key 
		  cryptography is used. </t>

          <t>The client can make a signed Request Object and
          put it at a place that the Authorization Server can access. 
		  This may just be done by a client utility or
          other process, so that the private key does not have to reside on
          the client, simplifying programming. 
          Downside of it is that the signed portion just become a token. </t>

          <t>When the server wants the requests to be cacheable: The
          <spanx style="verb">request_uri</spanx> may include a SHA-256 hash of 
          the contents of the resources referenced by the Request Object URI. 
          With this, the server knows if the resource 
          has changed without fetching it, so it does not have to
          re-fetch the same content, which is a win as well. This is explained 
          in <xref target="RequestUriParameter" />. </t>
		  
		  <t>When the client does not want to do the crypto: 
		  The Authorization Server may provide an endpoint to 
		  accept the Authorization Request through direct communication 
		  with the Client so that the Client is authenticated 
		  and the channel is TLS protected. </t>
        </list></t>

      <t>This capability is in use by OpenID Connect <xref target="OpenID.Core" />.</t>

      <section title="Requirements Language">
        <t>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 <xref
        target="RFC2119">RFC 2119</xref>.</t>
      </section>
    </section>

    <section anchor="Terminology" title="Terminology">
      <t>For the purposes of this specification, the following terms and
      definitions in addition to what is defined in 
	  <xref target="RFC6749">OAuth 2.0 Framework</xref>, 
	  <xref target="RFC7515">JSON Web Signature</xref>, and 
	  <xref target="RFC7519">JSON Web Encryption</xref> apply.</t>

      <section anchor="request_object" title="Request Object">
        <t><xref target="RFC7519">JWT</xref> that holds an OAuth 2.0 authorization
        request as JWT Claims Set</t>
      </section>

      <section anchor="request_uri" title="Request Object URI">
        <t>Absolute URI from which the <xref target="request_object">Request
        Object</xref> can be obtained</t>
      </section>
    </section>
	
	<section anchor="abbreviation" title="Symbols and abbreviated terms">
		<t>
			The following abbreviations are common to this specification.
		</t>
		<t><list style="hanging">
			<t hangText="JSON">Javascript Object Notation</t>
			<t hangText="JWT">JSON Web Token</t>
			<t hangText="JWS">JSON Web Signature</t>
			<t hangText="JWE">JSON Web Encryption</t>
			<t hangText="URI">Uniform Resource Identifier</t>
			<t hangText="URL">Uniform Resource Locator</t>
			<t hangText="WAP">Wireless Application Protocol</t>
		</list></t>
	</section>

    <section anchor="authorization_request_object" title="Request Object">
      <t>A <xref target="request_object">Request Object</xref> is used to
      provide authorization request parameters for an OAuth 2.0 authorization
      request. It contains <xref target="RFC6749">OAuth 2.0</xref>
      authorization request parameters including extension parameters. 
	  The parameters are represented as the JWT claims. 
	  Parameter names and string values MUST be included as JSON strings. 
	  Since it is a JWT, JSON strings MUST be represented in UTF-8. 
	  Numerical values MUST be included as JSON numbers. 
	  It MAY include any extension parameters. 
	  This <xref target="RFC7159">JSON</xref> constitutes the <xref
      target="RFC7519">JWT Claims Set</xref>.
	  The JWS Claims Set is then signed, encrypted, 
	  or signed and encrypted. </t>
	  <t>To sign, 
      <xref target="RFC7515">JSON Web Signature (JWS)</xref> is used. 
	  The result is a JWS signed <xref
      target="RFC7519">JWT</xref>. If signed, the
      Authorization Request Object SHOULD contain the Claims <spanx
      style="verb">iss</spanx> (issuer) and <spanx style="verb">aud</spanx> 
      (audience) as members, with their semantics being the same as defined in
      the <xref target="RFC7519">JWT</xref> specification.</t>

      <t>To encrypt, <xref
      target="RFC7516">JWE</xref> is used. 
	  Unless the algorithm used in JWE allows for the source to be authenticated, 
	  JWS signature should also be applied. 
	  In this case, it MUST be signed then encrypted,
	  with the result being a Nested JWT, as defined in
	  <xref target="RFC7519">JWT</xref>. 
	  </t>
	  
	  <t>The Authorization Request Object may be sent by value as 
	  described in <xref target="RequestParameter" /> 
	  or by reference as described in <xref target="RequestUriParameter" />.</t>

      <t>Required OAuth 2.0 Authorization Request parameters that are not
      included in the Request Object MUST be sent as query parameters. If a
      required parameter is missing from both the query parameters 
	  and the Request Object, the request is malformed.</t>
	  
	  <t>
	  <spanx style="verb">request</spanx> and
	  <spanx style="verb">request_uri</spanx> parameters
	  MUST NOT be included in Request Objects.
	  </t>

      <t>If the parameter exists in both the query string and the
      Authorization Request Object, 
      the values in the Request Object take precedence. 
      This means that if it intends to use a cached request object, 
      it cannot include parameters such as  
      <spanx style="verb">state</spanx> that are expected to differ 
      in every request. It is fine to include them in the request object 
      if it is going to be prepared afresh every time. 
      </t>
 	
	  <figure>
	    <preamble>
	      The following is a non-normative example of the Claims in
	      a Request Object before base64url encoding and signing. 
		  Note that it includes extension variables 
		  such as "nonce" and "max_age".
	    </preamble>

	    <artwork><![CDATA[
  {
   "iss": "s6BhdRkqt3",
   "aud": "https://server.example.com",
   "response_type": "code id_token",
   "client_id": "s6BhdRkqt3",
   "redirect_uri": "https://client.example.org/cb",
   "scope": "openid",
   "state": "af0ifjsldkj",
   "nonce": "n-0S6_WzA2Mj",
   "max_age": 86400
  }
]]></artwork>
	  </figure>	  
	  <figure>
	    <preamble>
	      Signing it with the <spanx style="verb">RS256</spanx> algorithm
	      results in this Request Object value
	      (with line wraps within values for display purposes only):
	    </preamble>

	    <artwork><![CDATA[
  eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KICJpc3MiOiAiczZCaGRSa3
  F0MyIsDQogImF1ZCI6ICJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsDQogInJl
  c3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsDQogImNsaWVudF9pZCI6ICJzNk
  JoZFJrcXQzIiwNCiAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vY2xpZW50LmV4YW1w
  bGUub3JnL2NiIiwNCiAic2NvcGUiOiAib3BlbmlkIiwNCiAic3RhdGUiOiAiYWYwaW
  Zqc2xka2oiLA0KICJub25jZSI6ICJuLTBTNl9XekEyTWoiLA0KICJtYXhfYWdlIjog
  ODY0MDAsDQogImNsYWltcyI6IA0KICB7DQogICAidXNlcmluZm8iOiANCiAgICB7DQ
  ogICAgICJnaXZlbl9uYW1lIjogeyJlc3NlbnRpYWwiOiB0cnVlfSwNCiAgICAgIm5p
  Y2tuYW1lIjogbnVsbCwNCiAgICAgImVtYWlsIjogeyJlc3NlbnRpYWwiOiB0cnVlfS
  wNCiAgICAgImVtYWlsX3ZlcmlmaWVkIjogeyJlc3NlbnRpYWwiOiB0cnVlfSwNCiAg
  ICAgInBpY3R1cmUiOiBudWxsDQogICAgfSwNCiAgICJpZF90b2tlbiI6IA0KICAgIH
  sNCiAgICAgImdlbmRlciI6IG51bGwsDQogICAgICJiaXJ0aGRhdGUiOiB7ImVzc2Vu
  dGlhbCI6IHRydWV9LA0KICAgICAiYWNyIjogeyJ2YWx1ZXMiOiBbInVybjptYWNlOm
  luY29tbW9uOmlhcDpzaWx2ZXIiXX0NCiAgICB9DQogIH0NCn0.nwwnNsk1-Zkbmnvs
  F6zTHm8CHERFMGQPhos-EJcaH4Hh-sMgk8ePrGhw_trPYs8KQxsn6R9Emo_wHwajyF
  KzuMXZFSZ3p6Mb8dkxtVyjoy2GIzvuJT_u7PkY2t8QU9hjBcHs68PkgjDVTrG1uRTx
  0GxFbuPbj96tVuj11pTnmFCUR6IEOXKYr7iGOCRB3btfJhM0_AKQUfqKnRlrRscc8K
  ol-cSLWoYE9l5QqholImzjT_cMnNIznW9E7CDyWXTsO70xnB4SkG6pXfLSjLLlxmPG
  iyon_-Te111V8uE83IlzCYIb_NMXvtTIVc1jpspnTSD7xMbpL-2QgwUsAlMGzw
]]></artwork>
	  </figure>
	  <figure>
	    <preamble>
	      The following RSA public key, represented in JWK format, can be used to
	      validate the Request Object signature in this
	      and subsequent Request Object examples
	      (with line wraps within values for display purposes only):
	    </preamble>

	    <artwork><![CDATA[
  {
   "kty":"RSA",
   "kid":"k2bdc",
   "n":"y9Lqv4fCp6Ei-u2-ZCKq83YvbFEk6JMs_pSj76eMkddWRuWX2aBKGHAtKlE5P
        7_vn__PCKZWePt3vGkB6ePgzAFu08NmKemwE5bQI0e6kIChtt_6KzT5OaaXDF
        I6qCLJmk51Cc4VYFaxgqevMncYrzaW_50mZ1yGSFIQzLYP8bijAHGVjdEFgZa
        ZEN9lsn_GdWLaJpHrB3ROlS50E45wxrlg9xMncVb8qDPuXZarvghLL0HzOuYR
        adBJVoWZowDNTpKpk2RklZ7QaBO7XDv3uR7s_sf2g-bAjSYxYUGsqkNA9b3xV
        W53am_UZZ3tZbFTIh557JICWKHlWj5uzeJXaw",
   "e":"AQAB"
  }
]]></artwork>
	  </figure>
    </section>
	
	
   
    <section title="Authorization Request" anchor="authreq">
      <t>The client constructs the authorization request URI 
	  by adding one of the following parameters but not both 
	  to the query component of the authorization
      endpoint URI using the <spanx style="verb">application/x-www-form-urlencoded</spanx>
      format:</t>

      <t><list style="hanging">
          <t hangText="request">The <xref target="request_object">Request Object</xref> that
          holds authorization request parameters stated in the section 4 of
          <xref target="RFC6749">OAuth 2.0</xref>. </t>

          <t hangText="request_uri">The absolute URL that points to the <xref
          target="request_object">Request Object</xref> that holds authorization request
          parameters stated in the section 4 of <xref target="RFC6749">OAuth
          2.0</xref>.</t>
        </list>The client directs the resource owner to the constructed URI
      using an HTTP redirection response, or by other means available to it
      via the user-agent.</t>

      <t>For example, the client directs the end-user's user-agent to make the
      following HTTPS request:</t>

      <figure>
        <artwork><![CDATA[GET /authz?request=eyJhbG..AlMGzw HTTP/1.1
Host: server.example.com]]></artwork>
		<postamble>
		The value for the request parameter is abbreviated 
		for brevity. 
		</postamble>
      </figure>

      <t>The authorization request object MUST be either </t>
	  <t><list style="format (%c)">
			<t>JWS signed; or </t>
			<t>JWE encrypted; or </t>
			<t>JWS signed and JWE encrypted.</t>
		</list></t>
	  
	  <t>When the Request Object is used, 
	  the OAuth 2.0 request parameter values contained in the JWS Signed 
	  and/or JWE Encrypted JWT supersede 
	  those passed using the OAuth 2.0 request syntax. 
	  Parameters MAY also be passed using the OAuth 2.0 request syntax 
	  even when a Request Object is used in the cases such as 
	  (a) to achieve backward compatibility with <xref target="RFC6749" /> or 
	  (b) to enable a cached, pre-signed (and possibly pre-encrypted) Request Object value 
	  to be used containing the fixed request parameters, 
	  while parameters that can vary with each request, 
	  such as <spanx style="verb">state</spanx> and 
	  <spanx style="verb">nonce</spanx> of 
	  OpenID Connect, are passed as OAuth 2.0 parameters. 
	  In such case, one needs to carefully assess the risk associated 
	  with it as unprotected parameters would create additional attack surfaces. 
	  See <xref target="para_incl" /> as well. 
	  </t>
	  
	  <section anchor="RequestParameter"
		 title='Passing a Request Object by Value'>
	  <t>The Client sends the Authorization Request as a 
	  Request Object to the Authorization Endpoint as the 
	  <spanx style="verb">request</spanx> parameter value.</t>

	  <t>
	    <figure>
	      <preamble>The following is a non-normative example of an
	      Authorization Request using the <spanx style='verb'>request</spanx>
	      parameter
	      (with line wraps within values for display purposes only):
	      </preamble>

	      <artwork><![CDATA[
  https://server.example.com/authorize?
    request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KICJpc3MiOiA
    iczZCaGRSa3F0MyIsDQogImF1ZCI6ICJodHRwczovL3NlcnZlci5leGFtcGxlLmN
    vbSIsDQogInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsDQogImNsaWV
    udF9pZCI6ICJzNkJoZFJrcXQzIiwNCiAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8
    vY2xpZW50LmV4YW1wbGUub3JnL2NiIiwNCiAic2NvcGUiOiAib3BlbmlkIiwNCiA
    ic3RhdGUiOiAiYWYwaWZqc2xka2oiLA0KICJub25jZSI6ICJuLTBTNl9XekEyTWo
    iLA0KICJtYXhfYWdlIjogODY0MDAsDQogImNsYWltcyI6IA0KICB7DQogICAidXN
    lcmluZm8iOiANCiAgICB7DQogICAgICJnaXZlbl9uYW1lIjogeyJlc3NlbnRpYWw
    iOiB0cnVlfSwNCiAgICAgIm5pY2tuYW1lIjogbnVsbCwNCiAgICAgImVtYWlsIjo
    geyJlc3NlbnRpYWwiOiB0cnVlfSwNCiAgICAgImVtYWlsX3ZlcmlmaWVkIjogeyJ
    lc3NlbnRpYWwiOiB0cnVlfSwNCiAgICAgInBpY3R1cmUiOiBudWxsDQogICAgfSw
    NCiAgICJpZF90b2tlbiI6IA0KICAgIHsNCiAgICAgImdlbmRlciI6IG51bGwsDQo
    gICAgICJiaXJ0aGRhdGUiOiB7ImVzc2VudGlhbCI6IHRydWV9LA0KICAgICAiYWN
    yIjogeyJ2YWx1ZXMiOiBbInVybjptYWNlOmluY29tbW9uOmlhcDpzaWx2ZXIiXX0
    NCiAgICB9DQogIH0NCn0.nwwnNsk1-ZkbmnvsF6zTHm8CHERFMGQPhos-EJcaH4H
    h-sMgk8ePrGhw_trPYs8KQxsn6R9Emo_wHwajyFKzuMXZFSZ3p6Mb8dkxtVyjoy2
    GIzvuJT_u7PkY2t8QU9hjBcHs68PkgjDVTrG1uRTx0GxFbuPbj96tVuj11pTnmFC
    UR6IEOXKYr7iGOCRB3btfJhM0_AKQUfqKnRlrRscc8Kol-cSLWoYE9l5QqholImz
    jT_cMnNIznW9E7CDyWXTsO70xnB4SkG6pXfLSjLLlxmPGiyon_-Te111V8uE83Il
    zCYIb_NMXvtTIVc1jpspnTSD7xMbpL-2QgwUsAlMGzw
]]></artwork>
	    </figure>
	  </t>
	  </section>

      <section anchor="RequestUriParameter" title="Passing a Request Object by Reference">
	<t>
	  The <spanx style="verb">request_uri</spanx> Authorization Request parameter enables
	  OAuth authorization requests to be passed by reference, rather than by value.
	  This parameter is used identically to the
	  <spanx style="verb">request</spanx> parameter, other than that
	  the Request Object value is retrieved from the resource at the specified URL,
	  rather than passed by value.
	</t>
	<t>
	  When the <spanx style="verb">request_uri</spanx> parameter is used,
	  the OAuth 2.0 authorization request parameter values contained in the referenced JWT
	  supersede those passed using the OAuth 2.0 request syntax.
	  Parameters MAY also be passed using the OAuth 2.0 request syntax 
	  even when a Request Object is used in the cases such as 
	  (a) to achieve backward compatibility with [RFC6749] or 
	  (b) to enable a cached, pre-signed (and possibly pre-encrypted) Request Object value 
	  to be used containing the fixed request parameters, 
	  while parameters that can vary with each request, 
	  such as <spanx style="verb">state</spanx> and 
	  <spanx style="verb">nonce</spanx> of 
	  OpenID Connect, are passed as OAuth 2.0 parameters. 
	  In such case, one needs to carefully assess the risk associated 
	  with it as unprotected parameters would create additional attack surfaces. 
	  See <xref target="para_incl" /> as well. 
	</t>
	<t>
	  Servers MAY cache the contents of the resources referenced by Request Object URIs.
	  If the contents of the referenced resource could ever change,
	  the URI SHOULD include the base64url encoded SHA-256 hash 
	  as defined in <xref target="RFC6234">RFC6234</xref>
	  of the referenced resource contents as the fragment component of the URI.
	  If the fragment value used for a URI changes, it signals the server
	  that any cached value for that URI with the old fragment value
	  is no longer valid.
	</t>
	<t>
	  The entire Request URI MUST NOT exceed 512 ASCII characters.
	  There are three reasons for this restriction. 
	</t>
	<t><list style="numbers">
          <t>Many WAP / feature phones do not accept large payloads. 
		  The restriction are typically either 512 or 1024 ASCII characters.</t>
		  <t>The maximum URL length supported by older versions of 
		  Internet Explorer is 2083 ASCII characters. </t>
		  <t>On a slow connection such as 2G mobile connection, 
		  a large URL would cause the slow response and using such 
		  is not advisable from the user experience point of view. 
		  </t>
		</list>
	</t>
	<t>
	  The contents of the resource referenced by the URL MUST be a Request Object.
	  The scheme used in the 
	  <spanx style="verb">request_uri</spanx> value MUST be <spanx style="verb">https</spanx>, 
	  unless the target Request Object is signed in a way that is verifiable by the 
	  Authorization Server.
	  The <spanx style="verb">request_uri</spanx> value MUST be reachable by the
	  Authorization Server, and SHOULD be reachable by the Client.
	</t>

	<t>
	  <figure>
	    <preamble>The following is a non-normative example of
	    the contents of a Request Object resource that can be
	    referenced by a <spanx style="verb">request_uri</spanx>
	    (with line wraps within values for display purposes only):</preamble>

	    <artwork><![CDATA[
  eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KICJpc3MiOiAiczZCaGRSa3
  F0MyIsDQogImF1ZCI6ICJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsDQogInJl
  c3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsDQogImNsaWVudF9pZCI6ICJzNk
  JoZFJrcXQzIiwNCiAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vY2xpZW50LmV4YW1w
  bGUub3JnL2NiIiwNCiAic2NvcGUiOiAib3BlbmlkIiwNCiAic3RhdGUiOiAiYWYwaW
  Zqc2xka2oiLA0KICJub25jZSI6ICJuLTBTNl9XekEyTWoiLA0KICJtYXhfYWdlIjog
  ODY0MDAsDQogImNsYWltcyI6IA0KICB7DQogICAidXNlcmluZm8iOiANCiAgICB7DQ
  ogICAgICJnaXZlbl9uYW1lIjogeyJlc3NlbnRpYWwiOiB0cnVlfSwNCiAgICAgIm5p
  Y2tuYW1lIjogbnVsbCwNCiAgICAgImVtYWlsIjogeyJlc3NlbnRpYWwiOiB0cnVlfS
  wNCiAgICAgImVtYWlsX3ZlcmlmaWVkIjogeyJlc3NlbnRpYWwiOiB0cnVlfSwNCiAg
  ICAgInBpY3R1cmUiOiBudWxsDQogICAgfSwNCiAgICJpZF90b2tlbiI6IA0KICAgIH
  sNCiAgICAgImdlbmRlciI6IG51bGwsDQogICAgICJiaXJ0aGRhdGUiOiB7ImVzc2Vu
  dGlhbCI6IHRydWV9LA0KICAgICAiYWNyIjogeyJ2YWx1ZXMiOiBbInVybjptYWNlOm
  luY29tbW9uOmlhcDpzaWx2ZXIiXX0NCiAgICB9DQogIH0NCn0.nwwnNsk1-Zkbmnvs
  F6zTHm8CHERFMGQPhos-EJcaH4Hh-sMgk8ePrGhw_trPYs8KQxsn6R9Emo_wHwajyF
  KzuMXZFSZ3p6Mb8dkxtVyjoy2GIzvuJT_u7PkY2t8QU9hjBcHs68PkgjDVTrG1uRTx
  0GxFbuPbj96tVuj11pTnmFCUR6IEOXKYr7iGOCRB3btfJhM0_AKQUfqKnRlrRscc8K
  ol-cSLWoYE9l5QqholImzjT_cMnNIznW9E7CDyWXTsO70xnB4SkG6pXfLSjLLlxmPG
  iyon_-Te111V8uE83IlzCYIb_NMXvtTIVc1jpspnTSD7xMbpL-2QgwUsAlMGzw
  ]]></artwork>
	  </figure>
	</t>

	<section anchor="CreateRequestUri"
		 title="URL Referencing the Request Object">
	  <t>
	    The Client stores the Request Object resource either
	    locally or remotely at a URL the Authorization Server can access. 
		The URL MUST be HTTPS URL. 
	    This URL is the Request Object URI, <spanx style="verb">request_uri</spanx>.
	  </t>
	  <t>
	    It is possible for the Request Object to include values that 
	    is to be revealed only to the Authorization Server.
	    As such, the <spanx style="verb">request_uri</spanx> MUST have
	    appropriate entropy for its lifetime.
	    It is RECOMMENDED that it be removed
	    if it is known that it will not be used again
	    or after a reasonable timeout
	    unless access control measures are taken.
	  </t>
	  <t>
	    Unless the access to the <spanx style="verb">request_uri</spanx>
		over TLS provides adequate authentication of the source of 
		the Request Object, the Request Object MUST be JWS Signed. 
	  </t>
	  <figure>
	    <preamble>The following is a non-normative example
	    of a Request Object URI value
	    (with line wraps within values for display purposes only):</preamble>

	    <artwork><![CDATA[
  https://client.example.org/request.jwt#
    GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM
]]></artwork>
	  </figure>

	</section>

	<section anchor="UseRequestUri"
		 title='Request using the "request_uri" Request Parameter'>
	  <t>The Client sends the Authorization Request to the
	  Authorization Endpoint.</t>

	  <figure>
	    <preamble>The following is a non-normative example
	    of an Authorization Request using the <spanx style="verb">request_uri</spanx> parameter
	    (with line wraps within values for display purposes only):</preamble>

	    <artwork><![CDATA[
  https://server.example.com/authorize?
    response_type=code%20id_token
    &client_id=s6BhdRkqt3
    &request_uri=https%3A%2F%2Fclient.example.org%2Frequest.jwt
    %23GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM
    &state=af0ifjsldkj
]]></artwork>
	  </figure>
	</section>

	<section anchor="GetRequestUri" title="Authorization Server Fetches Request Object">
	  <t>Upon receipt of the Request, the Authorization Server MUST
	  send an HTTP <spanx style="verb">GET</spanx> request to the <spanx style="verb">request_uri</spanx>
	  to retrieve the referenced Request Object, unless it is already cached, and parse it
	  to recreate the Authorization Request parameters.</t>

	  <t>Note that the client SHOULD use a unique URI for each
	  request containing distinct parameters values, or otherwise
	  prevent the Authorization Server from caching the <spanx style="verb">request_uri</spanx>.
	  </t>

	  <figure>
	    <preamble>The following is a non-normative example of this fetch
	    process:</preamble>

	    <artwork><![CDATA[
  GET /request.jwt HTTP/1.1
  Host: client.example.org
]]></artwork>
	  </figure>
	</section>
   </section>

    </section>

  <section anchor="JWTRequestValidation" title="Validating JWT-Based Requests">

	<section anchor="EncryptedRequestObject" title="Encrypted Request Object">

	  <t>
	    The Authorization Server MUST decrypt the JWT in accordance with
	    the <xref target="RFC7516">JSON Web Encryption</xref> specification. 
		If the result is a signed request object, 
		signature validation MUST be performed 
	    as defined in <xref target="SignedRequestObject"/> as well.
	  </t>

	  <t>
	    If decryption fails, 
		the Authorization Server MUST return  
		<spanx style="verb">invalid_request_object</spanx> error. 
	  </t>
	</section>

	<section anchor="SignedRequestObject" title="JWS Signed Request Object">

	  <t>
	    To perform JWS Signature Validation, 
	    the <spanx style="verb">alg</spanx> Header Parameter in 
		the JOSE Header MUST match the value
	    of the pre-registered algorithm.
	    The signature MUST be validated against the appropriate key
	    for that <spanx style="verb">client_id</spanx>
	    and algorithm.
	  </t>

	  <t>
	    If signature validation fails, 
		the Authorization Server MUST return 
		<spanx style="verb">invalid_request_object</spanx> error.
	  </t>
	</section>

	<section anchor="RequestParameterValidation" title="Request Parameter Assembly and Validation">

	  <t>
	    The Authorization Server MUST assemble
	    the set of Authorization Request parameters to be used
	    from the Request Object value
	    and the OAuth 2.0 Authorization Request parameters
	    (minus the <spanx style="verb">request</spanx> or
	    <spanx style="verb">request_uri</spanx> parameters).
	    If the same parameter exists both in 
	    the Request Object and the OAuth Authorization Request parameters,
	    the parameter in the Request Object is used.
	    Using the assembled set of Authorization Request parameters,
	    the Authorization Server then validates the request
	    as specified in <xref target="RFC6749">OAuth 2.0</xref>.
	  </t>

	</section>
	
  </section>

   
	
    <section title="Authorization Server Response">
      <t>Authorization Server Response is created and sent to the client as in
      Section 4 of <xref target="RFC6749">OAuth 2.0</xref> .</t>

      <t>In addition, this document uses these additional error values:
	    <list style="hanging">
          <t hangText="invalid_request_uri">
		  The <spanx style="verb">request_uri</spanx> in the 
		  Authorization Request returns an error or contains invalid data.</t>

          <t hangText="invalid_request_object">The request parameter contains
          an invalid Request Object.</t>
		  
		  <t hangText="request_not_supported">
		  The Authorization Server does not support 
		  the use of the <spanx style="verb">request</spanx> parameter.</t>
		  
		  <t hangText="request_uri_not_supported">
		  The Authorization Server does not support use of 
		  the <spanx style="verb">request_uri</spanx> parameter. </t>
        </list></t>
    </section>
	<section anchor="tlsreq" title="TLS Requirements">
		<t>
			Client implementations supporting the Request Object URI method 
			MUST support TLS as recommended in 
			<xref target="RFC7525">Recommendations for Secure Use 
			of Transport Layer Security (TLS) and 
			Datagram Transport Layer Security (DTLS)</xref>. 
		</t>
		<t>
			To protect against information disclosure and tampering,
			confidentiality protection MUST be applied using TLS with a 
			ciphersuite that provides confidentiality and integrity protection.
		</t>
		<t>
			Whenever TLS is used, the identity of 
			the service provider encoded in 
			the TLS server certificate MUST be 
			verified using the procedures 
			described in Section 6 of <xref target="RFC6125" />.
		</t>
	</section>
    <section anchor="IANA" title="IANA  Considerations">
      <t>This specification requests no actions by IANA. 
	  </t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>In addition to the all <xref target="RFC6819">
      the security considerations discussed in OAuth 2.0</xref>, the following security considerations
      should be taken into account.</t>
	  <section anchor="alg_choice" title="Choice of Algorithms">
		  <t>When sending the authorization request object through <spanx
		  style="verb">request</spanx> parameter, it MUST either be 
		  JWS signed with then considered appropriate algorithm 
		  or encrypted using <xref target="RFC7516"/>. </t>
	  </section>
	  <section anchor="para_incl" title="Choice of Parameters to include in the Request Object">
		<t>
			Unless there is a compelling reasons to do otherwise, 
			it is strongly recommended to create a request object that covers 
			all the parameters so that the entire request is integrity protected. 
		</t>
		<t>
			This means that the request object is going to be 
			prepared fresh each time an authorization request is made 
			and caching cannot be used. It has a performance disadvantage, 
			but where such disadvantage is permissible, it should be considered.
		</t>
		<t>
			Unless the server and the client have agreed prior to the 
			authorization request to use the non-protected parameters, 
			the authorization server SHOULD reject a request that is not 
			fully integrity protected and source authenticated. 
		</t>
	  </section>
	  <section anchor="src_authn" title="Request Source Authentication">
		<t>
			The source of the Authorization Request MUST always be 
			verified. There are several ways to do it in this specification. 
		</t>
		<t><list style="format (%c)">
			<t>Verifying the JWS Signature of the Request Object.</t>
			<t>Verifying the TLS Server Identity of the Request Object URI. 
			In this case, the Authorization Server MUST know 
			out of band that the Client uses Request Object URI and 
			only the Client is covered by the TLS certificate. 
			In general, it is not a reliable method. 
			</t>
			<t>Authorization Server is providing an endpoint 
			that provides a Request Object URI in exchange for 
			a Request Object. In this case, the Authorization 
			Server MUST perform Client Authentication to accept 
			the Request Object and bind the Client Identifier 
			to the Request Object URI it is providing. 
			Since Request Object URI can be replayed, the lifetime 
			of the Request Object URI MUST be short and preferably 
			one-time use. The entropy of the Request Object URI 
			MUST be sufficiently large. 
			</t>
			<t>A third party, such as a Trust Framework Provider, 
			provides an endpoint 
			that provides a Request Object URI in exchange for 
			a Request Object. The same requirements as (b) above 
			applies. In addition, the Authorization Server 
			MUST know out-of-band that the Client utilizes 
			the Trust Framework Operator. 
			</t>
		</list></t>
	  </section>
	  <section anchor="explicit_endpoints" title="Explicit Endpoints">
	    <t>
	      Although this specification does not require them, 
	      researchs such as <xref target="BASIN" /> points out that 
	      it is a good practice to explicitly state 
	      the intended interaction endpoints and the message 
	      position in the sequence in a tamper evident 
	      manner so that the intent of the initiator is unambiguous. 
	      The endpoints that comes into question in this specification 
	      are
	    </t> 
	    <t><list style="format (%c)">
	      <t>Protected Resources (<spanx style="verb">protected_resources</spanx>); </t>
	      <t>Authorization Endpoint (<spanx style="verb">authorization_endpoint</spanx>); </t>
	      <t>Redirection URI (<spanx style="verb">redirect_uri</spanx>); and </t>
	      <t>Token Endpoint (<spanx style="verb">token_endpoint</spanx>).</t>
	    </list></t>
	    <t>
	      While Redirection URI is included, others are not 
	      included in the Authorization Request Object. 
	      It is probably a good idea to include these 
	      in it to reduce the attack surface. 
	      An extension specification should be created. 
	    </t>
	  </section>
    </section>
	
	<section anchor="Privacy" title="Privacy Considerations">
		<t>
			When the Client is being granted access to a protected resource 
			containing personal data, both the Client 
			and the Authorization Server need to adhere to 
			Privacy Principles. 
			<xref target="ISO29100">ISO/IEC 29100</xref> is a 
			freely accessible International Standard and 
			its Privacy Principles are good to follow. 
		</t>
		<t>
			Most of the provision would apply to 
			<xref target="RFC6749">The OAuth 2.0 Authorization Framework</xref>
			and <xref target="RFC6750">
			The OAuth 2.0 Authorization Framework: 
			Bearer Token Usage</xref>	
			and not specific to this specification. 
			In what follows, only the specific provisions 
			to this specification are noted. 
		</t>

		<section anchor="collection_limitation" title="Collection limitation">
			<t>
				When the Client is being granted access to a protected resource 
			    containing personal data, 
				the Client SHOULD limit the collection of 
				personal data to that which is within 
				the bounds of applicable law and strictly necessary 
				for the specified purpose(s).
			</t>
			<t>
				It is often hard for the user to find out if 
				the personal data asked for is strictly necessary. 
				A Trust Framework Provider can help the user 
				by examining the Client request and comparing 
				to the proposed processing by the Client and 
				certifying the request. After the certification, 
				the Client, when making an Authorization Request,  
				can submit Authorization Request to the 
				Trust Framework Provider to obtain the Request Object URI. 
			</t>
			<t>
				Upon receiving such Request Object URI in the Authorization 
				Request, the Authorization Server first verifies 
				that the authority portion of the Request Object URI 
				is a legitimate one for the Trust Framework Provider. 
				Then, the Auhtorization Server issues 
				HTTP GET request to the Request Object URI. 
				Upon connecting, the Authorization Server MUST 
				verify the server identity represented in the 
				TLS certificate is legitimate for the Request Object URI. 
				Then, 
				the Authorization Server can obtain the Request Object, 
				which includes the <spanx style="verb">client_id</spanx> 
				representing the Client. 
			</t>
			<t>
				The Consent screen 
				MUST indicate the Client and SHOULD indicate 
				that the request has been vetted by the Trust Framework 
				Operator for the adherence to the Collection Limitation 
				principle. 
			</t>
		</section>
		<section anchor="disclosure_limitation" title="Disclosure Limitation">
			<section anchor="request_disclosure" title="Request Disclosure">
				<t>
					This specification allows extension parameters. 
					These may include potentially sensitive information. 
					Since URI query parameter may leak through various 
					means but most notably through referrer and browser history, 
					if the authorization request contains potentially sensitive 
					parameter, the Client SHOULD 
					<xref target="RFC7516">JWE</xref> encrypt the request object.
				</t>
				<t>
					Where Request Object URI method is being used, 
					if the request object contains personally identifiable 
					or sensitive information, the <spanx style="verb">request_uri</spanx> SHOULD be 
					of one-time use and MUST have large enough entropy 
					deemed necessary with applicable security policy 
					unless the Request Object itself is 
					<xref target="RFC7516">JWE</xref> Encrypted. 
				</t>
			</section>
			<section anchor="tracking" title="Tracking using Request Object URI">
				<t>
					Even if the protected resource does not include a 
					personally identifiable information, 
					it is sometimes possible to identify the user 
					through the Request Object URI if persistent per-user 
					Request Object URI is used. A third party may observe 
					it through browser history etc. and start correlating 
					the user's activity using it. 
					It is in a way a data disclosure as well and 
					should be avoided. 
				</t>
				<t>
					Therefore, per-user Request Object URI should be avoided. 
				</t>
			</section>
		</section>
	</section>

    <section anchor="Acknowledgements" title="Acknowledgements">
	  <t>The following people contributed to the creation of this document 
	  in the OAuth WG. (Affiliations at the time of the contribution is used.) </t>
	  
	  <t>Sergey Beryozkin, 
	  Brian Campbell (Ping Identity), 
	  Vladimir Dzhuvinov (Connect2id),
	  Michael B. Jones (Microsoft),
	  Torsten Lodderstedt (Deutche Telecom)
	  Jim Manico, 
	  Axel Nenker(Deutche Telecom), 
	  Hannes Tschofenig (ARM). 
	  </t>
	  
      <t>The following people contributed to creating this document through <xref
      target="OpenID.Core">the OpenID Connect Core 1.0</xref>.</t>

      <t>
	  Brian Campbell (Ping Identity),
	  George Fletcher (AOL),
	  Ryo Itou (Mixi), 
      Edmund Jay (Illumila), 
	  Michael B. Jones (Microsoft), 	  
	  Breno de Medeiros (Google), 
	  Hideki Nara (TACT), 
	  Justin Richer (MITRE).
	  </t>

      <t>In addition, the following people contributed to this and previous
      versions through the OAuth Working Group.</t>

      <t>
	  Dirk Balfanz (Google), 
	  James H. Manger (Telstra),
	  John Panzer (Google), 
	  David Recordon (Facebook), 
	  Marius Scurtescu (Google), 
	  Luke Shepard (Facebook).</t>
    </section>
	<section title="Revision History" anchor="hist">
	    <t>-09</t>
		<t>
		    <list style="symbols">
				<t>Minor Editorial Nits. </t>
				<t>Section 10.4 added.</t>
				<t>Explicit reference to Security consideration (10.2) added in 
				   section 5 and section 5.2.</t>
				<t>, (add yourself) removed from the acknowledgement. </t>
			</list>
		</t>
	    <t>-08</t>
		<t>
		    <list style="symbols">
				<t>Applied changes proposed by Hannes on 2016-06-29 on IETF OAuth
				list recorded as https://bitbucket.org/Nat/oauth-jwsreq/issues/12/. </t>
				<t>TLS requirements added.</t>
				<t>Security Consideration reinforced.</t>
				<t>Privacy Consideration added.</t>
				<t>Introduction improved. </t>
			</list>
		</t>
		<t>-07</t>
		<t>
			<list style="symbols">
				<t>Changed the abbrev to OAuth JAR from oauth-jar. </t>
				<t>Clarified sig and enc methods. </t>
				<t>Better English.</t>
				<t>Removed claims from one of the example. </t>
				<t>Re-worded the URI construction.</t>
				<t>Changed the example to use request instead of request_uri.</t>
				<t>Clarified that Request Object parameters takes precedence 
				regardless of request or request_uri parameters were used. </t>
				<t>Generalized the language in 4.2.1 to convey the intent 
				more clearly.</t>
				<t>Changed "Server" to "Authorization Server" as a clarification.</t>
				<t>Stopped talking about request_object_signing_alg.</t>
				<t>IANA considerations now reflect the current status.</t>
				<t>Added Brian Campbell to the contributors list. 
				Made the lists alphabetic order based on the last names. 
				Clarified that the affiliation is at the time of the contribution.</t>
				<t>Added "older versions of " to the reference to IE uri length 
				limitations.</t>
				<t>Stopped talking about signed or unsigned JWS etc.</t>
				<t>1.Introduction improved.</t>
			</list>
		</t>
		<t>-06</t>
		<t>
			<list style="symbols">
				<t>Added explanation on the 512 chars URL restriction. </t>
				<t>Updated Acknowledgements. </t>
			</list>
		</t>
		<t>-05</t>
		<t>
			<list style="symbols">
				<t>More alignment with OpenID Connect. </t>
			</list>
		</t>
		<t>-04</t>
		<t>
			<list style="symbols">
				<t>Fixed typos in examples. (request_url -> request_uri, cliend_id -> client_id) </t>
				<t>Aligned the error messages with the OAuth IANA registry.</t>
				<t>Added another rationale for having request object.</t>
			</list>
		</t>
		<t>-03</t>
		<t>
			<list style="symbols">
				<t>Fixed the non-normative description about the advantage of static signature. </t>
				<t>Changed the requirement for the parameter values in the request itself and the request object from 'MUST MATCH" to 'Req Obj takes precedence.</t>
			</list>
		</t>
		<t>-02</t>
		<t>
			<list style="symbols">
				<t>Now that they are RFCs, replaced JWS, JWE, etc. with RFC numbers. </t>
			</list>
		</t>

		<t>-01</t>
		<t>
			<list style="symbols">
				<t>Copy Edits.</t>
			</list>
		</t>
	</section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.6125"?>
	  <?rfc include='reference.RFC.6234'?>
      <?rfc include='reference.RFC.6749'?>
      <?rfc include='reference.RFC.6750'?>
      <?rfc include='reference.RFC.6819'?>
      <?rfc include='reference.RFC.7159'?>
      <?rfc include='reference.RFC.7515'?>
      <?rfc include='reference.RFC.7516'?>
      <?rfc include='reference.RFC.7519'?>
	  <?rfc include='reference.RFC.7525'?>
    </references>


    <references title="Informative References">

      <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="25" month="February" year="2014"/>
        </front>
		<seriesInfo name="OpenID Foundation" 
            value="Standards" />
      </reference>
      <reference anchor="ISO29100" target="http://standards.iso.org/ittf/PubliclyAvailableStandards/c045123_ISO_IEC_29100_2011.zip">
        <front>
          <title>ISO/IEC 29100 Information technology - Security techniques - Privacy framework</title>
		  <author fullname="ISO/IEC">
          </author>

          <date day="15" month="December" year="2011"/>
        </front>
      </reference>
      <reference anchor="BASIN" target="https://www.cs.ox.ac.uk/people/cas.cremers/downloads/papers/BCM2012-iso9798.pdf">
        <front>
          <title>Provably Repairing the ISO/IEC 9798 Standard for Entity Authentication</title>
          <author fullname="David Basin" initials="D." surname="Basin"></author>
          <author fullname="Cas Cremers" initials="C." surname="Cremers"></author>
          <author fullname="Simon Meier" initials="S." surname="Meier"></author>
          <date month="November" year="2013" />
        </front>
        <seriesInfo name="Journal of Computer Security - Security and Trust Principles" 
            value="Volume 21 Issue 6, Pages 817-846" />
       </reference>
    </references>
  </back>
</rfc>
