<?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 12</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="6" month="March" year="2013" />

    <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 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 user's
	login status at the OpenID Provider on an ongoing basis so
	that the Relying Party can log out the user once the user 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">
	      Instance of an interactive logged-in session at a Relying Party
	      with a particular OpenID Provider and End-User identity.
	    </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. This can either be
      communicated out of band or through the OP configuration file, as described
      in <xref target="OpenID.Discovery">OpenID Connect Discovery 1.0</xref>.</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 user at the OP.
	  </t>

          <t hangText="end_session_endpoint">
	    URL at the OP that an RP can redirect the user to log 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 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 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 user
      may 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 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 frame has access to Browser state at the OP (in a
	  cookie or in HTML5 storage) that it uses to calculate and
	  compare 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 do 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 a 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>
      </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 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
	  user, then it needs to handle this case as a logout for the
	  original 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>Sometimes, the RP may want to notify the OP that the user has logged
      out of the site, and he may want to logout of the OP as well. In this
      case, the RP, after having logged out the user, sends the user to the
      OP's logout endpoint URL that is either advertised through OP's
      provider configuration information or via out of band knowledge.</t>

      <t>Upon receipt of such message, the OP SHOULD prompt the user whether
      he wants to logout of the OP as well. If the user says "yes", then the OP MUST
      log the user out.</t>

      <section anchor="RedirectionAfterLogout" title="Redirection to RP After Logout">
	<t>
	  In some cases, the RP may want the user to be redirected back to the RP
	  after a logout has been performed.
	  This specification defines an additional 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_uri">
	      OPTIONAL.
	      URL supplied by the RP to request that the user be redirected to this location
	      after a logout has been performed.
	      If supplied, the OP SHOULD honor this request following a logout initiated from this RP.
	    </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="6" month="March" year="2013"/>
        </front>

        <format target="http://openid.net/specs/openid-connect-messages-1_0.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="6" month="March" year="2013"/>
        </front>

        <format target="http://openid.net/specs/openid-connect-standard-1_0.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="6" month="March" year="2013"/>
        </front>

        <format target="http://openid.net/specs/openid-connect-discovery-1_0.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="6" month="March" year="2013"/>
        </front>

        <format target="http://openid.net/specs/openid-connect-registration-1_0.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>-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>
