<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN"
"http://xml.resource.org/authoring/rfc2629.dtd">
<rfc category="exp" docName="openid-connect-session-1_0" ipr="trust200902">

  <?rfc toc="yes" ?>
  <?rfc tocdepth="5" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc strict="no" ?>
  <?rfc iprnotified="no" ?>
  <?rfc private="Draft" ?>

  <front>
    <title abbrev="OpenID Connect Session Management 1.0">OpenID Connect
    Session Management 1.0 - draft 15</title>

    <author fullname="Breno de Medeiros" initials="B." surname="de Medeiros">
      <organization>Google</organization>
      <address>
        <email>breno@google.com</email>
      </address>
    </author>

    <author fullname="Naveen Agarwal" initials="N." surname="Agarwal">
      <organization>Google</organization>
      <address>
        <email>naa@google.com</email>
      </address>
    </author>

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

    <author fullname="John Bradley" initials="J." surname="Bradley">
      <organization abbrev="Ping Identity">Ping Identity</organization>
      <address>
        <email>ve7jtb@ve7jtb.com</email>
      </address>
    </author>

    <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
      <organization abbrev="Microsoft">Microsoft</organization>
      <address>
        <email>mbj@microsoft.com</email>
      </address>
    </author>

    <date day="7" month="June" year="2013" />

    <workgroup>OpenID Connect Working Group</workgroup>

    <abstract>
      <t>OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0
      protocol. It allows Clients to verify the identity of the End-User based
      on the authentication performed by an Authorization Server, as well as to
      obtain basic profile information about the End-User in an interoperable and
      REST-like manner.</t>

      <t>
	This document describes how to manage sessions for OpenID Connect,
	including when to log out the End-User.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>
	This specification complements the OpenID Connect Messages 1.0
	and OpenID Connect Standard 1.0 specifications
	by defining how to monitor the End-User's
	login status at the OpenID Provider on an ongoing basis so
	that the Relying Party can log out the End-User once he has
	logged out of the OpenID Provider.
      </t>

      <section anchor="rnc" title="Requirements Notation and Conventions">
        <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>

        <t>Throughout this document, values are quoted to indicate that they
        are to be taken literally. When using these values in protocol
        messages, the quotes MUST NOT be used as part of the value.</t>
      </section>

      <section anchor="terminology" title="Terminology">
        <t>This specification uses the terms "Access Token", "Refresh Token",
        "Authorization Code", "Authorization Grant", "Authorization Server",
        "Authorization Endpoint", "Client", "Client Identifier", "Client Secret",
	"Protected Resource", "Resource Owner", "Resource Server",
        and "Token Endpoint" defined by <xref target="RFC6749">OAuth
        2.0</xref>, and the terms defined by <xref
        target="OpenID.Messages">OpenID Connect Messages 1.0</xref>.</t>
	<t>
	  This specification also defines the following term:
	  <list style="hanging">

	    <t hangText="Session">
	      Continuous period of time during which an End-User
	      accesses a Relying Party relying on the Authentication
	      of the End-User performed by the OpenID Provider.
	    </t>

	  </list>
	</t>
      </section>
    </section>

    <section anchor="EndpointDiscovery" title="Endpoint Discovery">
      <t>To support OpenID Connect session management, the RP needs to obtain
      the session management related endpoint URLs.
      These URLs are normally obtained via the OP's Discovery response,
      as described in <xref target="OpenID.Discovery">OpenID Connect Discovery 1.0</xref>,
      or MAY be learned via other mechanisms.
      </t>

      <t>The OP endpoints defined in this specification are as follows:</t>

      <t><list style="hanging">
          <t hangText="check_session_iframe">
	    URL of an OP iframe that supports cross-origin communications
	    for session state information with the RP Client,
	    using the HTML 5 postMessage API.
	    The page is loaded from an invisible iframe embedded in
	    an RP page so that it can run in the OP's security context. 
	    It accepts postMessage requests from the relevant RP iframe and
	    uses postMessage to post back the login status of the End-User at the OP.
	  </t>

          <t hangText="end_session_endpoint">
	    URL at the OP to which an RP can perform a redirect to request that the
	    End-User be logged out at the OP.
	  </t>
        </list></t>
    </section>

    <section anchor="CreatingUpdatingSessions" title="Creating and Updating Sessions">
      <t>
	In OpenID Connect, the session at the RP typically starts when the RP
	validates the End-User's ID Token.
	Refer to the OpenID Connect Messages 1.0 <xref target="OpenID.Messages"/>
	and OpenID Connect Standard 1.0 <xref target="OpenID.Standard"/>
	specifications to find
	out how to obtain an ID Token and validate it. 
	When the OP supports session management, it MUST also return the Session State
	as an additional <spanx style="verb">session_state</spanx> parameter
	in the Authorization Response.
	An OpenID Connect Authorization Response is specified in Section 2.1.2 of
	OpenID Connect Messages 1.0.
      </t>

      <t>This parameter is:</t>

      <t><list style="hanging">
          <t hangText="session_state">Session State.
	  JSON string that represents the End-User's login state
          at the OP.  This string is opaque to the RP.
	  This is REQUIRED if session management is supported.
	  </t>
        </list></t>
    </section>

    <section anchor="ChangeNotification" title="Session Status Change Notification">
      <t>ID Token typically comes with the expiry date. The RP MAY rely on it
      to expire the RP session. However, it is entirely possible that the End-User
      might have logged out of the OP before the expiry date. Therefore, it is
      highly desirable to be able to find out the login status of the End-User at
      the OP.</t>

      <t>To do so, it is possible to repeat the authentication request with
      prompt=none. However, this causes network traffic and this is
      problematic on the mobile devices that are increasingly becoming
      popular. Therefore, once the session is established with the
      authentication request and response, it is desirable to be able to check
      the login status at the OP without causing network traffic by polling
      the hidden OP iframe from a RP iframe with origin restricted postMessage
      as follows.</t>

      <t></t>

      <section anchor="OPiframe" title="OP iframe">
        <t>The RP typically loads an invisible OP iframe in the page from the OP's
        <spanx style='verb'>check_session_iframe</spanx>.</t>

        <t>The RP MUST assign an <spanx style='verb'>id</spanx> attribute to the iframe so that it can
        address it later.</t>

	<t>
	  The OP iframe MUST enforce that the caller has the same
	  origin as its parent frame. It MUST reject postMessage
	  requests from any other source origin.
	</t>
        <t>
	  The postMessage from the RP iframe delivers the
	  concatenation of the following, as the data:

	  <list style="symbols">
            <t>Client ID + " " + Session State</t>
          </list>
	</t>
	<t>
	  The OP iframe has access to Browser state at the OP (in a
	  cookie or in HTML5 storage) that it uses to calculate and
	  compare with the OP session state that was passed by the RP.
	</t>
	<t>
	  The OP iframe MUST recalculate it from the previously
	  obtained Client ID, the source origin URL (from the
	  postMessage), and the current OP Browser state.
	  If the received value and the
	  calculated value do not match, then the OP iframe MUST postMessage
	  the string <spanx style='verb'>changed</spanx> back to the source.
	  If it matched, then it MUST postMessage the string
	  <spanx style='verb'>unchanged</spanx>.
	</t>
        <t>
	  Following is non-normative example pseudo-code for the OP iframe:
	</t>

        <t>
	  <figure>
            <artwork><![CDATA[
  window.addEventListener("message", receiveMessage, false);

  function receiveMessage(e){ // e has client_id and session_state
    // Validate message origin
    var salt;
    client_id = message.split(' ')[0];
    session_state = message.split(' ')[1];
    salt = session_state.split('.')[1];
    var opbs = get_op_browser_state();
    var ss = CryptoJS.SHA256(client_id + ' ' + e.origin + ' ' +
      opbs + [' ' + salt]) [+ "." + salt];
    if (e.session_state == ss) {
      stat = 'unchanged';
    } else {
      stat = 'changed';
    }

    e.source.postMessage(stat, e.origin);
  };
]]></artwork>
          </figure>
	</t>
	<t>
	  The OP browser state is typically going to be stored in a
	  cookie or HTML5 local storage.  It is origin bound to the
	  Authorization Server.  It captures meaningful events such as
	  logins, logouts, change of user,
	  change of authorization status for Clients being used by the End-User,
	  etc.  Thus, the OP SHOULD
	  update the value of the browser state in response to such
	  meaningful events. As a result, the next call to
	  check_session() after such an event will return the
	  value <spanx style='verb'>changed</spanx>.
	  It is RECOMMENDED that the OP not update
	  the browser state too frequently in the absence of
	  meaningful events so as to spare excessive network traffic
	  at the Client in response to spurious <spanx style='verb'>changed</spanx> events.
	</t>
	<t>
	  The computation of the session state returned in response to
	  unsuccessful Authorization Requests SHOULD, in addition to
	  the browser state, incorporate sufficient randomness in the
	  form of a salt so as to prevent identification of an End-User
	  across successive calls to the OP's Authorization Endpoint.
	</t>
	<t>
	  In the case of an authorized Client (successful
	  Authorization Response), the OP SHOULD change the value of
	  the session state returned to the Client under one of the
	  following events:

	  <list style="symbols">
	    <t>
	      The set of users authenticated to the browser changes
	      (login, logout, session add).
	    </t>
	    <t>
	      The authorization status of Clients being used by the End-User changes.
	    </t>
	  </list>
	</t>
	<t>
	  In addition, the browser state used to verify the session state
	  SHOULD change with such events.
	  Calls to check_session() will return <spanx style='verb'>changed</spanx>
	  against earlier versions of session state after such events.
	  It is RECOMMENDED that the browser state SHOULD NOT vary too
	  frequently in the absence of such events to minimize network
	  traffic caused by the Client's response to <spanx style='verb'>changed</spanx>
	  notifications.
	</t>
	<t>
	  In the case of an unsuccessful Authorization Request, the
	  value of the session state returned SHOULD vary with each
	  request. However, the browser session state need not change
	  unless a meaningful event happens. In particular, many
	  values of session state can be simultaneously valid, for
	  instance by the introduction of random salt in the session
	  states issued in response to unsuccessful Authorization Requests.
	</t>
	<t>
	  In some implementations, <spanx style='verb'>changed</spanx>
	  notifications will occur only when changes to the End-User's
	  session occur, whereas in other implementations, they might
	  also occur as a result of changes to other sessions between
	  the User-Agent and the OP.
	  RPs need to be prepared for either eventuality,
	  silently handling any false positives that might occur.
	</t>
      </section>

      <section anchor="RPiframe" title="RP iframe">
        <t>The RP also loads an invisible iframe from itself in the same page.
        This iframe MUST know the ID of the OP iframe so that it can
        postMessage to the OP iframe.</t>

        <t>RP iframe polls OP iframe with postMessage with certain interval
        suitable for the RP application. With each postMessage, it sends the
        session state defined in Section 4.1. It also has to be able to
        receive the postMessage back from the OP iframe. The received data
        would either be <spanx style='verb'>changed</spanx> or <spanx style='verb'>unchanged</spanx>. Upon receipt of
        <spanx style='verb'>changed</spanx>, the RP MUST perform the re-authentication with 
        <spanx style='verb'>prompt=none</spanx> to find the current 
        session state at the OP. </t>

        <t>
	  Following is non-normative example pseudo-code for the RP iframe:
	</t>

        <t>
	  <figure>
            <artwork><![CDATA[
  var stat = "unchanged";
  var mes = client_id + " " + session_state;

  function check_session()
  {
    var targetOrigin  = "http://server.example.com";
    var win = window.parent.document.getElementById("op").
                contentWindow;
    win.postMessage( mes, targetOrigin);
  }

  function setTimer()
  {
    check_session();
    timerID = setInterval("check_session()",3*1000);
  }

  window.addEventListener("message", receiveMessage, false); 

  function receiveMessage(e)
  {
    var targetOrigin  = "http://server.example.com";
    if (e.origin !== targetOrigin ) {return;}
    stat = e.data;

    if stat == "changed" then take the actions below...
  }
]]></artwork>
          </figure>
	</t>
	<t>
	  When the RP detects a session state change, it SHOULD first
	  try an immediate mode request within an iframe to obtain a
	  new ID Token and session state, sending the old ID Token as
	  the <spanx style="verb">id_token_hint</spanx>. 
	  If the RP receives an ID token for the same End-User, it SHOULD
	  simply update the value of the session state.  If it doesn't
	  receive an ID token or receives an ID token for another
	  End-User, then it needs to handle this case as a logout for the
	  original End-User.
	</t>
	<t>
	  Note that the session state is origin bound.
	  Session state SHOULD be returned upon an authorization failure.
	</t>
      </section>
    </section>

    <section anchor="RPLogout" title="RP-Initiated Logout">
      <t>An RP can notify the OP that the End-User has logged
      out of the site, and might want to log out of the OP as well. In this
      case, the RP, after having logged the End-User out of the RP,
      redirects the End-User's User-Agent to the OP's logout endpoint URL.
      This URL is normally obtained via the
      <spanx style="verb">end_session_endpoint</spanx> element of the OP's
      Discovery response, or MAY be learned via other mechanisms.
      </t>
      <t>
	This specification also defines the following parameters
	that are passed as query parameters in the logout request:
      </t>
      <t>
	<list style="hanging">

	  <t hangText="id_token_hint">
	    RECOMMENDED.
	    Previously issued ID Token passed to the logout endpoint
	    as a hint about the End-User's current authenticated
	    session with the Client.
	    This is used as an indication of the identity of the
	    End-User that the RP is requesting be logged out by the OP.
	    The OP need not be listed as an
	    audience of the ID Token when it is used as an
	    <spanx style="verb">id_token_hint</spanx> value.
	  </t>
	  <t hangText="post_logout_redirect_uri">
	    OPTIONAL.
	    URL to which the RP is requesting that
	    the End-User's User-Agent be redirected
	    after a logout has been performed.
	    The value MUST have been previously registered with the OP,
	    either using the <spanx style="verb">post_logout_redirect_uris</spanx>
	    Registration parameter or via another mechanism.
	    If supplied, the OP SHOULD honor this request following the logout.
	  </t>

	</list>
      </t>

      <t>
	At the logout endpoint, the OP SHOULD ask the End-User whether
	he wants to log out of the OP as well.
	If the End-User says "yes", then the OP MUST log out the End-User.
      </t>

      <section anchor="RedirectionAfterLogout" title="Redirection to RP After Logout">
	<t>
	  In some cases, the RP will request that the End-User's User-Agent
	  to be redirected back to the RP
	  after a logout has been performed.
	  This specification defines this dynamic registration parameter
	  for this purpose, per Section 2.1 of
	  <xref target="OpenID.Registration">OpenID Connect Dynamic Client Registration 1.0</xref>.
	</t>
	<t>
	  <list style="hanging">
            <t hangText="post_logout_redirect_uris">
	    OPTIONAL.
	    Array of URLs supplied by the RP to which it MAY request that
	    the End-User's User-Agent be redirected using the
	    <spanx style="verb">post_logout_redirect_uri</spanx> parameter
	    after a logout has been performed.
	    </t>
	  </list>
	</t>
      </section>

    </section>

    <section anchor="Validation" title="Validation">

      <t>
	If any of the validation procedures defined in this specification fail, any operations requiring
	the information that failed to correctly validate MUST be aborted and
	the information that failed to validate MUST NOT be used.
      </t>

    </section>

    <section anchor="ImplementationConsiderations" title="Implementation Considerations">
      <t>
	This specification defines features used by both Relying Parties and
	OpenID Providers that choose to implement Session Management.
	All of these Relying Parties and OpenID Providers
	MUST implement the features that are listed
	in this specification as being "REQUIRED" or are described with a "MUST".
	No other implementation considerations for implementations of
	Session Management are defined by this specification.
      </t>
    </section>

    <section anchor="Security" title="Security Considerations">
	<t>
	  The OP iframe MUST enforce that the caller has the same
	  origin as its parent frame. It MUST reject postMessage
	  requests from any other source origin,
	  to prevent cross-site scripting attacks.
	</t>
    </section>

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

      <section anchor="oauth_params" title="OAuth Parameters Registry">

	<t>
	  This specification registers the following parameters
	  in the IANA
	  OAuth Parameters registry
	  defined in <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">session_state</spanx></t>

              <t>Parameter usage location: Authorization Response,
	      Access Token Response</t>

              <t>Change controller: OpenID Foundation Artifact Binding Working Group - openid-specs-ab@lists.openid.net</t>

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

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

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

      </section>
    </section>

  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6749"?>

      <reference anchor="OpenID.Messages">
        <front>
          <title>OpenID Connect Messages 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>

          <author fullname="Edmund Jay" initials="E." surname="Jay">
            <organization abbrev="Illumila">Illumila</organization>
          </author>

          <date day="7" month="June" year="2013"/>
        </front>

	<format target="http://openid.net/specs/openid-connect-messages-1_0-20.html"
                type="HTML" />
      </reference>

      <reference anchor="OpenID.Standard">
        <front>
          <title>OpenID Connect Standard 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>

          <author fullname="Edmund Jay" initials="E." surname="Jay">
            <organization abbrev="Illumila">Illumila</organization>
          </author>

          <date day="7" month="June" year="2013"/>
        </front>

	<format target="http://openid.net/specs/openid-connect-standard-1_0-21.html"
                type="HTML" />
      </reference>

      <reference anchor="OpenID.Discovery">
        <front>
          <title>OpenID Connect Discovery 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="Edmund Jay" initials="E." surname="Jay">
            <organization abbrev="Illumila">Illumila</organization>
          </author>

          <date day="7" month="June" year="2013"/>
        </front>

	<format target="http://openid.net/specs/openid-connect-discovery-1_0-17.html"
                type="HTML" />
      </reference>

      <reference anchor="OpenID.Registration">
        <front>
          <title>OpenID Connect Dynamic Client Registration 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>

          <date day="7" month="June" year="2013"/>
        </front>

	<format target="http://openid.net/specs/openid-connect-registration-1_0-19.html"
                type="HTML" />
      </reference>

    </references>

    <!-- <references title="Informative References"> -->

    <!-- </references> -->

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>
	Naveen Agarwal,
	Amanda Anganes,
	John Bradley,
	Breno de Medeiros,
	George Fletcher,
	Edmund Jay,
	Michael B. Jones,
	Torsten Lodderstedt,
	Tony Nadalin,
	Axel Nennker,
	Justin Richer,
	and Nat Sakimura
	contributed to the design of this specification.
      </t>
    </section>

    <section anchor="Notices" title="Notices">
      <t>Copyright (c) 2013 The OpenID Foundation.</t>

      <t>The OpenID Foundation (OIDF) grants to any Contributor, developer,
      implementer, or other interested party a non-exclusive, royalty free,
      worldwide copyright license to reproduce, prepare derivative works from,
      distribute, perform and display, this Implementers Draft or Final
      Specification solely for the purposes of (i) developing specifications,
      and (ii) implementing Implementers Drafts and Final Specifications based
      on such documents, provided that attribution be made to the OIDF as the
      source of the material, but that such attribution does not indicate an
      endorsement by the OIDF.</t>

      <t>The technology described in this specification was made available
      from contributions from various sources, including members of the OpenID
      Foundation and others. Although the OpenID Foundation has taken steps to
      help ensure that the technology is available for distribution, it takes
      no position regarding the validity or scope of any intellectual property
      or other rights that might be claimed to pertain to the implementation
      or use of the technology described in this specification or the extent
      to which any license under such rights might or might not be available;
      neither does it represent that it has made any independent effort to
      identify any such rights. The OpenID Foundation and the contributors to
      this specification make no (and hereby expressly disclaim any)
      warranties (express, implied, or otherwise), including implied
      warranties of merchantability, non-infringement, fitness for a
      particular purpose, or title, related to this specification, and the
      entire risk as to implementing this specification is assumed by the
      implementer. The OpenID Intellectual Property Rights policy requires
      contributors to offer a patent promise not to assert certain patent
      claims against other contributors and against implementers. The OpenID
      Foundation invites any interested party to bring to its attention any
      copyrights, patents, patent applications, or other proprietary rights
      that may cover technology that may be required to practice this
      specification.</t>
    </section>

    <section anchor="History" title="Document History">
      <t>[[ To be removed from the final specification ]]</t>

      <t>
	-15
        <list style="symbols">
	  <t>
	    Fixed #842 - Made <spanx style="verb">post_logout_redirect_uri</spanx>
	    treatment parallel to <spanx style="verb">redirect_uri</spanx>.
	  </t>
	</list>
      </t>

      <t>-14
        <list style="symbols">
	  <t>
	    Clarified RP-initiated logout description.
	  </t>
	  <t>
	    Added an <spanx style="verb">id_token_hint</spanx> parameter to logout requests.
	  </t>
	  <t>
	    Stated that RPs should gracefully any false positive
	    <spanx style='verb'>changed</spanx> notifications that may occur.
	  </t>
        </list>
      </t>

      <t>-13
        <list style="symbols">
	  <t>
	    Added OpenID Connect Working Group declaration to the document metadata.
	  </t>
        </list></t>

      <t>-12
        <list style="symbols">
	  <t>
	    Fixed #364 - Term "Session" not defined.
	  </t>
	  <t>
	    State that when any validations fail, any operations requiring
	    the information that failed to correctly validate MUST be aborted and
	    the information that failed to validate MUST NOT be used.
	  </t>
	  <t>
	    Fixed #779 - Parameters missing from IANA Considerations.
	  </t>
	  <t>
	    Fixed #782 - Changed uses of "_url" in identifiers to "_uri".
	  </t>
        </list></t>

      <t>-11
        <list style="symbols">
	  <t>
	    Applied changes from October 24, 2012 editing session at the
	    Internet Identity Workshop (IIW).
	    This separates the session state from the ID Token,
	    adding the new <spanx style="verb">session_state</spanx> parameter
	    to the authorization response.
	    These identifiers also changed:
	    <spanx style="verb">check_session_endpoint</spanx> to
	    <spanx style="verb">check_session_iframe_url</spanx> and
	    <spanx style="verb">end_session_endpoint</spanx> to
	    <spanx style="verb">end_session_endpoint_url</spanx>.
	  </t>
	  <t>
	    Fixed #605 - op_logout_url description.
	  </t>
	  <t>
	    Added Implementation Considerations section.
	  </t>
	  <t>
	    Fixed #698 - Inconsistent use of articles.
	  </t>
	  <t>
	    Naming consistency changes.  Renamed
	    <spanx style="verb">check_session_iframe_url</spanx> to
	    <spanx style="verb">check_session_iframe</spanx> and
	    <spanx style="verb">end_session_endpoint_url</spanx> back to
	    <spanx style="verb">end_session_endpoint</spanx>.
	  </t>
        </list></t>

      <t>-10
        <list style="symbols">
	  <t>
	    Fixed #689 - Track JWT change that allows JWTs to have multiple audiences.
	  </t>
        </list></t>

      <t>-09
        <list style="symbols">
	  <t>
	    Changed <spanx style='verb'>user_hint</spanx> to
	    <spanx style='verb'>id_token_hint</spanx> for consistency with Messages.
	  </t>
	  <t>Fixed #666 - JWS signature validation vs. verification.</t>
          <t>Referenced OAuth 2.0 RFC -- RFC 6749.</t>
      </list></t>

      <t>-08
        <list style="symbols">
          <t>Complete rewrite based on the decisions made at the
	  May 5, 2012 face to face working group meeting.</t>
        </list></t>

      <t>-07 <list style="symbols">
          <t>Added warning about the significant revisions planned to session
          management to the abstract and introduction.</t>

          <t>Changed client.example.com to client.example.org, per issue
          #251</t>

          <t>Listed author of ISO29115 as "International Telecommunication
          Union and International Organization for Standardization", per issue
          #589</t>

          <t>Use standards track version of JSON Web Token spec
          (draft-ietf-oauth-json-web-token)</t>
        </list></t>

      <t>-06 <list style="symbols">
          <t>Updated Notices</t>

          <t>Updated References</t>
        </list></t>

      <t>-05 <list style="symbols">
          <t>Removed Check Session Endpoint</t>

          <t>Updated ID Token claims to reflect changes in Messages</t>
        </list></t>

      <t>-04 <list style="symbols">
          <t>Changes associated with renaming "Lite" to "Basic Client" and
          replacing "Core" and "Framework" with "Messages" and "Standard".</t>

          <t>Numerous cleanups, including updating references.</t>
        </list></t>

      <t>-03 <list style="symbols">
          <t>Corrected examples.</t>
        </list></t>

      <t>-02 <list style="symbols">
          <t>Correct issues raised by Johnny Bufu and discussed on the
          7-Jul-11 working group call.</t>
        </list></t>

      <t>-01 <list style="symbols">
          <t>Consistency and cleanup pass, including removing unused
          references.</t>
        </list></t>

      <t>-00 <list style="symbols">
          <t>Split from core when all optional features were removed.</t>
        </list></t>
    </section>
  </back>
</rfc>
