<?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-mesages-1_0" ipr="trust200902">
  <?rfc toc="yes" ?>
  <?rfc tocdepth="4" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc strict="no" ?>
  <?rfc iprnotified="no" ?>
  <?rfc private="Draft" ?>

  <front>
    <title>OpenID Connect Messages 1.0 - draft 07</title>

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

      <address>
        <email>n-sakimura@nri.co.jp</email>
      </address>
    </author>

    <author fullname="David Recordon" initials="D." surname="Recordon">
      <organization abbrev="Facebook">Facebook</organization>

      <address>
        <email>dr@fb.com</email>
      </address>
    </author>

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

      <address>
        <email>ve7jtb@ve7jtb.com</email>
      </address>
    </author>

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

      <address>
        <email>breno@google.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>

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

      <address>
        <email>ejay@mgi1.com</email>
      </address>
    </author>

    <date day="23" month="December" year="2011" />

    <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 
      RESTful manner.</t>

      <t>This specification only defines the endpoints and 
      the associated message formats. 
      The actual use MUST be based on one of 
      the companion protocol bindings specifications 
      such as OpenID Connect Standard.</t>
    </abstract>
  </front>

  <middle>
    <section title='Introduction'>
      <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="OAuth2.0">OAuth 2.0</xref>,
	and the terms "Claim Names" and "Claim Values" defined by
	<xref target="JWT">JSON Web Token (JWT)</xref>.
	This specification also defines the following terms:
	  <list style="hanging">
	    <t hangText="Authentication">An act of verifying End-User's possession 
	    of previously provisioned credentials.</t>

            <t hangText="Authentication Context">
            Information that the Relying Party may require before it makes an 
            entitlements decision with respect to an authentication response. 
            Such context may include, but is not limited to, the actual 
            authentication method used or level of assurance such as 
            <xref target="ISO29115">ITU-T X.1254 | ISO/IEC 29115</xref> 
            entity authentication assurance level.
            </t>

            <t hangText="Authentication Context Class Reference">
            Identifier that identifies the Authentication Context. 
            </t>

	    <t hangText="Claim">A piece of information about an Entity that a
	    Claims Provider asserts about that Entity.</t>

	    <t hangText="Claims Provider">A Server that can
	    return Claims about an Entity.</t>

	    <t hangText="End-User">A human Resource Owner.</t>

	    <t hangText="Entity">Something that has a separate and
	    distinct existence and that can be identified in context.
	    An End-User is one example of an Entity.</t>

	    <t hangText="Personally Identifiable Information (PII)">
            Any information that (a) can be used to identify the natural person 
            to whom such information relates, or 
            (b) is or might be directly or indirectly linked to a 
            natural person to whom such information relates. </t>

        <t hangText="Pairwise Pseudonymous Identifier (PPID)">
        An identifier that identifies the Entity to a Relying Party. 
        An Entity's PPID at one Relying Party cannot be correlated 
        with the Entity's PPID at another Relying Party. </t>

	    <t hangText="ID Token">A token that contains Claims about the
	    authentication event.</t>

	    <t hangText="Issuer">An Entity that issues a set of Claims.</t>

	    <t hangText="Issuer Identifier">A verifiable identifier for
	    an Issuer.  An Issuer Identifier is an HTTPS URL that only
	    contains scheme, host, and OPTIONALLY, port number
	    components.  (No path component may be present.)</t>

	    <t hangText="Message">A request or a response between an OpenID 
	    Relying Party and an OpenID Provider.</t>

	    <t hangText="OpenID Provider (OP)">A service capable of providing
	    Claims to a Relying Party.</t>

	    <t hangText="OP Endpoints">Authorization Endpoint, Token
	    Endpoint, and UserInfo Endpoint.</t>

	    <t hangText="OpenID Request Object">A JSON object that holds the
	    OpenID request parameters.</t>

	    <t hangText="Relying Party (RP)">An application requiring
	    Claims from an OpenID Provider.</t>

	    <t hangText="Check ID Endpoint">A resource that, when
	    presented with an ID Token by the Client, returns Claims
	    about the user session represented by that ID Token.</t>

	    <t hangText="UserInfo Endpoint">A Protected Resource that, when
	    presented with an Access Token by the Client, returns Claims
	    about the End-User represented by that Access Token.</t>
	  </list></t>
      </section>

      <section title="Overview">
	<t>The OpenID Connect protocol, in abstract, follows the following
	steps.</t>

	<t><list style="numbers">
	    <t>The Client sends a request to the Authorization Server's End-User
	    Authorization Endpoint.</t>

	    <t>The Authorization Server authenticates the End-User and obtains 
	    appropriate authorization.</t>

	    <t>The Authorization Server responds with an Access Token, an Id Token, 
	    and a few other variables.</t>
		
	    <t>Optionally, the Client sends a request with the ID Token to the
	    Authorization Server's <xref target="check_id_ep">Check ID
	    Endpoint</xref>.</t>

	    <t>Optionally, the Check ID Endpoint responds with authentication
	    information pertaining to the supplied ID Token.</t>
		
	    <t>The Client sends a request with the Access Token to the <xref
	    target="userinfo_ep">UserInfo Endpoint</xref>.</t>

	    <t>UserInfo Endpoint returns the additional End-User information
	    supported by the Resource Server.</t>

	  </list>
	This specification
	only defines the abstract message flow and message formats. The actual
	use MUST be based on one of the companion protocol bindings
	specifications such as <xref target="OpenID.Basic">OpenID Connect
	Basic Client</xref> or <xref target="OpenID.Standard">OpenID Connect
	Standard</xref>.
      </t>
      </section>
    </section>

    <section title="Messages">
      <t>In OpenID Connect protocols, in abstract, the process proceeds by the
      Client interacting with endpoints. There are a number of endpoints
      involved.</t>

      <t><list style="numbers">
          <t>Authorization Endpoint: The Client sends a request to the 
          Authorization Server at the Authorization Endpoint. The Authorization
          Server then authenticates the End-User to find out if he is eligible
          to make the authorization. Then, upon the authorization action of the
          End-User, the Authorization Server returns an Authorization Response
          that includes Authorization Code, <spanx style="verb">code</spanx>.
          For some Clients, Implicit Grant may be used to obtain <spanx 
          style="verb">access_token</spanx> without using <spanx 
          style="verb">code</spanx>. In this case, <spanx
          style="verb">response_type</spanx> MUST include <spanx
          style="verb">token</spanx>.</t>

          <t>Token Endpoint: The Client sends the Access Token Request to the
          Token Endpoint to obtain an Access Token Response which includes an
          <spanx style="verb">access_token</spanx>.</t>

          <t>UserInfo Endpoint: The <spanx style="verb">access_token</spanx>
          MAY be sent to the UserInfo Endpoint to obtain Claims about the
          End-User.</t>

          <t>Check ID Endpoint: An ID Token MAY be sent to the Check ID
          Endpoint to obtain information about the authentication
          event.</t>

        </list></t>

      <section title="Authorization Endpoint">
        <t>The Client sends an Authorization Request to the Authorization
        Endpoint to obtain either an Authorization Response or an <xref
        target="id_token">ID Token</xref> or both depending on 
        <spanx style="verb">response_type</spanx> and 
        <spanx style="verb">scope</spanx>.</t>

        <section anchor="id_token" title="ID Token">
          <t>The ID Token is a token that contains Claims about the
          authentication event.  The Token is a
	  <xref target="JWT">JSON Web Token (JWT)</xref>. </t>

          <t>The ID Token is used to manage the authentication event and user
          identifier and is scoped to a particular Client via the <spanx
          style="verb">aud</spanx> (audience) and <spanx style="verb">nonce</spanx>
          Claims. It is used as an Access Token for the Check ID Endpoint, or consumed 
          directly by the Client.</t>

          <t>The ID Token MUST minimally attest to the following Claims:</t>

          <t><list style="hanging">
              <t hangText="iss">REQUIRED. The Issuer Identifier for the Issuer
              of the response.</t>

              <t hangText="user_id">REQUIRED. A locally unique and never
              reassigned identifier within the Issuer for the End-User, 
              which is intended to be
              consumed by the Client. e.g. <spanx style="verb">24400320</spanx>
              or <spanx style="verb">AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4</spanx>.
              It MUST NOT exceed 255 ASCII characters in length.</t>

              <t hangText="aud">REQUIRED. This member identifies the audience
              that this ID Token is intended for. It MUST be the OAuth 2.0 <spanx style="verb">client_id</spanx>
              of the Client.</t>

              <t hangText="exp">REQUIRED. Type Integer. Identifies the
              expiration time on or after which the ID Token MUST NOT be
              accepted for processing. The processing of this parameter
              requires that the current date/time MUST be before the
              expiration date/time listed in the value. Implementers MAY
              provide for some small leeway, usually no more than a few
              minutes, to account for clock skew. The value is number of
              seconds from 1970-01-01T0:0:0Z as measured in UTC until the
              desired date/time. See <xref target="RFC3339">RFC 3339</xref>
              for details regarding date/times in general and UTC in
              particular.</t>

              <t hangText="acr">OPTIONAL. (Authentication Context Class Reference): 
              Specifies an Authentication Context Class Reference of the ID Token. 
              The values "1", "2", "3", and "4" map to the
              <xref target="ISO29115">ITU-T X.1254 | ISO/IEC 29115</xref> 
              entity authentication assurance level of the authentication performed. 
              The value "0" indicates the End User authentication
              did not meet the requirements of ISO/IEC 29115 level 1.
              Authentication using a long-lived browser cookie, for instance, is one 
              example where the use of "level 0" is appropriate. Authentications with 
              level 0 should never be used to authorize access to any resource of any 
              monetary value.  
              (This corresponds to the OpenID 2.0
              PAPE <spanx style="verb">nist_auth_level</spanx> 0.)
              An absolute URI or a <xref target="LoA.Registry">registered short 
              name</xref> MAY be used as an <spanx style="verb">acr</spanx> value.
              </t>

              <t hangText="nonce">REQUIRED. Clients MUST verify that
              the <spanx style="verb">nonce</spanx> value is equal to
              the value of the <spanx style="verb">nonce</spanx>
              parameter in the Authorization Request.</t>

              <t hangText="auth_time">OPTIONAL. If the 
                  <xref target="req.obj.id_token">id_token</xref> member of the 
                  <xref target="OpenIDReq">OpenID Request Object</xref> 
                  contains the Claim request 
                  <spanx style="verb">auth_time</spanx>,
		  then this Claim is REQUIRED. The Claim Value
                  is the number of seconds from 1970-01-01T0:0:0Z as
                  measured in UTC until the date/time that the End-User
                  authentication occurred. (The <spanx style="verb">auth_time</spanx>
		  Claim semantically
                  corresponds to the OpenID 2.0
                  PAPE <spanx style="verb">auth_time</spanx> response
                  parameter.)</t>

            </list></t>

          <t>ID Tokens MUST be signed using <xref
          target="JWS">JWS</xref> and OPTIONALLY both signed and
          encrypted using <xref target="JWS">JWS</xref> and <xref
          target="JWE">JWE</xref> respectively, thereby providing
          <xref target="signing_order">authentication, integrity, non-repudiation and/or
          confidentiality</xref>.</t>

          <t>Clients SHOULD directly validate the ID Token per 
          <xref target="id.token.verification">ID Token Verification</xref>.
	      Clients that do not understand the ID Token format or that
          do not wish to directly process ID Tokens MAY treat them as opaque
          values and submit them to the <xref target="check_id_ep">Check
          ID Endpoint</xref> for verification and decryption.</t>
          
          <section anchor="idtype" title="User Identifier Types">
           <t>Provider's Discovery documents SHOULD list their supported identifier types in the 
           <spanx style="verb">user_id_types_supported</spanx> element.</t>
           <t>If there is more than one type listed in the array, the Client MAY elect to
           provide its preferred identifier type using the <spanx style="verb">user_id_type</spanx> parameter during registration.</t>
           <t>The types supported by this specification are:</t>
           
           <t><list style="hanging">
              <t hangText="public"> This provides the same <spanx style="verb">user_id</spanx> value to all Clients. It is the default if
              the provider has no <spanx style="verb">user_id_types_supported</spanx> element in its discovery document.</t>
              <t hangText="pairwise"> This provides a different <spanx style="verb">user_id</spanx> value to each Client, to prevent
              correlation of the user's activities by Clients without the user's permission.</t>
           </list></t>
           <section anchor="idtype.pairwise.alg" title="Pairwise Identifier Algorithm">
           <t>The Provider MUST calculate a unique <spanx style="verb">user_id</spanx> value for each Sector Identifier.</t>
           <t>If the Client has not provided a value for
	   <spanx style="verb">sector_identifier_url</spanx> in registration,
           the Sector Identifier
	   used for pairwise identifier calculation is the host component 
           of the registered <spanx style="verb">redirect_uri</spanx>.</t>
           <t>If there are multiple hostnames in the registered
	   <spanx style="verb">redirect_uris</spanx>, the Client MUST register a 
           <spanx style="verb">sector_identifier_url</spanx>.
           When a <spanx style="verb">sector_identifier_url</spanx>
	   is provided, the host component of that URL is used as
           the Sector Identifier for the pairwise identifier calculation.</t>
           <t>The value of the <spanx style="verb">sector_identifier_url</spanx>
	   must be a HTTPS URL that points to
           a JSON file containing an array of
	   <spanx style="verb">redirect_uri</spanx> values.
           The values of the registered <spanx style="verb">redirect_uris</spanx>
	   must be included in the elements of the array,
           or the registration MUST fail.</t>

           <t>A number of algorithms MAY be used by Providers to calculate the pairwise identifier.
           This specification includes a simple example.</t>
           <t>For instance, the Sector Identifier can be concatenated with a local account ID and a salt 
           value that is kept secret by the Provider. The concatenated string is then 
           hashed by an appropriate algorithm.</t>
           <t>Calculate <spanx style="verb">user_id</spanx> = SHA256 ( sector_identifier | local_account_id | salt ).</t>
        </section>
          </section>
        </section>

        <section anchor="auth_req" title="Authorization Request">
          <t>Section 4.1.1 and 4.2.1 of <xref target="OAuth2.0">OAuth
          2.0</xref> defines the OAuth Authorization Request parameters. In
          this specification, the values to the parameters are defined as
          follows.</t>

          <t><list style="hanging">
              <t hangText="response_type">A space delimited, case sensitive
              list of ASCII string values. Acceptable values include <spanx
              style="verb">code</spanx>, <spanx style="verb">token</spanx>, and
              <spanx style="verb">id_token</spanx>.
              The value MUST include <spanx style="verb">code</spanx> for
              requesting an Authorization Code, <spanx style="verb">token</spanx>
              for requesting an Access Token, and <spanx 
              style="verb">id_token</spanx> for requesting an ID Token.</t>

              <t hangText="scope">A space delimited, case sensitive list of
              ASCII string values. The values specify an additive list of Claims
              that are returned by the UserInfo Endpoint. The following values
              are defined:<list style="hanging">
                  <t hangText="openid">REQUIRED. Informs the Authorization
                  Server that the Client is making an OpenID Connect request. If the
                  <spanx style="verb">openid</spanx> scope value is not present,
                  the request MUST NOT be treated as an OpenID Connect request.
                  The <spanx style="verb">openid</spanx> value also requests
                  that the ID Token associated with the authentication session be
                  returned. If the <spanx style="verb">response_type</spanx>
                  includes <spanx style="verb">token</spanx>, the ID Token is
                  returned in the Authorization Response along with the Access
                  Token. If the <spanx style="verb">response_type</spanx>
                  includes <spanx style="verb">code</spanx>, the ID Token is
                  returned as part of the Token Endpoint response.
                  This scope value requests access to the <spanx style="verb">user_id</spanx>
                   Claim at the UserInfo Endpoint.</t>

                  <t hangText="profile">OPTIONAL. This requests that access to
                  the End-User's <xref target="ClaimTable">profile Claims</xref>
                  excluding the <spanx style="verb">address</spanx> and <spanx
                  style="verb">email</spanx> Claims at the UserInfo Endpoint
                  be granted by the issued Access Token.</t>

                  <t hangText="email">OPTIONAL. This requests that access to
                  the <spanx style="verb">email</spanx> and 
                  <spanx style="verb">verified</spanx> Claims at the UserInfo
                  Endpoint be granted by the issued Access Token.</t>

                  <t hangText="address">OPTIONAL. This requests that access to
                  <spanx style="verb">address</spanx> Claim at the
                  UserInfo Endpoint be granted by the issued Access Token.</t>

                  <t hangText="phone">OPTIONAL. This requests that access to 
                  the <spanx style="verb">phone_number</spanx> Claim at the 
                  UserInfo Endpoint be granted by the issued Access Token.</t>

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

          <t>Other REQUIRED OAuth 2.0 parameters in the request include:</t>

          <t><list style="hanging">
              <t hangText="client_id">The OAuth 2.0 Client Identifier.</t>

              <t hangText="redirect_uri">A redirection URI where the response
              will be sent.</t>
            </list></t>

          <t>The request MAY contain the following OAuth 2.0 parameters:</t>

          <t><list style="hanging">
              <t hangText="state">RECOMMENDED.  An opaque value used
              to maintain state between the request and the callback;
              it can serve as a protection against XSRF attacks, among
	      other uses.</t>
            </list></t>

          <t>The following extension parameters are also defined:</t>

          <t><list style="hanging">
              <t hangText="nonce">REQUIRED. A random, unique string value used
              to mitigate replay attacks.</t>

            <t hangText="display">OPTIONAL. An ASCII string value that specifies
              how the Authorization Server displays the authentication and
              consent user interface pages to the End-User.
              <list style="hanging">
              <t hangText="page">The Authorization Server SHOULD display
              authentication and consent UI consistent with a full user-agent page
              view. If the display parameter is not specified this is the
              default display mode.</t>

              <t hangText="popup">The Authorization Server SHOULD display
              authentication and consent UI consistent with a popup user-agent
              window. The popup user-agent window SHOULD be 450 pixels wide
              and 500 pixels tall.</t>

              <t hangText="touch">The Authorization Server SHOULD display
              authentication and consent UI consistent with a device that
              leverages a touch interface. The Authorization Server MAY attempt
              to detect the touch device and further customize the interface.</t>

              <t hangText="wap">The Authorization Server SHOULD display
              authentication and consent UI consistent with a "feature phone"
              type display.</t>

              <t hangText="embedded">The Authorization Server SHOULD display
              authentication and consent UI consistent with the limitations of
              an embedded user-agent.</t>
              </list></t>

              <t hangText="prompt">OPTIONAL. A space delimited, case sensitive
              list of ASCII string values that specifies whether the Authorization
              Server prompts the End-User for reauthentication and consent. The
              possible values are:
	      <list style="hanging">
                <t hangText="none">The Authorization Server
                MUST NOT display any authentication or consent
                user interface pages. An error is returned if the End-User 
                is not already authenticated or the Client does not have 
                pre-configured consent for the requested
                <spanx style="verb">scopes</spanx>. This can be used as a
                method to check for existing authentication and/or consent.</t>

                <t hangText="login">The Authorization Server MUST prompt the
                  End-User for reauthentication.</t>

                  <t hangText="consent">The Authorization Server MUST prompt
                  the End-User for consent before returning information to the
                  Client.</t>

                  <t hangText="select_account">The Authorization Server MUST
                  prompt the End-User to select a user account.  This allows 
                  a user who has multiple accounts at the Authorization Server
                  to select amongst the multiple accounts that they may have 
                  current sessions for.</t>
                </list>

		The <spanx style="verb">prompt</spanx> parameter
                can be used by the Client to make sure that the End-User is
                still present for the current session or to bring attention to the
                request. If this parameter contains <spanx style="verb">none</spanx>
		with any other value, an
                error is returned.</t>

              <t hangText="request">OPTIONAL. A <xref target="JWT">JWT</xref>
              encoded <xref target="OpenIDReq">OpenID Request
              Object</xref>.</t>

              <t hangText="request_uri">OPTIONAL. An URL that points to an
              OpenID Request Object. This is used to pass an OpenID Request
              Object by reference.</t>
            </list></t>

          <section anchor="OpenIDReq" title="OpenID Request Object">
            <t>The OpenID Request Object is used to provide OpenID request
            parameters that MAY differ from the default ones. Implementing
            support for the OpenID Request Object is OPTIONAL. Supporting it
            is necessary for implementations that need to request or provide
            sets of Claims other than the default <xref
            target="userinfo_ep">UserInfo</xref>, and ID Token Claim sets.</t>

            <t>The OpenID Request Object is a <xref target="JWT">JWT</xref>
            that is passed as the value of the "<spanx style="verb">request</spanx>"
            parameter in the Authorization Request. The OpenID Request Object
            can also be sent by reference. Parameters that affect the
            information returned from the UserInfo Endpoint are in the "<spanx
            style="verb">userinfo</spanx>" member. Parameters that affect the
            information returned in the ID Token
            are in the "<spanx style="verb">id_token</spanx>" member. If the
            same parameters are present both in the Authorization Request and
            in the OpenID Request Object, the latter takes precedence.
            </t>

            <t>The OpenID Request Object MUST contain all REQUIRED OAuth 2.0
            Authorization Request parameters and MAY contain OPTIONAL and
            extension OAuth 2.0 parameters.
	    The OAuth 2.0 parameter values included MUST match the
	    actual OAuth 2.0 request parameters used.</t>

            <t>The OpenID Request Object MAY contain a set of members defined
            by this specification and MAY contain other members that are not
            defined by this specification.
	    With only one exception, OpenID Request Object members
	    MUST be understood by both parties; that exception is that
	    OpenID Providers MAY ignore requests for Claims they can
	    not provide or do not understand; however, Relying Parties
	    MAY also consider it an error condition if all requested
	    required Claims are not provided.</t>

            <t>The OpenID Request Object JWT MAY be signed or unsigned (plaintext).
	    When it is a plaintext JWT, this is indicated by use of the
	    JWT <spanx style="verb">"alg":"none"</spanx>
            convention in the JWT header. If signed, the OpenID Request Object
            SHOULD contain the standard JWT "<spanx style="verb">iss</spanx>" (issuer)
            and "<spanx style="verb">aud</spanx>" (audience) Claims.</t>

            <t>The OpenID Request Object members defined by this
            specification are:</t>

            <t><list style="hanging">
                <t hangText="userinfo">OPTIONAL. (UserInfo request): Requests
                affecting the values to be returned from the UserInfo
                Endpoint. If not present, the UserInfo Endpoint behaves in the
                default manner.</t>

                <t hangText="id_token">OPTIONAL. (ID Token request): Requests
                affecting the values to be to be returned in the ID Token. 
                If not present, the default ID Token contents are used. 
                If present, these parameters are used
                to request additional Claims incremental to the <xref target="id_token">
                                default Claims of the ID Token.</xref></t>
              </list><figure>
                <preamble>An example OpenID Request Object body before JWT 
                encoding is as follows:</preamble>

                <artwork><![CDATA[{
 "response_type": "code id_token",
 "client_id": "s6BhdRkqt3",
 "redirect_uri": "https://client.example.com/cb",
 "scope": "openid profile",
 "state": "af0ifjsldkj",
 "userinfo":
   {
     "claims":
       {
         "name": null,
         "nickname": {"optional": true},
         "email": null,
         "verified": null,
         "picture": {"optional": true}
       }
   },
 "id_token":
   {
     "claims":
       {
        "auth_time": null,
        "acr": { "values":["2"] }
       },
     "max_age": 86400,
     
   }
}]]></artwork>
              </figure></t>

            <section anchor="req.obj.userinfo" title="&quot;userinfo&quot; member">
              <t>The structure of the <spanx style="verb">userinfo</spanx>
	      (UserInfo Request) member is
              a JSON object that MAY contain the following members:</t>

              <t><list style="hanging">
                  <t hangText="claims">OPTIONAL. (Requested Claims): A
                  JSON object containing a set of Claims being
                  requested from the UserInfo Endpoint.  If not
                  present, the UserInfo Claims held by the OP that are
                  specified by the <spanx style="verb">scope</spanx>
                  values used are returned.</t>

                  <t hangText="preferred_locales">OPTIONAL.  A list of preferred 
                  languages and scripts for the entire Claims request, 
                  represented as a JSON array of <xref
                  target="RFC5646">BCP47</xref> language tag values,
		  ordered by preference.</t>
                </list>
                </t>
                 <t>All members of the <spanx style="verb">userinfo</spanx>
		 object are OPTIONAL.
              Other members MAY be present and if so, SHOULD understood by
              both parties.</t>
                
                <section title="&quot;claims&quot; member">
                <t>The <spanx style="verb">claims</spanx>
		member is a JSON object with a member for
              each requested Claim. The member names are the requested Claim
              names. The member values MAY be either:</t>

              <t><list style="hanging">
                  <t hangText="null">This indicates that this Claim is being
                  requested in the default manner. In particular, this is a
                  required Claim.</t>

                  <t hangText="A JSON Object">This is used to provide
                  additional information about the Claim being requested.</t>
                </list>The Claims MAY be represented in multiple languages and
              scripts. To specify languages and scripts for the Claim request,
              <xref target="RFC5646">BCP47</xref> language tags delimited by a
              "#" MUST be added to each requested Claim Name for which a
              particular language and script is requested. For example, the
              Claim <spanx style="verb">family_name#ja-Kana-JP</spanx> is used
              for expressing Family Name in Katakana in Japanese, which is
              commonly used to index and represent the phonetics of the Kanji
              representation of the same value represented as <spanx
              style="verb">family_name#ja-Hani-JP</spanx>.</t>

              <t>All members of the <spanx style="verb">claims</spanx>
	      object are OPTIONAL.</t>

              <section title="Requested Claims Member">
              <t>The members defined by this specification for the
              JSON object value following a Claim Name member are:</t>

              <t><list style="hanging">
                  <t hangText="optional">This is an OPTIONAL Claim parameter. 
                  If present, its value MUST be <spanx style="verb">true</spanx>,
                  which indicates that it is an optional Claim. If it is not
                  present, it is a required Claim.</t>
                </list>
                Other members MAY be defined to provide additional
              information about the requested Claim. If the
	      <spanx style="verb">claims</spanx> member is
              present in the <spanx style="verb">userinfo</spanx>
	      object, the Claims requested within it
              override the Claim set that would otherwise be returned
              from the UserInfo Endpoint.</t>

                </section>
              </section>
            </section>

            <section anchor="req.obj.id_token" title="&quot;id_token&quot; member">
              <t>The structure and function of the
	      <spanx style="verb">id_token</spanx> (ID Token
              request) member of the OpenID Request Object is similar to that
              of the <spanx style="verb">userinfo</spanx> member.
	      It MAY include the OPTIONAL <spanx style="verb">claims</spanx> and
              <spanx style="verb">preferred_locales</spanx> members.
	      The structure of these members is the same as
              that for the <spanx style="verb">userinfo</spanx> member.
	      If the <spanx style="verb">claims</spanx> member is
              present in the <spanx style="verb">id_token</spanx> object,
	      the Claims requested within it
              modify the Claim set that would otherwise be returned in
              the ID Token. Unlike for the <spanx style="verb">userinfo</spanx>
	      member, typically these
              Claims will augment, rather than override the default set.</t>

              <t>Following Claims MAY be requested in the ID Token by
              specifying it in the <spanx style="verb">claims</spanx> member:</t>

              <t><list style="hanging">
                  <t hangText="user_id">OPTIONAL. (User Identifier):
		  The User Identifier for which an ID Token is being requested.
                  If the specified user is not currently authenticated to the Authorization 
                  Server, they may be prompted for authenticated, unless the 
                  <spanx style="verb">prompt</spanx> parameter in the Authorization
		  Request is set to <spanx style="verb">none</spanx>.

                  The Claim Value in the request is an object containing the single element
                  <spanx style="verb">value</spanx>.  
                  <figure>
                <artwork><![CDATA[ "user_id": {"value":"248289761001"}]]></artwork>
              </figure>
                  </t>
                  <t hangText="auth_time">OPTIONAL. (authenticated at):
                  Requests that the <spanx style="verb">auth_time</spanx> Claim be present in the 
                  <xref target="id_token">"id_token"</xref> response.
                  The Claim Value in the request is <spanx style="verb">null</spanx>.  
                  </t>
                  
                  <t hangText="acr">OPTIONAL. 
                  (Authentication Context Class Reference): 
                  Requests the desired 
                  Authentication Context Class References. 
                  The element <spanx style="verb">values</spanx> is an ordered array of strings 
                  representing acceptable Authentication Context Class Reference 
                  values appearing in order of preference.
                  <figure>
                
                <artwork><![CDATA[ "acr": {"values":["2","http://id.incommon.org/assurance/bronze"]}]]></artwork>
              </figure>
                  </t>
                  
                </list>In addition to the <spanx style="verb">claims</spanx>
		member, these additional members are defined within the
		<spanx style="verb">id_token</spanx> member of the OpenID
              Request Object:</t>

              <t><list style="hanging">
                  <t hangText="max_age">OPTIONAL. (max authentication age):
                  Specifies that the End-User must be actively authenticated if
                  any present authentication is older than the specified
                  number of seconds. (The <spanx style="verb">max_age</spanx> request parameter
                  corresponds to the OpenID 2.0
                  PAPE <spanx style="verb">max_auth_age</spanx>
                  request parameter.)</t>

                  
                </list>It is anticipated that additional
		<spanx style="verb">id_token</spanx> parameters
              MAY be defined to request that additional properties hold for
              the authentication - for instance, that certain authentication
              policies be applied (in the same spirit of the OpenID 2.0
              PAPE <spanx style="verb">auth_policies</spanx> values),
              or that the authentication
              conform to the policies defined by a specified trust framework.
              These parameters MAY be defined by extension specifications.</t>

              <t>All members of the <spanx style="verb">id_token</spanx>
	      object are OPTIONAL. Other
              members MAY be present and if so, SHOULD be understood by both
              parties.</t>
            </section>
          </section>
        </section>

        <section title="Authorization Response">
          <t>When the <spanx style="verb">response_type</spanx> in the request
          is <spanx style="verb">token</spanx>, the Authorization
          Response MUST return the parameters defined in section 4.2.2 of
          <xref target="OAuth2.0">OAuth 2.0</xref>. This specification only
          supports <xref target="OAuth.Bearer">Bearer Tokens</xref>. The
          OAuth 2.0 response parameter "<spanx style="verb">token_type</spanx>"
          MUST be set to "<spanx style="verb">Bearer</spanx>".</t>

          <t>When the <spanx style="verb">response_type</spanx> in the request
          is <spanx style="verb">code</spanx>, the Authorization
          Response MUST return the parameters defined in section 4.1.2 of
          <xref target="OAuth2.0">OAuth 2.0</xref>.</t>

          <t>When the <spanx style="verb">response_type</spanx>
          includes other values, they must be returned as defined by
          their registration.  The <spanx style="verb">id_token</spanx> return type is defined in
          <xref target="OAuth.Responses">OAuth 2.0 Multiple Response Type
          Encoding Practices</xref>.</t>
        </section>

        <section title="Authorization Error Response">
          <t>If the End-User denies the access request or if the request
          fails, the Authorization Server informs the Client by returning
          parameters defined in sections 4.1.2.1 and 4.2.2.1 of <xref
          target="OAuth2.0">OAuth 2.0</xref>.</t>

	  <t>In addition to the error codes defined in section 4.1.2.1 and 4.2.2.1 of
	  <xref target="OAuth2.0">OAuth 2.0</xref>, this specification
	  defines the following error codes:</t>

	  <t><list style="hanging">
	      <t hangText="invalid_request_redirect_uri">The 
	      <spanx style="verb">redirect_uri</spanx> in
	      the Authorization Request does not match any of the Client's 
	      pre-registered <spanx style="verb">redirect_uris</spanx>.</t>

	      <t hangText="login_required">The Authorization Server requires
	      End-User authentication. This error MAY be returned when the 
	      <spanx style="verb">prompt</spanx> parameter in the
	      Authorization Request is set to
	      <spanx style="verb">none</spanx> to request that the
	      Authorization Server should not display any user interfaces to
	      the End-User, but the Authorization Request cannot be completed
	      without displaying a user interface for user authentication.
	    </t>

	      <t hangText="session_selection_required">The End-User is required
	      to select a session at the Authorization Server. The End-User MAY
	      be authenticated at the Authorization Server with different
	      associated accounts, but the End-User did not select a session.
	      This error MAY be returned 
	      when the <spanx style="verb">prompt</spanx> parameter in the
	      Authorization Request is set to <spanx style="verb">none</spanx>
	      to request that the
	      Authorization Server should not display any user interfaces to
	      the End-User, but the Authorization Request cannot be completed
	      without displaying a user interface to prompt for a session to
	      use.</t>

	      <t hangText="consent_required">The Authorization Server
	      requires End-User consent. This error MAY be returned when the 
	      <spanx style="verb">prompt</spanx> parameter in the
	      Authorization Request is set to <spanx style="verb">none</spanx>
	      to request that the
	      Authorization Server should not display any user interfaces to
	      the End-User, but the Authorization Request cannot be completed
	      without displaying a user interface for End-User consent.</t>

	      <t hangText="user_mismatched">The current logged in End-User at
	      the Authorization Server does not match the requested
	      user. This error MAY be returned when the 
	      <spanx style="verb">prompt</spanx> parameter in the
	      Authorization Request is set to <spanx style="verb">none</spanx>
	      to request that the
	      Authorization Server should not display any user interfaces to
	      the End-User, but the Authorization Request cannot be completed
	      without displaying a user interface to prompt for the correct
	      End-User authentication.</t>

	      <t hangText="invalid_request_uri">The 
	      <spanx style="verb">request_uri</spanx> in
	      the Authorization Request returns an error or invalid data.</t>

	      <t hangText="invalid_openid_request_object">The 
	      <spanx style="verb">request</spanx> parameter contains an invalid 
	      OpenID Request Object.</t>


	    </list></t>
	  <t>Errors are returned as defined by the registered OAuth
	  2.0 <spanx style="verb">response_type</spanx>.</t>

        </section>
      </section>

      <section anchor="token_ep" title="Token Endpoint">	
        <t>The Client sends an Access Token Request to the Token 
        Endpoint to obtain Access Token Response,  
        which MAY include Access Token, <xref target="token_lifetime">Refresh Token</xref>,
	<xref target="id_token">ID Token</xref>, and other variables.</t>
        
        <section anchor="client_authentication" title="Client Authentication">

          <t>During Client Registration, the Client MAY register an authentication method.
          If no method is registered, the default method of <spanx style="verb">client_secret_basic</spanx> MUST be used.</t>
          <t>The Supported options are:</t>
          
          <t><list style="hanging">
        
          <t hangText="client_secret_basic"> 
          Clients in possession of a client password authenticate with the Authorization Server
          in accordance with section 3.2.1 of <xref
          target="OAuth2.0">OAuth 2.0</xref> using HTTP Basic authentication scheme. </t>
          
          <t hangText="client_secret_post">
          Clients in possession of a client password authenticate with the Authorization Server
          in accordance with section 3.2.1 of <xref
          target="OAuth2.0">OAuth 2.0</xref> by including the client credentials in the request body. </t>
          
          <t hangText="client_secret_jwt"> 
          Clients in possession of a client password create a JWT using the
	      HMAC-SHA algorithm. 
	      The HMAC (Hash-based Message Authentication Code) is calculated using the
	      <spanx style='verb'>client_secret</spanx> as the shared key.
	   
          The client Authenticates in accordance with section 2.2 of <xref
          target="OAuth.JWT">(JWT) Bearer Token Profiles</xref> and 
          <xref target="OAuth.Assertions">OAuth 2.0 Assertion Profile</xref>. 
          The JWT MUST contain the Claims:</t>
         
          <t><list style="hanging">
          <t hangText="iss">REQUIRED. The <spanx style="verb">iss</spanx> (issuer) Claim.
	  This MUST contain the <spanx style="verb">client_id</spanx> of the OAuth Client.</t>

          <t hangText="prn">REQUIRED. The <spanx style="verb">prn</spanx> (principal) Claim.
	  This MUST contain the <spanx style="verb">client_id</spanx> of the OAuth Client.</t>

           <t hangText="aud">REQUIRED. The <spanx style="verb">aud</spanx> (audience) Claim.
	   A value that identifies the
      Authorization Server as the intended audience.  The Authorization
      Server MUST verify that it is an intended audience for the
      token.  The Audience SHOULD be the URL of the Authorization
      Server's Token Endpoint.</t>

           <t hangText="jti">REQUIRED. The  <spanx style="verb">jti</spanx> (JWT ID) Claim.
	   A unique identifier for the token.  The
      JWT ID MAY be used by implementations requiring message
      de-duplication for one-time use assertions. </t>
           <t hangText="exp">REQUIRED.  The <spanx style="verb">exp</spanx> (expiration)
	   Claim that limits the time window during which the JWT can be used.</t>
            <t hangText="iat">OPTIONAL.  The <spanx style="verb">iat</spanx> (issued at)
	    Claim that identifies the time at which the JWT was issued. </t>
            </list></t>
             
          <t>The authentication token MUST be sent as the value of the <spanx
	      style='verb'>client_assertion</spanx> parameter.</t>

          <t>The value of the <spanx style='verb'>client_assertion_type</spanx> parameter
	  MUST be "urn:ietf:params:oauth:client-assertion-type:jwt-bearer".</t>

          <t hangText="private_key_jwt">
          Clients that have registered a public key sign a JWT using 
          the RSA algorithm if a RSA key was registered 
          or the ECDSA algorithm if an Elliptic Curve key was registered.
          The Client Authenticates in accordance with section 2.2 of <xref
          target="OAuth.JWT">(JWT) Bearer Token Profiles</xref> and 
          <xref target="OAuth.Assertions">OAuth 2.0 Assertion Profile</xref>.
          The JWT MUST contain the Claims:</t>
          <t><list style="hanging">
                    <t hangText="iss">REQUIRED. The <spanx style="verb">iss</spanx> (issuer) Claim.
		    This MUST contain the <spanx style="verb">client_id</spanx> of the OAuth Client.</t>

          <t hangText="prn">REQUIRED. The <spanx style="verb">prn</spanx> (principal) Claim.
	  This MUST contain the <spanx style="verb">client_id</spanx> of the OAuth Client.</t>

          <t hangText="aud">REQUIRED. The <spanx style="verb">aud</spanx> (audience) Claim.
	  A value that identifies the
      Authorization Server as the intended audience.  The Authorization
      Server MUST verify that it is an intended audience for the
      assertion.  The Audience SHOULD be the URL of the Authorization
      Server's Token Endpoint.</t>

           <t hangText="jti">REQUIRED. The <spanx style="verb">jti</spanx> (JWT ID) Claim.
	   A unique identifier for the token.  The
      token ID MAY be used by implementations requiring message
      de-duplication for one-time use assertions. </t>
           <t hangText="exp">REQUIRED.  The <spanx style="verb">exp</spanx> (expiration)
	   Claim that limits the time window during which the JWT can be used.</t>
            <t hangText="iat">OPTIONAL.  The <spanx style="verb">iat</spanx> (issued at)
	    Claim that identifies the time at which the JWT was issued. </t>
            </list></t>

	  <t>The authentication token MUST be sent as the value of the <spanx
	      style='verb'>client_assertion</spanx> parameter.</t>

          <t>The value of the <spanx style='verb'>client_assertion_type</spanx> parameter
	  MUST be "urn:ietf:params:oauth:client-assertion-type:jwt-bearer".

        <figure>
          <preamble>
            For example:
          </preamble>
          <artwork>
<![CDATA[POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=i1WsRn1uB1&
client_id=s6BhdRkqt3&
client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&
client_assertion=PHNhbWxwOl...[omitted for brevity]...ZT]]>
          </artwork>
        </figure>
        </t>
          </list>
          </t>

        </section>

        <section anchor="access_token_request" title="Access Token Request">
          <t>The Client obtains an Access Token by authenticating with the
          Authorization Server and presenting its access grant (in the form of
          an Authorization Code, or Refresh Token).</t>



          <t>In addition to the Client authentication parameters,
          if this is a Refresh Token Request, the Client MUST send the additional parameters 
          specified in Section 6 of <xref target="OAuth2.0">OAuth
          2.0</xref>.
          Otherwise the Client
          MUST send the request parameter for the Access Token Endpoint as
          specified in section 4.1.3 of <xref target="OAuth2.0">OAuth
          2.0</xref>.</t>

          <t></t>
        </section>

        <section anchor="access_token_response" title="Access Token Response">
          <t>After receiving and verifying a valid and authorized Access Token
          Request from the Client, the Authorization Server returns a successful
          response that includes an Access Token and an ID Token.  The
          parameters in the successful response are defined in Section 4.1.4
          of <xref target="OAuth2.0">OAuth 2.0</xref>.</t>

          <t>This specification further constrains that only <xref
          target="OAuth.Bearer">Bearer Tokens</xref> are issued at the
          Token Endpoint. The OAuth 2.0 response parameter "<spanx
          style="verb">token_type</spanx>" MUST be set to "<spanx
          style="verb">Bearer</spanx>".</t>

          <t>In addition to the OAuth 2.0 response parameters, the following
          parameters MUST be included in the response if the Authorization
          Request <spanx style="verb">scope</spanx> parameter contains
          <spanx style="verb">openid</spanx>:</t>

          <t><list style="hanging">
            <t hangText="id_token">The ID Token value associated with the
            authentication session.</t>
          </list></t>

          <t></t>

          <figure>
            <preamble>Following is a non-normative example:</preamble>

            <artwork><![CDATA[{
 "access_token": "SlAV32hkKG",
 "token_type": "Bearer",
 "refresh_token": "8xLOxBtZp8",
 "expires_in": 3600,
 "id_token": "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso"
}]]></artwork>
          </figure>

          <t>As in the <xref target="OAuth2.0">OAuth 2.0</xref>, Clients
          SHOULD ignore unrecognized response parameters.</t>
        </section>

        <section title="Token Error Response">
          <t>If the token request is invalid or unauthorized, the
          Authorization Server constructs the error response. The parameters
          of the Token Error Response are defined as in Section 5.2 of <xref
          target="OAuth2.0">OAuth 2.0</xref>.</t>
        </section>
      </section>

      <section anchor="check_id_ep" title="Check ID Endpoint">
        <t>The Check ID Endpoint validates ID Tokens and returns a <xref
        target="RFC4627">JSON</xref> object that contains Claims about
        the authentication event associated with the supplied ID Token.</t>
        
        <t>Clients MUST not send encrypted ID Token to the Check ID Endpoint.
        If the Client registers  
        <spanx style="verb">id_token_encrypted_response_algs</spanx> during <xref 
        target="OpenID.Registration">OpenID Connect Dynamic Client Registration 1.0</xref>,
	the Client must decrypt the ID Token, and SHOULD directly verify the ID Token
        per <xref target="id.token.verification">ID Token Verification</xref>.</t>

        <t>This endpoint can be used by Clients that are not able to or do not
        wish to directly handle ID Tokens. In such cases, Clients MAY treat the ID
        Token as an opaque value, and use the Check ID Endpoint to
        retrieve and examine the Claims associated with the ID Token.</t>

        <section title="Check ID Request">
          <t>To request the information about the authentication performed on
          the End-User, Clients MAY send requests with the following parameter to the
             Check ID Endpoint:</t>
             
            <t><list style="hanging">
            <t hangText="access_token">REQUIRED. The ID Token obtained
            from an OpenID Connect Authorization Request. </t>
            </list></t>
             
        </section>

        <section title="Check ID Response">
          <t>The response is a <xref target="RFC4627">JSON</xref> object
          containing the <xref target="id_token">ID Token</xref> Claims.</t>

          <t>Other Claims MAY be requested by specifying the desired ID Token 
          Claims to be returned in an <xref
          target="OpenIDReq">OpenID Request Object</xref> when making an
          Authorization Request.</t>
          <t>The content-type of the response where applicable MUST be
        set to <spanx style="verb">application/json</spanx>.</t>
        </section>

        <section title="Check ID Error Response">
          <t>When an error occurs, an error response is returned with an error
          code defined in Section 3.1 of <xref
          target="OAuth.Bearer">OAuth 2.0 Bearer Tokens</xref>.</t>
        </section>
      </section>

      <section anchor="userinfo_ep" title="UserInfo Endpoint">
        <t>The UserInfo Endpoint is a Protected Resource that
        returns Claims about the authenticated End-User. Claims are
        represented by a JSON object that contains a collection of
        name and value pairs for the Claims.</t>

        <section title="UserInfo Request">
          <t>Clients MAY send requests with the following parameters to the
          UserInfo Endpoint to obtain further information about the End-User.</t>

          <t><list style="hanging">
            <t hangText="access_token">REQUIRED. The Access Token obtained
            from an OpenID Connect Authorization Request. </t>

            <t hangText="schema">REQUIRED. The schema in which the
            data is to be returned. The only defined value is <spanx
            style="verb">openid</spanx>.</t>

            <t hangText="id">This identifier is reserved. It MUST be
            ignored by the endpoint when the <spanx
            style="verb">openid</spanx> schema is used.</t>
          </list></t>
        </section>

        <section title="UserInfo Response">
          <t>If the requested schema is <spanx
          style="verb">openid</spanx>, the response MUST return a
          JSON object that contains the full set or a
          subset of the Claims that are defined below. Additional
          Claims (not specified below) MAY also be returned.</t>

	  <t>
	    If a Claim is not returned, that Claim Name SHOULD be
	    omitted from the JSON object representing the Claims; it
	    SHOULD NOT be present with a null or empty string value.
	  </t>

          <t>The members MAY be represented in multiple languages and scripts.
          To specify the languages and scripts, <xref
          target="RFC5646">BCP47</xref> language tags MUST be added to each
          member names delimited by a <spanx style="verb">#</spanx>, e.g.,
          <spanx style="verb">familyName#ja-Kana-JP</spanx> for expressing
          Family Name in Katakana in Japanese, which is commonly used to index
          and represent the phonetics of the Kanji representation of the same
          represented as <spanx style="verb">familyName#ja-Hani-JP</spanx>.</t>

          <texttable anchor="ClaimTable" title="Reserved Member Definitions">
            <ttcol align="left">Member</ttcol>

            <ttcol align="left">Type</ttcol>

            <ttcol align="left">Description</ttcol>

            <c>user_id</c>

            <c>string</c>

            <c>REQUIRED Identifier for the End-User at the Issuer.</c>

            <c>name</c>

            <c>string</c>

            <c>End-User's full name in displayable form including all name parts,
            ordered according to End-User's locale and preferences.</c>

            <c>given_name</c>

            <c>string</c>

            <c>Given name or first name of the End-User.</c>

            <c>family_name</c>

            <c>string</c>

            <c>Surname or last name of the End-User.</c>

            <c>middle_name</c>

            <c>string</c>

            <c>Middle name of the End-User.</c>

            <c>nickname</c>

            <c>string</c>

            <c>Casual name of the End-User that MAY or MAY not be the same as the
            <spanx style="verb">given_name</spanx>. For instance, a <spanx
            style="verb">nickname</spanx> value of <spanx style="verb">Mike</spanx>
            might be returned alongside a <spanx style="verb">given_name</spanx>
            value of <spanx style="verb">Michael</spanx>.</c>

            <c>profile</c>

            <c>string</c>

            <c>URL of End-User's profile page.</c>

            <c>picture</c>

            <c>string</c>

            <c>URL of the End-User's profile picture.</c>

            <c>website</c>

            <c>string</c>

            <c>URL of End-User's web page or blog.</c>

            <c>email</c>

            <c>string</c>

            <c>The End-User's preferred e-mail address.</c>

            <c>verified</c>

            <c>boolean</c>

            <c>True if the End-User's e-mail address has been verified; otherwise
            false.</c>

            <c>gender</c>

            <c>string</c>

	    <c>The End-User's gender: Values defined by this
	    specification are <spanx style="verb">female</spanx> and
	    <spanx style="verb">male</spanx>.  Other values MAY be used
	    when neither of the defined values are applicable.</c>

            <c>birthday</c>

            <c>string</c>

            <c>The End-User's birthday, represented as a date string in MM/DD/YYYY
            format. The year MAY be <spanx style="verb">0000</spanx>,
            indicating that it is omitted.</c>

            <c>zoneinfo</c>

            <c>string</c>

            <c>String from zoneinfo <xref target="zoneinfo"></xref> time zone
            database. For example, <spanx style="verb">Europe/Paris</spanx> or
            <spanx style="verb">America/Los_Angeles</spanx>.</c>

            <c>locale</c>

            <c>string</c>

            <c>The End-User's locale, represented as a
	    <xref target="RFC5646">BCP47</xref> language tag.
	    This is typically an <xref
            target="ISO639-1">ISO 639-1 Alpha-2</xref> language code in
            lowercase and an <xref target="ISO3166-1">ISO 3166-1
            Alpha-2</xref> country code in uppercase, separated by a dash. For
            example, <spanx style="verb">en-US</spanx> or <spanx style="verb">fr-CA</spanx>.
            As a compatibility note, some implementations have used an
            underscore as the separator rather than a dash, for example,
            <spanx style="verb">en_US</spanx>; Implementations MAY choose to
            accept this locale syntax as well.</c>

            <c>phone_number</c>

            <c>string</c>

            <c>The End-User's preferred telephone number. <xref target="E.164">
            E.164</xref> is RECOMMENDED as the format of this Claim. 
            For example, <spanx
            style="verb">+1 (425)
            555-1212</spanx> or <spanx style="verb">+56 (2) 687 2400</spanx>.</c>

            <c>address</c>

            <c>JSON object</c>

            <c>The End-User's preferred address. The value of the <spanx
            style="verb">address</spanx> member is a <xref
            target="RFC4627">JSON</xref> structure containing some or all of
            the members defined in <xref target="address_claim" />. </c>

            <c>updated_time</c>

            <c>string</c>

            <c>Time the End-User's information was last updated, represented as a
            <xref target="RFC3339">RFC 3339</xref> datetime. For example,
            <spanx style="verb">2011-01-03T23:58:42+0000</spanx>.</c>
          </texttable>

          <t>For privacy reasons, OpenID Providers MAY elect to not provide
          values for some schema elements as part of the
	  <spanx style="verb">openid</spanx> scope.</t>

          <t>The <spanx style="verb">user_id</spanx> Claim in the UserInfo Endpoint response MUST exactly match the 
          <spanx style="verb">user_id</spanx> Claim in the ID Token, before using additional UserInfo Endpoint Claims.</t>
          
          <t>The UserInfo Endpoint MUST return Claims in JSON format unless a
          different format was specified during <xref target="OpenID.Registration">
          OpenID Connect Dynamic Client Registration 1.0</xref>.
	      The UserInfo Endpoint MAY return Claims in
          JWT format, which can be signed and/or encrypted.
	      The UserInfo Endpoint MUST return a content-type header to indicate
          the format that is being returned. The following are accepted content
          types:</t>

          <texttable style="all">
            <ttcol>Content-Type</ttcol>

            <ttcol>Format Returned</ttcol>

            <c>application/json</c>

            <c>plain text JSON object</c>

            <c>application/jwt</c>

            <c>A JWT</c>
          </texttable>

          <figure>
          <preamble>The following is a non-normative example of such a
          response:</preamble>
            <artwork><![CDATA[{
 "user_id": "248289761001",
 "name": "Jane Doe",
 "given_name": "Jane",
 "family_name": "Doe",
 "email": "janedoe@example.com",
 "picture": "http://example.com/janedoe/me.jpg"
}]]></artwork>
          </figure>

          <section title="Address Claim" anchor="address_claim">
	    <t>
	      The components of a physical mailing address. 
	      Implementations MAY return only a subset of the
	      fields of an <spanx style="verb">address</spanx>, depending upon
	      the information available and the End-User's privacy 
	      preferences. For
	      example, the <spanx style="verb">country</spanx> and <spanx 
	      style="verb">region</spanx> might be returned without returning
	      more fine-grained address information.
	    </t>
	    <t>
	      Implementations MAY return just the full address 
	      as a single string in the formatted sub-field, 
	      or they MAY return just the individual component 
	      fields using the other sub-fields, 
	      or they MAY return both. 
	      If both variants are returned, 
	      they SHOULD be describing the same address, 
	      with the formatted address indicating how the 
	      component fields should be combined.
	    </t>
	    <t><list style="hanging">
		<t hangText="formatted">The full mailing address, 
		formatted for display or use with a mailing label. 
		This field MAY contain newlines. This is the 
		Primary Sub-Field for this field, 
		for the purposes of sorting and filtering.</t>
		<t hangText="street_address">
		The full street address component, 
		which may include house number, street name, 
		PO BOX, and multi-line extended street 
		address information. This field MAY contain newlines.</t>
		<t hangText="locality">The city or locality component.</t>
		<t hangText="region">The state, province, 
		prefecture or region component.</t>
		<t hangText="postal_code">The zip code or 
		postal code component.</t>
		<t hangText="country">The country name component.</t>
	      </list>
	    </t>
          </section>
        </section>

        <section title="UserInfo Error Response">
          <t>When an error condition occurs, the UserInfo Endpoint returns
          an Error Response. In addition to the error codes defined in section 3.1 of
          <xref target="OAuth.Bearer">OAuth 2.0 Bearer Tokens</xref>, this specification
          defines the following error codes:</t>

          <t><list style="hanging">
            <t hangText="invalid_schema">The requested schema is invalid or
            unsupported.</t>
          </list></t>
        </section>
      </section>

      <section title="Claim Types">
	<t>The UserInfo Endpoint MAY return the
	following three types of Claims:</t>

	<t><list style="hanging">
	  <t hangText="Normal Claims">Claims that are directly asserted by
	  the OpenID Provider.</t>

	  <t hangText="Aggregated Claims">Claims that are asserted by a
	  Claims Provider other than the OpenID Provider but are returned
	  by OpenID Provider.</t>

	  <t hangText="Distributed Claims">Claims that are asserted by a
	  Claims Provider other than the OpenID Provider but are returned
	  as references by the OpenID Provider.</t>
	</list>The UserInfo endpoint MUST support normal Claims.</t>

	<t>Aggregated and Distributed Claims support is OPTIONAL.</t>

	<section title="Normal Claims">
	  <t>Normal Claims are represented as members in a JSON object. The
	  Claim Name is the member name and the Claim Value is the member
	  value.</t>

	  <t>The following is a non-normative normal Claims response:</t>

	  <figure>
	    <artwork><![CDATA[{
 "name": "Jane Doe"
 "given_name": "Jane",
 "family_name": "Doe",
 "email": "janedoe@example.com",
 "picture": "http://example.com/janedoe/me.jpg"
}]]></artwork>
	  </figure>

	</section>

	<section title="Aggregated and Distributed Claims">
	  <t>Aggregated and distributed Claims are represented by
	  using special <spanx style="verb">_claim_names</spanx> and <spanx style="verb">_claim_sources</spanx> members
	  of the JSON object containing the Claims.</t>

	  <t>
	    <list style="hanging">
	      <t hangText="_claim_names">This value is a JSON object whose member
	      names are the Claim Names for the Aggregated and Distributed
	      Claims. The member values are references to the member names
	      in the <spanx style="verb">_claim_sources</spanx> member from which
	      the actual Claim Values can be retrieved.</t>

	      <t hangText="_claim_sources">This value is a JSON object whose
	      member names are referenced by the member values of the
	      <spanx style="verb">_claim_names</spanx> member. The member values
	      contain sets of Aggregated Claims or reference locations for
	      Distributed Claims. The member values can have one of the
	      following formats depending on whether it is providing
	      Aggregated or Distributed Claims:

	      <list style="hanging">

		<t hangText="Aggregated Claims">A JSON object that MUST
		contain the <spanx style="verb">JWT</spanx> member whose value is a <xref
		target="JWT">JWT</xref> that MUST contain all the Claims
		in the <spanx style="verb">_claim_names</spanx> object that references the
		corresponding <spanx style="verb">_claim_sources</spanx> member. Other members MAY
		be present if they are understood by both parties.

		<list style="hanging">
		  <t hangText="JWT">REQUIRED. JWT Value.</t>
		</list>
		</t>

		<t hangText="Distributed Claims">A JSON object that
		contains the following members and values:

		<list style="hanging">
		  <t hangText="endpoint">REQUIRED. The value is the
		  OAuth 2.0 resource endpoint from which the associated
		  Claim can be retrieved. The endpoint URL MUST return
		  the Claim as a JWT.</t>

		  <t hangText="access_token">OPTIONAL. Access Token
		  enabling retrieval of the Claims from the endpoint URL
		  by using the <xref target="OAuth.Bearer">OAuth 2.0
		  Bearer</xref> scheme. Claims SHOULD be requested using
		  the Authorization Request header field and Claims
		  Sources MUST support this method. If the Access Token
		  is not available, Clients MAY need to retrieve the
		  Access Token out of band or use an a priori Access
		  Token that was negotiated between the Claim Source and
		  Client, or the Claim Source MAY reauthenticate the
		  End-User and/or reauthorize the Client.</t>

		</list></t>
	      </list>
	      Other members MAY be present, if understood by both
	      parties.</t>
	  </list></t>

	  <t>The following is a non-normative response with Aggregated
	  Claims:</t>

	  <t><figure>
	    <artwork><![CDATA[Claims Provider A contains the following Claims for Jane Doe:
{
 "address": {
   "street_address": "1234 Hollywood Blvd.",
   "locality": "Los Angeles",
   "region": "CA",
   "postal_code": "90210",
   "country": "US"},
 "phone_number": "+1 (310) 123-4567"
}

Claims Provider A signs the JSON Claims, resulting in a signed JWT:
jwt_header.jwt_part2.jwt_part3

Authorization Server returns Jane Doe's aggregated Claims from Claims Provider A: 
{
 "name": "Jane Doe",
 "given_name": "Jane",
 "family_name": "Doe",
 "birthday": "01/01/2001",
 "eye_color": "blue",
 "email": "janedoe@example.com",
 "_claim_names": {
  "address": "src1",
  "phone_number": "src1"
 },
 "_claim_sources": {
  "src1": {"JWT": "jwt_header.jwt_part2.jwt_part3"}
 }
}]]></artwork>
	  </figure></t>

	  <t>The following is a non-normative response with Distributed
	  Claims:</t>

	  <t><figure>
	    <artwork><![CDATA[Claims Provider A (Jane Doe's Bank) contains the following Claims for Jane Doe:
{
 "shipping_address": {
   "street_address": "1234 Hollywood Blvd.",
   "locality": "Los Angeles",
   "region": "CA",
   "postal_code": "90210",
   "country": "US"},
 "payment_info": "Some_Card 1234 5678 90123 4562",
 "phone_number": "+1 (310) 123-4567"
}

A Claims Provider B (Credit Agency) contains the following Claims for Jane Doe:
{
 "credit_score": "650"
}

Authorization Server returns Jane Doe's Claims along with the Distributed Claims from
Claims Provider A and B by sending the Access Tokens and URL locations where the Claims
may be retrieved:
{
 "name": "Jane Doe",
 "given_name": "Jane",
 "family_name": "Doe",
 "email": "janedoe@example.com",
 "birthday": "01/01/2001",
 "eye_color": "blue",
 "_claim_names": {
  "payment_info": "src1",
  "shipping_address": "src1",
  "credit_score": "src2"
 },
 "_claim_sources": {
  "src1": {"endpoint": "https://bank.example.com/claimsource"},
  "src2": {"endpoint": "https://creditagency.example.com/claimshere", "access_token": "ksj3n283dke"}
 }
}]]></artwork>
	  </figure></t>
	</section>
      </section>

    </section>

    <section anchor="Serializations" title="Serializations">
      <t>Parameter names and values MAY be JSON serialized into a JSON
      structure.</t>

      <section anchor="js" title="JSON Serialization">
        <t>The parameters are serialized into a JSON structure by adding each
        parameter at the highest structure level. Parameter names and string
        values are included as JSON strings. Numerical values are included as
        JSON numbers. Each parameter MAY have JSON Structure as its value.</t>

        <figure>
          <preamble>Following is a non-normative example of such
          serialization:</preamble>

          <artwork><![CDATA[{
 "access_token":"SlAV32hkKG",
 "expires_in":3600,
 "refresh_token":"8xLOxBtZp8"
}]]></artwork>
        </figure>
      </section>
    </section>

    <section anchor="sigenc" title="Signatures and Encryption">
      <t>Depending on the transport through which the messages are sent, the
      integrity of the message may not be guaranteed and the originator of the
      message may not be authenticated. To mitigate these risks, OpenID
      Connect messages MAY utilize <xref target="JWS">JSON Web Signature
      (JWS)</xref> to sign the content.</t>

      <t>To achieve message confidentiality, OpenID Connect messages MAY use
      <xref target="JWE">JSON Web Encryption (JWE)</xref> to encrypt the
      content.</t>
    
    <t>When the message is both signed and 
      encrypted, it MUST be
      <xref target="signing_order">signed first then encrypted</xref>.</t>

       <section anchor="sigenc.alg" title="Supported Algorithms">
       <t>The server advertises its supported signing and encryption algorithms
       in its discovery document. The related elements are:</t>
      
      <t><list style="hanging">
	  <t hangText="userinfo_algs_supported">
	    A JSON array containing a list of the <xref target="JWS">JWS</xref> and 
	    <xref target="JWE">JWE</xref> signing and encryption algorithms
            supported by the UserInfo Endpoint.</t>
           
          <t hangText="id_token_algs_supported">
	    A JSON array containing a list of the <xref target="JWS">JWS</xref> and 
	    <xref target="JWE">JWE</xref> signing and encryption algorithms
	    supported by the Authorization Server for the ID Token.</t>
           
          <t hangText="request_object_algs_supported">
	    A JSON array containing a list of the <xref target="JWS">JWS</xref> and 
	    <xref target="JWE">JWE</xref> signing and encryption algorithms
	    supported by the Authorization Server for 
            the <xref target="OpenIDReq">OpenID Request Object</xref>. Servers SHOULD support 
	    <spanx style="verb">HS256</spanx>.</t>
      
	  <t hangText="token_endpoint_auth_algs_supported">
	    A JSON array containing a list of the <xref target="JWS">JWS</xref> 
	    signing algorithms
	    supported by the Token Endpoint for the
	    <spanx style="verb">private_key_jwt</spanx> method.
            Servers SHOULD support <spanx style="verb">RS256</spanx>.</t>

      </list></t>
      
      <t>The Client registers its required algorithms for Signing and Encryption 
      using the following Registration parameters:</t>
      <t><list style="hanging">
             <t hangText="require_signed_request_object">OPTIONAL.  The 
             <xref target="JWS">JWS</xref> signature algorithm that MUST be required 
             by the Authorization Server. All OpenID Request Objects from
             this <spanx style="verb">client_id</spanx> MUST be rejected if not signed by this algorithm.</t>
              
             <t hangText="userinfo_signed_response_algs">OPTIONAL.  The 
             <xref target="JWS">JWS</xref> signature 
             algorithm required for userinfo responses. 
             If this is specified the response will be 
             <xref target="JWT">JWT</xref> serialized.</t>
             
             <t hangText="userinfo_encrypted_response_algs">OPTIONAL.  A space separated
             list of the <xref target="JWE">JWE</xref> 
             <spanx style="verb">alg</spanx> and <spanx style="verb">enc</spanx>
             algorithms required for userinfo responses. If this is requested in 
             combination with signing, the response 
             MUST be <xref target="signing_order">signed first then encrypted</xref>.
             If this is specified, the response will be 
             <xref target="JWT">JWT</xref> serialized.</t>
             
             <t hangText="id_token_signed_response_algs">OPTIONAL.  The 
             <xref target="JWS">JWS</xref> signing algorithm required 
             for <spanx style="verb">id_token</spanx> issued to this <spanx style="verb">client_id</spanx>. The default if not specified 
             is <spanx style="verb">HS256</spanx> using the provided <spanx style="verb">client_secret</spanx> as the shared key.</t>
             
             <t hangText="id_token_encrypted_response_algs">OPTIONAL.  A space separated 
             list of the <xref target="JWE">JWE</xref> 
             <spanx style="verb">alg</spanx> and <spanx style="verb">enc</spanx> 
             algorithms required for <spanx style="verb">id_token</spanx> issued to this <spanx style="verb">client_id</spanx>. 
             If this is requested the response MUST be signed then encrypted. 
             The default if not specified is no encryption.</t>
      </list></t>
    </section>
    <section anchor="sigenc.key" title="Keys">
      
      <t>The Server advertises its supported signing and encryption algorithms
      in its discovery document. The related elements are:</t>
      
      <t>The Provider provides its public Keys during Discovery in the following elements:</t>
      <t><list style="hanging">
        <t hangText="jwk_url">
          URL of the OP's <xref target="JWK">JSON Web Key</xref> document
	  that contains the Server's signing key
          that is used for JWS signing the JWT. 
          It MAY also be used by the Client to JWE encrypt the JWT
          to the Server if <spanx style="verb">x509_encryption_url</spanx> or 
          <spanx style="verb">jwk_encryption_url</spanx> is not specified, 
          but this is discouraged. A separate encryption key 
          SHOULD be used.</t>
          
        <t hangText="jwk_encryption_url">          
          URL of the OP's <xref target="JWK">JSON Web Key</xref> document
	  that contains the Server's encryption key
          that is used by the Client to JWE encrypt the JWT to the Server. 
          If it is not present, its value 
          is the same as the URL provided by <spanx style="verb">jwk_url</spanx>.</t>

        <t hangText="x509_url">
          URL of the OP's X.509 certificates in PEM format 
          that are used by the Server for Signing the JWT. 
          It MAY also be used by the Client to JWE Encrypt the JWT
          to the Server if <spanx style="verb">x509_encryption_url</spanx>
          is not specified 
          and the key usage includes <spanx style="verb">keyEncipherment</spanx>.</t>
          
        <t hangText="x509_encryption_url"> 
          URL of the OP's X.509 certificates in PEM format
          that contains the Server's encryption key
          that is used by the Client to JWE encrypt the JWT 
          to the Server. If it is not present, the URL provided by the
          <spanx style="verb">x509_url</spanx> is used instead. The certificate 
          MUST include <spanx style="verb">keyEncipherment</spanx>
          in the key usage.</t>

      </list></t>
      <t>The Client provides its public Keys during Registration, in the following 
      elements:</t>
      <t><list style="hanging">      
            <t hangText="jwk_url">OPTIONAL. URL for the Client's <xref
            target="JWK">JSON Web Key</xref> document that is used for 
            <xref target="JWS">JWS</xref>
            signing of the Request Objects.
            If <spanx style="verb">jwk_encryption_url</spanx> is not 
            provided, it is also used by the Server 
            for <xref target="JWE">JWE</xref> encryption 
            of <xref target="JWT">JWT</xref> to the Client.
            </t>

            <t hangText="jwk_encryption_url">OPTIONAL. URL for the Client's <xref
            target="JWK">JSON Web Key</xref>. 
            It is used by the Server for <xref target="JWE">JWE</xref> 
            encryption of the response objects.</t>

            <t hangText="x509_url">OPTIONAL.  URL for the Client's PEM encoded X.509
            Certificate or Certificate chain. 
            It is used by the Client for <xref target="JWS">JWS</xref> 
            signing of the request objects.
            If <spanx style="verb">x509_encryption_url</spanx> is not 
            present, it is also used for <xref target="JWE">JWE</xref> encryption 
            of the <xref target="JWT">JWT</xref> to the Client 
            if the key usage includes <spanx style="verb">keyEncipherment</spanx>.</t>
            
            <t hangText="x509_encryption_url">
            OPTIONAL. URL for the Client's PEM encoded 
            X.509 Certificate or Certificate chain, used for 
            <xref target="JWE">JWE</xref> encryption 
            of <xref target="JWT">JWT</xref> to the Client. </t>
      
      
      </list></t>      
         <t>If keys are specified in both x509 and jwk, they MUST be the same keys.</t>
         <t>Key algorithms like Elliptic Curve signing and key agreement require separate keys for 
         signing and encryption for security. For RSA a single key MAY be used for both,
         but it is good practice to separate them.</t>
       </section>  
      

      <section anchor="sigs" title="Signing">
        <t>The signing party MUST select a signature algorithm 
        based on the supported algorithms of the recipient in <xref
        target="sigenc.alg"></xref>.</t>
        
        <t><list style="hanging">
          <t hangText="Symmetric Signatures">
            When using HMAC Signatures, the <spanx style="verb">alg</spanx>
             Claim of the JWS header MUST be set to the appropriate algorithm
             as defined in <xref target="JWS">JSON Web Signature</xref>. 
            The <spanx style="verb">client_secret</spanx> MUST 
            be used as the signature key. 
          </t>
          <t hangText="Asymmetric Signatures">
            When using RSA or ECDSA Signatures, 
            the <spanx style="verb">alg</spanx>
             Claim of the JWS header MUST be set to the appropriate algorithm
             as defined in <xref target="JWS">JSON Web Signature</xref>.
            The private key MUST be the one associated with the 
            Public Signing Key provided in
            <xref target="sigenc.key"></xref>. 
            If there are multiple keys in the referenced JWK document, the
            <spanx style="verb">kid</spanx> MUST be specified in the JWS header. 
            If there are multiple certificates at the referenced certificate location,
	    then <spanx style="verb">x5t</spanx> MUST be specified in the JWS header.
            The key usage of the respective keys MUST include signature. 
            In particular, if the key found through <spanx style="verb">x5u</spanx> is used, the 
            key usage MUST include 
            <spanx style="verb">digitalSignature</spanx>. 
          </t>
        </list></t>
      </section>

      <section anchor="enc" title="Encryption">
        <t>The encrypting party MUST select an encryption algorithm
        based on the supported algorithms of the recipient in <xref
        target="sigenc.alg"></xref>.</t>

        <t>All JWT MUST be signed before encryption to provide integrity and
        to verify the Issuer.</t>
        <t>Symmetric Encryption algorithms that provide an integrated integrity check MUST 
        be used if supported by both the sender and receiver. The
	<spanx style="verb">A128GCM</spanx> and <spanx style="verb">A256GCM</spanx>
        algorithms support this.</t>
        
        <t><list style="hanging">
          <t hangText="Symmetric Encryption">
            Use the <spanx style="verb">client_secret</spanx> to KeyWrap a random 
            <spanx style="verb">Content Encryption Key</spanx> to be used for encrypting 
            the signed JWT.  
          </t>
          <t hangText="Asymmetric Encryption RSA">
            Use the link registered/discovered in <xref target="sigenc.key"></xref>
            to retrieve the relevant key.
            The 
            <spanx style="verb">jwk_encryption_url</spanx> 
            or 
            <spanx style="verb">x509_encryption_url</spanx> 
            link MUST be used if provided.
            If there are multiple keys in the referenced JWK document, the
            <spanx style="verb">kid</spanx> MUST be specified in the JWS header. 
            If there are multiple certificates at the referenced certificate location,
	    then <spanx style="verb">x5t</spanx> MUST be specified in the JWS header.
            Use the supported RSA KeyWrap algorithm to KeyWrap a random 
            <spanx style="verb">Content Encryption Key</spanx> to be used for encrypting 
            the signed JWT.
            The key usage of the respective keys MUST include encryption. 
            In particular, if the key found through <spanx style="verb">x5u</spanx> is used, 
            the key usage MUST include <spanx style="verb">keyEncipherment</spanx>.
          </t>
          <t hangText="Asymmetric Encryption Elliptic Curve">
            Create an ephemeral Elliptic Curve public key for the <spanx style="verb">epk</spanx>
            element of the JWE header. 
            Use the link registered/discovered in <xref target="sigenc.key"></xref>
            to retrieve the relevant key.
            The 
            <spanx style="verb">jwk_encryption_url</spanx> 
            or 
            <spanx style="verb">x509_encryption_url</spanx> 
            link MUST be used if provided.
            If there are multiple keys in the referenced JWK document, the
            <spanx style="verb">kid</spanx> MUST be specified in the JWE header. 
            If there are multiple certificates at the referenced certificate location,
            then <spanx style="verb">x5t</spanx> MUST be specified in the JWS header.  
            Use the ECDH-ES algorithm to KeyWrap a random 
            <spanx style="verb">Content Encryption Key</spanx> to be used for encrypting 
            the signed JWT.
            The key usage of the respective keys MUST include encryption.
            In particular, if the key found through <spanx style="verb">x5u</spanx> is used,
            the key usage MUST include <spanx style="verb">keyEncipherment</spanx>.

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

    <section title="Verification">
      <section title="Authorization Request Verification">
	      <t>Authorization Request Verification consists of two main 
		  steps. (1) Encryption and Signature validation of 
		  the value of <spanx style="verb">request</spanx> or 
		  the content of <spanx style="verb">request_uri</spanx>,  
		  (2) Parameter verification. </t>
		  
          <t>If an OpenID Request Object was sent in the <spanx 
          style="verb">request</spanx> parameter or by reference in the
          <spanx style="verb">request_uri</spanx> parameter, the 
          Request Object MUST verify as 
		  <xref target="JWS">JWS</xref> or <xref target="JWE">JWE</xref> 
		  objects that are encoded in the <xref target="JWT">JWT</xref>.</t>

         <section title="Encrypted Request Object">
          
          <t>If the Authorization Server has advertised JWE encryption algorithms
          in the <spanx style="verb">request_object_algs_supported</spanx> element of its 
          Discovery Document, these are used by the Client to JWE encrypt the JWT.</t>
          
          <t>The Authorization Server MUST decode the JWT in accordance with
          <xref target="JWE">JSON Web Encryption</xref> specification. 
		  The result MAY be either OpenID Request Object or a JWS Signed JWT. 
		  In the latter case, the signature verification MUST be performed 
		  as defined in <xref target="signed.req.obj.var">Signed Request Object</xref>. </t>
          
          <t>The Authorization Server MUST return the error if there is a decryption error.</t>
         </section>
            
	 <section anchor="signed.req.obj.var" title="Signed Request Object">

          <t>To perform Signature Verification, 
          the <spanx style="verb">alg</spanx> parameter in the JWT header MUST match the value
          of the <spanx style="verb">require_signed_request_object</spanx> set during
          <xref target="OpenID.Registration">Client Registration</xref> or otherwise 
		  pre-registered value.</t>
          
          <t>The signature must be validated against the key registered for that <spanx style="verb">client_id</spanx>
          and algorithm, in accordance with the 
          <xref target="JWS">JSON Web Signature</xref> specification.</t>
          
          <t>The Authorization Server MUST return the error authorization 
            response if there is a signature validation error.</t>
	 </section>
	 <section anchor="req.obj.veri" title="Parameter Verification">
		  <t>The Authorization Server MUST construct the Authorization Request Message 
		  from the OpenID Request Object 
		  and other parameters. Note that if the same parameter exists both in 
		  the OpenID Request Object and other parameters, the former takes precedence. 
		  Using this Authorization Request Message, the Authorization Server performs 
		  the following steps of the request verification: 
		  </t>
		  <t><list style="numbers">
		  <t>The Authorization Server MUST understand all the parameters 
		  except for the unsupported Claims. If there is any parameters that 
		  it does not understand except for the unsupported Claims, it MUST return 
		  an error response. </t>
		  <t>The Authorization Server MUST verify that all the 
		  OAuth 2.0 variables according to OAuth 2.0. </t>
		  <t>The Authorization Server MUST verify that all the required parameters 
		  are present. </t>
                  <t>If the <spanx style="verb">user_id</spanx> Claim
		  as a member of <spanx style="verb">id_token</spanx> element
                  is requested with a specific value, 
                  the Authorization Server MUST only send a positive response if that user 
                  has an active session with the authorization server. The Authorization 
                  server MUST not reply with an ID Token or Access Token for a different user, 
                  even if they have an active session with the Authorization Server. 
                  </t>
                  <t>
                  If the <spanx style="verb">acr</spanx> Claim is requested
		  as a required Claim
                  in the <spanx style="verb">id_token</spanx> member 
                  with <spanx style="verb">values</spanx> as a parameter, 
                  the Authorization Server MUST return an <spanx style="verb">acr</spanx> 
                  Claim value that matches one of the requested values. 
                  The Authorization 
                  server MAY ask the user to re-authenticate with additional factors 
                  to meet the requirements. If this is a required Claim and the 
                  requirement cannot be met, then the Authorization Server MUST return an error.
                  The Client MAY make this Claim optional by including "optional": true in the 
                  <spanx style="verb">acr</spanx> Claim request. If the Claim is optional and the requested value for 
                  the user cannot be provided, the Authorization server SHOULD return 
                  the session's current <spanx style="verb">acr</spanx> as
                  the value of the <spanx style="verb">acr</spanx> Claim. 
                  If the Claim is optional, the Authorization server is not required to
                  provide this Claim in its response.
                  </t>
		  </list></t>
		  <t>If the Authorization Server encounters any error, 
		  it MUST return the error response.</t>

	 </section>
      </section>

      <section anchor="id.token.verification" title="ID Token Verification">
        <t>To verify the validity of ID Token in the Authorization or Token Endpoint Response, the Client
        MUST do the following:</t>

        <t><list style="numbers">
            <t>If the Client has provided an
            <spanx style="verb">id_token_encrypted_response_algs</spanx>
            parameter during Registration, decrypt the <xref target="JWE">id_token</xref>,
            using the key pair specified during Registration.</t>
            
            <t>The Client MUST validate that the <spanx style="verb">client_id</spanx> in the 
            <spanx style="verb">aud</spanx> (audience) Claim is one
             it has registered for the Issuer identified by the value in the 
             <spanx style="verb">iss</spanx> (issuer) Claim.
              The ID Token MUST be rejected if the value of 
              <spanx style="verb">aud</spanx> (audience) is not valid for the 
              Issuer.</t>
             
            <t>The Client MUST verify the ID Token signature according to Section 5
            of <xref target="JWS">JWS</xref> using the algorithm specified in the 
            <spanx style="verb">alg</spanx> parameter of the JWT header.</t>
            
            <t>The value of <spanx style="verb">alg</spanx> SHOULD be the algorithm sent 
            by the Client 
            in the <spanx style="verb">id_token_signed_response_algs</spanx> parameter 
            during Registration.</t>
            
            <t>If the <spanx style="verb">alg</spanx> parameter of the JWT header is one of 
            <spanx style="verb">HS256</spanx>, <spanx style="verb">HS384</spanx>,
	    or <spanx style="verb">HS512</spanx>,
	    the <spanx style="verb">client_secret</spanx> for the 
            <spanx style="verb">client_id</spanx> contained in the 
            <spanx style="verb">aud</spanx> (audience) Claim is used to validate the 
            signature.</t> 
            
            <t>For other Signing algorithms the Client must use the signing key provided
             in Discovery
            by the Issuer exactly matching the value of the 
            <spanx style="verb">iss</spanx> (issuer) Claim.</t>

            <t>The current time MUST be less than the value of the 
            <spanx style="verb">exp</spanx> Claim.</t>
            
            <t>The value of the <spanx style="verb">nonce</spanx>
             Claim MUST be checked to verify that
            it is the same value as the one that was sent in the Authorization
            Request. The Client SHOULD check the <spanx style="verb">nonce</spanx> value for replay attacks.
            The precise method for detecting replay attacks is Client specific.</t>
            
            <t>If the <spanx style="verb">acr</spanx> Claim was requested, the 
            Client SHOULD check that the asserted Claim Value is appropriate.
            The meaning and processing of  
            <spanx style="verb">acr</spanx> Claim Values is out of scope for this specification.</t>
            
            <t>If the <spanx style="verb">auth_time</spanx> Claim was requested, the 
            Client SHOULD check the value 
            and request re-authentication if it determines too much time has elapsed 
            since the last user authentication.</t>
            
          </list></t>

        
      </section>

      <section title="Check ID Request Verification">
        <t>The Authorization Server MUST check that the 
        <spanx style="verb">access_token</spanx> is 
        present in the request and if it is signed, it MUST verify
        the signature according to Section 5 of <xref
        target="JWS">JWS</xref>.</t>
        <t>If the JWS algorithm is symmetric, such as the default <spanx style="verb">HS256</spanx> for 
        <spanx style="verb">id_token</spanx>, the <spanx style="verb">client_secret</spanx> for the 
            <spanx style="verb">client_id</spanx> contained in the 
            <spanx style="verb">aud</spanx> (audience) Claim MUST be used to validate the 
            signature.</t> 
        <t>The Authorization Server MUST check that the <spanx style="verb">id_token</spanx>
        provided as the 
        <spanx style="verb">access_token</spanx> contains
        all REQUIRED Claims.</t>
      </section>

      <section title="Check ID Response Verification">
      <t>If the Client does not directly verify the ID Token signature, it
        MUST make a request to the Check ID Endpoint to validate the ID Token.</t>
        <t>To verify the validity of the Token response, the Client MUST do
        the following:</t>

        <t><list style="numbers">
            <t>Check that the OP that responded was really the intended OP.</t>
            <t>The Client MUST validate that the <spanx style="verb">client_id</spanx> 
            in the <spanx style="verb">aud</spanx> (audience) Claim is one
             it has registered for the Issuer identified by the value in the 
             <spanx style="verb">iss</spanx> (issuer) Claim.
              The ID Token MUST be rejected if the value of 
              <spanx style="verb">aud</spanx> (audience) is not valid for the 
              Issuer.</t>
              
              <t>The value of the <spanx style="verb">iss</spanx> (issuer)
               Claim must match the Issuer for the Check ID 
               Endpoint"</t>

            <t>The current time MUST be less than the value of the 
            <spanx style="verb">exp</spanx> Claim.</t>
            
            <t>The value of the <spanx style="verb">nonce</spanx> Claim 
            MUST be checked to verify that
            it is the same value as the one that was sent in the Authorization
            Request. The Client SHOULD check the <spanx style="verb">nonce</spanx> value for replay attacks.
            The precise method for detecting replay attacks is Client specific.</t>
            
            <t>If the <spanx style="verb">acr</spanx> Claim was requested, the 
            Client SHOULD check that the asserted Claim Value is appropriate.
	    The meaning and processing of 
            <spanx style="verb">acr</spanx> Claim Values is out of scope for this specification.</t>
            
            <t>If the <spanx style="verb">auth_time</spanx> Claim was requested, the 
            Client SHOULD check the value 
            and request re-authentication if it determines too much time has elapsed 
            since the last user authentication.</t>

            <t>The Check ID Endpoint has not returned an error for
            the ID Token being expired or invalid.</t>

            <t>Check that the <spanx style="verb">iss</spanx> (issuer) is equal to
            that of the pre-configured or discovered Issuer Identifier for
            the user session. </t>
            
          </list></t>

      </section>

      <section title="UserInfo Response Verification">

        <t>To verify the validity of the UserInfo response, the Client MUST do
        the following:</t>

        <t><list style="numbers">
            <t>If the Client has provided a 
            <spanx style="verb">userinfo_encrypted_response_algs</spanx>
            parameter during Registration, decrypt the <xref target="JWE">id_token</xref>,
            using the key pair specified during Registration.</t>
            
            <t>If the response was signed, the Client SHOULD validate the
            signature according to Section 5 of <xref
            target="JWS">JWS</xref>.</t>

            <t>Check that the OP that responded was really the intended OP
            through a TLS/SSL server certificate check, per
	    <xref target="RFC6125">RFC 6125</xref>.</t>
          </list></t>
      </section>

    </section>

    <section anchor="stringops" title="String Operations">

      <t>
	Processing some OpenID Connect messages requires comparing
	values in the messages to known values. For example, the Claim
	Names returned by the UserInfo Endpoint might be compared to
	specific Claim Names such as <spanx
	style="verb">user_id</spanx>.  Comparing Unicode strings,
	however, has significant security implications.
      </t>
      <t>
	Therefore, comparisons between JSON strings and other Unicode
	strings MUST be performed as specified below:

	<list style="numbers">

          <t>
	    Remove any JSON applied escaping to produce an array of
	    Unicode code points.
	  </t>
          <t>
	    <xref target="USA15">Unicode Normalization</xref> MUST NOT
	    be applied at any point to either the JSON string or to
	    the string it is to be compared against.
	  </t>
          <t>
	    Comparisons between the two strings MUST be performed as a
	    Unicode code point to code point equality comparison.
	  </t>

        </list>
      </t>
      <t>
	In several places, this specification uses space delimited
	lists of strings.  In all such cases, only the ASCII space
	character (0x20) MAY be used for this purpose.
      </t>

    </section>

    <section anchor="related" title="Related Specifications">
	  <t>This specification is an abstract specification. It needs to be 
	  bound to a protocol to be used in practice. One such example of 
	  protocol binding is:
      <list style="symbols">
          <t><xref target="OpenID.Standard">OpenID Connect Standard 1.0</xref>
          - Protocol binding for the full set of OpenID Connect messages</t>
	  </list>
	   </t>
	  
      <t>These related OpenID Connect specifications MAY OPTIONALLY be used in
      combination with this specification to provide additional functionality:
      <list style="symbols">

          <t><xref target="OpenID.Discovery">OpenID Connect Discovery
          1.0</xref> - Dynamic discovery for user and Authorization Server 
          endpoints and information</t>

          <t><xref target="OpenID.Registration">OpenID Connect Dynamic Client
          Registration 1.0</xref> - Dynamic registration of OpenID Connect
          Clients with OpenID Providers</t>

          <t><xref target="OpenID.Basic">OpenID Connect Basic Client 1.0</xref> -
          Protocol binding for a subset of the OpenID Connect Messages
          that is intended for use by basic Relying Parties.</t>

          <t><xref target="OpenID.Session">OpenID Connect Session Management
          1.0</xref> - Session management for OpenID Connect sessions</t>
        </list></t>
    </section>

    <section anchor="security_considerations" title="Security Considerations">
      <t><xref target="OAuth.Threat">OAuth 2.0 Threat Model and 
      Security Considerations</xref> provides an extensive list of threats and controls 
	  that applies to this standard as well. In addition, this standard provides 
	  additional control measures listed below. </t>
	  
	  <section anchor="request_disclosure" title="Request Disclosure">
	  <t>If appropriate measures are not taken, a request may be disclosed to 
	  an attacker posing security and privacy threat.</t>
	  <t>In addition to what is stated in section 5.1.1 of the <xref target="OAuth.Threat" />, 
	  this standard provides a way to provide the confidentiality of the request 
      end to end through the 
	  use of <spanx style="verb">request</spanx> or <spanx style="verb">request_uri</spanx>
	  parameters, where the content of the <spanx style="verb">request</spanx>
	  is an encrypted JWT with the appropriate key and cipher.  
      This works even against a compromised user-agent in the case of indirect request. </t>
	  </section>
	   
	  <section anchor="server_masquerading" title="Server Masquerading">
	  <t>A malicious Server may masquerade as the legitimate server 
	  using various means. To detect such an attack, the Client needs to authenticate 
	  the server. </t>
	  <t>In addition to what is stated in section 5.1.2 of the <xref target="OAuth.Threat" />, 
	  this standard provides a way to authenticate the Server through either the 
	  use of Signed or Encrypted JWT (JWS and JWE) 
	  with an appropriate key and cipher.</t> 
	  </section>
	  
      <section anchor="token_manufacture"
               title="Token Manufacture/Modification">
        <t>An Attacker may generate a bogus token or modify the token content 
		(such as the authentication or 
		attribute statements) of an existing parseable token, causing the RP to grant 
		inappropriate access to the Client. For example, an Attacker may modify 
		the parseable token to extend the validity period; a Client may modify the 
		parseable token to have access to information that they should not be able to view.
        </t>
        <t>There are two ways to mitigate this attack:</t>

        <t><list style="numbers">
            <t>The token can be digitally signed by the OP. The Relying
            Party SHOULD check the digital signature to verify that it was
            issued by a legitimate OP.</t>

            <t>The token can be sent over a protected channel such as
            TLS 1.2 <xref target="RFC5246">RFC 5246</xref>
	    and/or TLS 1.0 <xref target='RFC2246' />. 
            In order to protect the integrity of the token from
            malicious attack, the Server MUST be authenticated, per
			<xref target="RFC6125">RFC 6125</xref>. In this
            specification, the token is always sent over TLS/SSL protected
            channel. Note however, that this measure is only applicable 
			to the third party attacker and is not applicable to the case 
			where the Client is the attacker. </t>
          </list></t>
      </section>

      <section anchor="response_disclosure" title="Server Response Disclosure">
	    <t>Server response may contain authentication and attribute 
		statements that include sensitive Client information. Disclosure of the 
		response contents can make the Client vulnerable to other types of 
		attacks.</t>
		
        <t>The server response disclosure can be mitigated in the following two
        ways:
          <list style="numbers">
            <t>Using the <spanx style="verb">code</spanx> response type. The response is sent over a TLS/SSL protected 
            channel, where the Client is authenticated by the
	    <spanx style="verb">client_id</spanx> and 
            <spanx style="verb">client_secret</spanx>.</t>

            <t>For other response types,
	    the signed response can be encrypted with the Client's 
            public key or a shared secret as an encrypted JWT (JWE) 
	        with an appropriate key and cipher.</t>
          </list></t>
      </section>

      <section anchor="server_response_repudiation" title="Server Response Repudiation">
	    <t>A response may be repudiated by the server if the proper mechanisms are not in place. 
		For example, if a Server does not digitally sign a response, the Server can claim that it was not 
        generated through the services of the Server.</t>
		
        <t>To mitigate this threat, the response may be digitally signed by
        the Server using a key that supports non-repudiation. The Client SHOULD check
        the digital signature to verify that it was issued by a legitimate
        Server and the integrity is intact.</t>
      </section>
	  
	  <section anchor="request_repudation" title="Request Repudiation">
	    <t>Since it is possible for a 
		compromised or malicious Client to send request to a wrong party,  
		a Client that was authenticated 
		using only a bearer token can repudiate any transaction.
		</t>
        <t>To mitigate this threat, the Sever MAY require that the 
		request to be digitally signed by
        the Client using a key that supports non-repudiation. 
		The Server SHOULD check
        the digital signature to verify that it was issued by a legitimate
        Client and the integrity is intact.</t>
	  </section>

      <section anchor="access_token_redirect" title="Access Token Redirect">
	    <t>An Attacker uses the access token generated for one resource to 
		obtain access to a second resource.
		</t>
        <t>To mitigate this threat, the access token should be audience 
	    and scope restricted. One way of implementing it is to include
        the identifier of the resource for whom it was generated as audience. 
        The resource verifies that
        incoming tokens include its identifier as the audience of the
        token.</t>
      </section>

      <section anchor="token_reuse" title="Token Reuse">
	<t>An Attacker attempts to use a one-time use token such as
	an Authorization Code that has
        been used once with the intended Resource. </t>
        <t>To mitigate this threat, the token SHOULD include a timestamp 
		and a short lifetime of 
        validity. The Relying Party checks the timestamp and lifetime values
        to ensure that the token is currently valid.</t>
		<t>Alternatively, the server may record the state of the use of 
		the token and check the status for each request. </t>
      </section>

      <section anchor="auth_code_capture"
               title=" Eavesdropping or leaking authorization codes (Secondary Authenticator Capture)">
        <t>In addition to the attack patterns described in 4.4.1.1 of OAuth SC, 
		it can be captured in the User-Agent where the TLS
        session is terminated if the User-Agent is infested
        by malware. </t>
		
		<t>However, capturing it is not useful as long as the profile
        uses either Client authentication or the Response encryption.</t>
      </section>

      <section anchor="token_substitution" title="Token Substitution">
	    <t>A user may attempt to impersonate a more 
        privileged user by subverting the communication channel between the 
        Token Endpoint and Client, for example by reordering the messages, 
		to convince the Token Endpoint 
        that his or her authorization grant corresponds to the grant sent on 
        behalf of the more privileged user. </t>
        <t>Responses to token requests is bound to the corresponding
        requests by message order in HTTP, as both token and requests are
        protected by TLS that can detect and disallow malicious reordering of
        packets.</t>
      </section>

      <section title="Timing Attack">
        <t>Timing attack is an attack that allows the attacker to 
		obtain unnecessary large amount of information through the elapse time 
		difference in the code path taken by a successful decryption and 
		unsuccessful verification of signed message. 
		It can be used to reduce the effective key length of the
        cipher used. </t>
		<t>Implementations should not terminate the verification process 
		at the instance of the finding error but should continue 
		running until all the octets were processed to avoid this attack. </t>
      </section>
	  
	  <section title="Other Crypto Related Attacks">
	    <t>There are various crypto related attacks possible depending on the 
		method used for encryption and signature / integrity checking. </t>
		<t>Implementation should consult the security consideration 
		around the <xref target="JWS">JWS</xref>, <xref target="JWE">JWE</xref> 
		and <xref target="JWT">JWT</xref> to avoid the vulnerability around 
		these specifications. 
		</t>
	  </section>
		
	  <section anchor="signing_order" title="Signing and Encryption order">
	    <t>Signatures over encrypted text are not considered valid in many jurisdictions.
	    For the integrity of non-repudiation this specification requires signing 
	    of the plain text JSON.</t>
	    <t>It is however strongly RECOMMENDED that the selected 
	    Encryption algorithm include integrity to protect against padding oracle 
	    and other decryption attacks.</t>
		<t>Implementation should consult the security consideration 
		around the <xref target="JWE">JWE</xref> to avoid the vulnerability around 
		these specifications. 
		</t>
	  </section>

	  <section anchor="issuer_identifier" title="Issuer Identifier">
	    <t>OpenID Connect supports a single issuer per Host and Port combination.</t>
	    <t>It is RECOMMENDED that only a single issuer per host be used. Simple Web 
	    Discovery treats the path component of any URI as part of the user identifier. 
		</t>
	  </section>		

	  <section anchor="TLS_requirements" title="TLS Requirements">
	    <t>
	      Implementations MUST support TLS.
	      Which version(s) ought to be implemented will vary over
	      time, and depend on the widespread deployment and known
	      security vulnerabilities at the time of implementation.
	      At the time of this writing,
	      TLS version 1.2 <xref target='RFC5246' />
	      is the most recent version, but has very limited actual
	      deployment, and might not be readily available in
	      implementation toolkits.
	      TLS version 1.0 <xref target='RFC2246' />
	      is the most widely deployed version, and will give the
	      broadest interoperability.
	    </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>
	  </section>
    </section>

    <section anchor="privacy_considerations" title="Privacy Considerations">
      <t>The UserInfo response typically contains Personally Identifiable
      Information. As such, End-User consent for the release of the information
      for the specified purpose SHOULD be obtained at or prior to the
      authorization time in accordance with relevant regulations. The purpose
      of use is typically registered in association with the <spanx
      style="verb">redirect_uris</spanx>.</t>

      <t>Only necessary UserInfo data should be stored at the Client and the
      Client SHOULD associate the received data with the purpose of use
      statement.</t>

      <t>The Resource Server SHOULD make the UserInfo access log available to 
      the End-User so that the End-User can monitor who accessed his data.</t>

      <t>To protect the End-User from a possible correlation among Clients, the
      use of a Pairwise Pseudonymous Identifier (PPID) as the <spanx
      style="verb">user_id</spanx> SHOULD be considered.</t>
      
      <section anchor="token_lifetime" title="Refresh Token, and Access Token Lifetime">
	    <t>Access Token grants are not revocable by the Authorization Server. 
	    Access Token grant lifetimes SHOULD be kept to single use or 
	    very short lifetimes.</t>
	    <t>If access to the User Info Endpoint or other protected resources is required,
	    a Refresh Token should be used. The Client may then exchange the Refresh Token at
	    the Token Endpoint for a fresh short lived Access Token, that can be used to 
	    access the resource.</t>
	    <t>The Authorization Server SHOULD clearly identify long term grants to the User
	    during Authorization.</t>
	    <t>The Authorization Server MUST provide a mechanisim for the user to revoke
	    Refresh Tokens granted to a Client.</t>
	    
      </section>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>This document makes no requests of IANA.</t>

    
    </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.2246"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.4627"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5646"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.3339"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6125"?>

      <reference anchor="USA15">
        <front>
          <title>Unicode Normalization Forms</title>

          <author fullname="Mark Davis" initials="M." surname="Davis">
            <address>
              <email>markdavis@google.com</email>
            </address>
          </author>

          <author fullname="Ken Whistler" initials="K." surname="Whistler">
            <address>
              <email>ken@unicode.org</email>
            </address>
          </author>

          <author fullname="Martin D&uuml;rst" initials="M."
                  surname="D&uuml;rst"></author>

          <date day="03" month="09" year="2009" />
        </front>

        <seriesInfo name="Unicode Standard Annex" value="15" />
      </reference>

      <reference anchor="OpenID.Basic">
        <front>
          <title>OpenID Connect Basic Client 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>Independent</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="23" month="December" year="2011" />
        </front>

        <format target="http://openid.net/specs/openid-connect-basic-1_0-15.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>Independent</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="23" month="December" year="2011" />
        </front>

        <format target="http://openid.net/specs/openid-connect-standard-1_0-07.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>Independent</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="23" month="December" year="2011" />
        </front>

        <format target="http://openid.net/specs/openid-connect-discovery-1_0-07.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>Independent</organization>
          </author>

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

          <date day="23" month="December" year="2011" />
        </front>

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

      <reference anchor="OpenID.Session">
        <front>
          <title>OpenID Connect Session Management
          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>Independent</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="23" month="December" year="2011" />
        </front>

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

      <reference anchor="OAuth2.0">
        <front>
          <title>OAuth 2.0 Authorization Protocol</title>

          <author fullname="Eran Hammer-Lahav" initials="E." role="editor"
                  surname="Hammer-Lahav">
            <organization abbrev="Yahoo">Yahoo</organization>
          </author>

          <author fullname="David Recordon" initials="D." surname="Recordon">
            <organization abbrev="Facebook">Facebook</organization>
          </author>

          <author fullname="Dick Hardt" initials="D." surname="Hardt">
            <organization abbrev="Microsoft">Microsoft</organization>
          </author>

          <date day="22" month="September" year="2011" />
        </front>

        <format target="http://tools.ietf.org/html/draft-ietf-oauth-v2-22"
                type="HTML" />
      </reference>

      <reference anchor="OAuth.Threat">
        <front>
          <title>OAuth 2.0 Threat Model and Security Considerations</title>

          <author fullname="Torsten Lodderstedt" initials="T." role="editor"
                  surname="Lodderstedt">
            <organization abbrev="DT">Deutsche Telekom AG</organization>
          </author>

          <author fullname="Mark McGloin" initials="M." surname="McGloin">
            <organization abbrev="IBM">IBM</organization>
          </author>

          <author fullname="Phil Hunt" initials="P." surname="Hunt">
            <organization abbrev="Oracle">Oracle Corporation</organization>
          </author>

          <date day="26" month="October" year="2011" />
        </front>

        <format target="http://tools.ietf.org/html/draft-ietf-oauth-v2-threatmodel-01"
                type="HTML" />
      </reference>

      <reference anchor="OAuth.Bearer">
        <front>
          <title>OAuth 2.0 Protocol: Bearer Tokens</title>

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

          <author fullname="Dick Hardt" initials="D." surname="Hardt">
            <organization>Independent</organization>
          </author>

          <author fullname="David Recordon" initials="D." surname="Recordon">
            <organization>Facebook</organization>
          </author>

          <date day="18" month="December" year="2011" />
        </front>

        <format target="http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-15"
                type="HTML" />
      </reference>

      <reference anchor="JWT">
        <front>
          <title>JSON Web Token</title>

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

          <author fullname="Dirk Balfanz" initials="D." surname="Balfanz">
            <organization>Google</organization>
          </author>

          <author fullname="John Bradley" initials="J." surname="Bradley">
            <organization abbrev="Protoviti">Protoviti Government
            Services</organization>
          </author>

          <author fullname="Yaron Goland" initials="Y." surname="Goland">
            <organization abbrev="Microsoft">Microsoft</organization>
          </author>

          <author fullname="John Panzer" initials="J." surname="Panzer">
            <organization>Google</organization>
          </author>

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

          <author fullname="Paul Tarjan" initials="P." surname="Tarjan">
            <organization abbrev="Facebook">Facebook</organization>
          </author>

          <date day="13" month="December" year="2011" />
        </front>

        <format target="http://openid.net/specs/draft-jones-json-web-token-07.html"
                type="HTML" />
      </reference>

      <reference anchor="JWS">
        <front>
          <title>JSON Web Signature</title>

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

          <author fullname="Dirk Balfanz" initials="D." surname="Balfanz">
            <organization>Google</organization>
          </author>

          <author fullname="John Bradley" initials="J." surname="Bradley">
            <organization abbrev="Protoviti">Protoviti Government
            Services</organization>
          </author>

          <author fullname="Yaron Goland" initials="Y." surname="Goland">
            <organization abbrev="Microsoft">Microsoft</organization>
          </author>

          <author fullname="John Panzer" initials="J." surname="Panzer">
            <organization>Google</organization>
          </author>

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

          <author fullname="Paul Tarjan" initials="P." surname="Tarjan">
            <organization abbrev="Facebook">Facebook</organization>
          </author>

          <date day="13" month="December" year="2011" />
        </front>

        <format target="http://openid.net/specs/draft-jones-json-web-signature-04.html"
                type="HTML" />
      </reference>

      <reference anchor="JWE">
        <front>
          <title>JSON Web Encryption (JWE)</title>

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

	  <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
	    <organization>RTFM, Inc.</organization>
	  </author>

	  <author fullname="Joe Hildebrand" initials="J." surname="Hildebrand">
	    <organization>Cisco Systems, Inc.</organization>
	  </author>

	  <date day="13" month="December" year="2011" />
        </front>
        <format target="http://openid.net/specs/draft-jones-json-web-encryption-02.html" type="HTML" />
      </reference>

      <reference anchor="JWK">
        <front>
	  <title>JSON Web Key (JWK)</title>

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

	  <date day="13" month="December" year="2011" />
        </front>
        <format target="http://openid.net/specs/draft-jones-json-web-key-03.html" type="HTML" />
      </reference>
        
      <reference anchor="OAuth.JWT">
        <front>
	    <title abbrev="OAuth JWT Bearer Token Profiles">JSON Web Token (JWT) Bearer Token Profiles for OAuth 2.0</title>

	    <author fullname="Michael B. Jones" surname="Jones" initials="M.B."> <!-- role="editor" -->
	      <organization>Microsoft</organization>
	    </author>

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

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

	    <date day="13" month="December" year="2011"/>
	  </front>
	<format target="http://openid.net/specs/draft-jones-oauth-jwt-bearer-03.html"
		    type="HTML" />
      </reference>

      <reference anchor="OAuth.Assertions">
        <front>
          <title abbrev='oauth-assertions'>OAuth 2.0 Assertion Profile</title>
          <author initials='C.' surname='Mortimore' fullname='Chuck Mortimore' role='editor'/>
          <author initials='B.' surname='Campbell' fullname='Brian Campbell' />
          <author initials='M.B.' surname='Jones' fullname='Michael B. Jones'/>
          <author initials="Y.Y." surname="Goland" fullname="Yaron Y. Goland"/>
          <date day="31" month="October" year="2011"/>
        </front>
        <format target="http://tools.ietf.org/html/draft-ietf-oauth-assertions-01"
		 type="HTML" />
      </reference>

      <reference anchor="ISO29115">
        <front>
          <title>ITU-T Recommendation X.1254 | ISO/IEC DIS 29115 --
          Information technology - Security techniques - Entity authentication
          assurance framework</title>

          <author fullname="Erika McCallister et al." initials="E."
                  surname="McCallister">
            <organization>National Institute of Standards and
            Technology</organization>
          </author>
          <date day="23" month="November" year="2011" />
        </front>
        <seriesInfo name="ISO/IEC" value="29115" />
        <format target="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=45138"
                type="HTML" />
      </reference>

      <reference anchor="ISO639-1">
        <front>
          <title>ISO 639-1:2002. Codes for the representation of names of
          languages -- Part 1: Alpha-2 code</title>

          <author fullname="International Organization for Standardization"
                  initials="" surname="">
            <organization abbrev="ISO">International Organization for
            Standardization</organization>
          </author>

          <date year="2002" />
        </front>
      </reference>

      <reference anchor="ISO3166-1">
        <front>
          <title>ISO 3166-1:1997. Codes for the representation of names of
          countries and their subdivisions -- Part 1: Country codes</title>

          <author fullname="International Organization for Standardization"
                  initials="" surname="">
            <organization abbrev="ISO">International Organization for
            Standardization</organization>
          </author>

          <date year="1997" />
        </front>

        <format target="http://www.w3.org/WAI/ER/IG/ert/iso639.htm"
                type="HTML" />
      </reference>

      <reference anchor="E.164">
        <front>
          <title>E.164 : The international public telecommunication numbering plan</title>

          <author fullname="International Telecommunication Union"
                  initials="" surname="">
            <organization abbrev="ITU">International Telecommunication Union</organization>
          </author>

          <date year="2010" />
        </front>

        <format target="http://www.itu.int/rec/T-REC-E.164-201011-I/en"
                type="HTML" />
      </reference>



      <reference anchor="zoneinfo">
        <front>
          <title>The tz database</title>

          <author fullname="" initials="" surname="">
            <organization abbrev="Public">Public Domain</organization>
          </author>

          <date month="June" year="2011" />
        </front>

        <format target="http://www.twinsun.com/tz/tz-link.htm" type="HTML" />
      </reference>
      <reference anchor="OAuth.Responses">
        <front>
           <title>OAuth 2.0 Multiple Response Type Encoding Practices</title>
           <author fullname="Breno" initials="B." surname="de Medeiros">
             <organization abbrev="Google">Google, Inc.</organization>
           </author>
           <author fullname="Marius" initials="M." surname="Scurtescu">
             <organization abbrev="Google">Google, Inc.</organization>
           </author>
           <author fullname="Paul" initials="P." surname="Tarjan">
             <organization abbrev="Facebook"> Facebook</organization>
           </author>
           <date day="23" month="December" year="2011"></date>
        </front>
      <format target="http://openid.net/specs/oauth-v2-multiple-response-types-1_0-03.html"
              type="HTML" />
      </reference>
      
      <reference anchor="LoA.Registry">
        <front>
         <title abbrev="SAML 2.0 LoA Registry">An IANA registry for SAML 2.0 Level
         of Assurance Context Classes</title>

         <author fullname="Leif Johansson" initials="L." surname="Johansson">
          <organization>NORDUNet</organization>

          <address>
           <postal>
            <street>Tulegatan 11</street>

            <city>Stockholm</city>

            <country>Sweden</country>
           </postal>

           <email>leifj@nordu.net</email>
          </address>
         </author>

      <date day="25" month="June" year="2011" />

      <keyword>Identity</keyword>

      <keyword>Assurance</keyword>

       <abstract>
        <t>This document establishes an IANA registry for Level of Assurance
        Context Classes for SAML 2.0. The registry is intended to be used as an
        aid to discovering such LoA definitions.</t>
       </abstract>
      </front>
        <format target="http://tools.ietf.org/html/draft-johansson-loa-registry-02"
		 type="HTML" />
      </reference>

    </references>

    <references title="Informative References">
      <reference anchor="OpenID.2.0">
        <front>
          <title>OpenID Authentication 2.0</title>

          <author fullname="specs@openid.net" initials=""
                  surname="specs@openid.net">
            <organization abbrev="OIDF">OpenID Foundation</organization>
          </author>

          <date day="5" month="December" year="2007" />
        </front>

        <format target="http://www.openid.net/specs/openid-authentication-2_0.txt"
                type="TXT" />

        <format target="http://www.openid.net/specs/openid-authentication-2_0.html"
                type="HTML" />
      </reference>


    </references>

    <section title="Acknowledgements">
      <t>As a successor version of OpenID, this specification heavily relies
      on <xref target="OpenID.2.0">OpenID Authentication 2.0</xref>. Please
      refer to Appendix C of OpenID Authentication 2.0 for the full list of
      the contributors for that specification.</t>

      <t>This specification is largely compliant with OAuth 2.0 draft 20.
      Please refer to the OAuth 2.0 specification for the list of
      contributors.</t>

      <t>In addition, the OpenID Community would like to thank the following
      people for the work they have done in the drafting and editing of this
      specification.</t>

      <t><list style="empty">
          <t>Anthony Nadalin (tonynad@microsoft.com), Microsoft</t>

          <t>Andreas Akre Solberg (andreas.solberg@uninett.no), UNINET</t>

          <t>Axel Nennker (axel.nennker@telekom.de), Deutsche Telekom</t>

          <t>Casper Biering (cb@peercraft.com), Peercraft</t>

          <t>Chuck Mortimore (cmortimore@salesforce.com), Salesforce</t>

          <t>Breno de Medeiros (breno@gmail.com), Google</t>

          <t>Chuck Mortimore (cmortimore@salesforce.com), Salesforce.com</t>

          <t>David Recordon (dr@fb.com), Facebook</t>

          <t>Edmund Jay (ejay@mgi1.com), Illumila</t>

          <t>George Fletcher (george.fletcher@corp.aol.com), AOL</t>

          <t>Hideki Nara (hideki.nara@gmail.com), Takt Communications</t>

          <t>Johnny Bufu (jbufu@janrain.com), Janrain</t>

          <t>John Bradley (jbradely@mac.com), Independent</t>

          <t>Justin Richer (jricher@mitre.org), Mitre</t>

          <t>Luke Shepard (lshepard@fb.com), Facebook</t>

          <t>Michael B. Jones (mbj@microsoft.com), Microsoft</t>

          <t>Nat Sakimura (n-sakimura@nri.co.jp), Nomura Research Institute,
          Ltd.</t>

          <t>Nov Matake (nov@matake.jp), Independent</t>

          <t>Pamela Dingle (pdingle@pingidentity.com), Ping Identity</t>

          <t>Paul Tarjan (pt@fb.com), Facebook</t>

          <t>Roland Hedberg (roland.hedberg@adm.umu.se), Independent</t>

          <t>Ryo Itou (ritou@yahoo-corp.jp), Yahoo! Japan</t>

          <t>Torsten Lodderstedt (t.lodderstedt@telekom.de ), Deutsche Telekom</t>

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

        <section title="Notices">
          <t>Copyright (c) 2011 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 (i) solely for the purposes of developing 
          specifications, and (ii) implementing Implementers Drafts and 
          Final Specifications based on such documents, provided that attribution 
          be made to OIDF as the source of the material, but that such attribution 
          does not indicate the endorsement by 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.  OpenID 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 title="Document History">
      <t>[[ To be removed from the final specification ]]</t>

      <t>-07<list style="symbols">
	  <t>Removed definition and usage for assertion and claim object</t>
	  <t>Consistent use of End-User</t>
	  <t>Removed 'format' from userinfo and id_token object of the OpenID Request Object</t>
	  <t>email scope allows access to the 'verified' claim</t>
	  <t>ID Token 'audience' claim MUST be <spanx style="verb">client_id</spanx></t>
	  <t>Rename artifact to authorization code</t>
	  <t>Removed language pertaining to custom userinfo schemas</t>
	  <t>Check ID Endpoint returns only JSON</t>
	  <t>Updated Check ID Response verification</t>
	  <t>Remove 'audience' parameter from Authorization Request</t>
	  <t>Moved display=none to prompt=none</t>
	  <t>Added additional display parameter options</t>
	  <t>Moved IANA considerations to Standard</t>
	  <t>Added error codes to Authorization Endpoint</t>
	  <t>Added client authentication section regarding various supported client 
	    authentication schemes and their validation.
	    This includes symmetric and asymmetric authentication, JWT Bearer Token 
	    Profiles, OAuth 2.0 Assertion Profile</t>
	  <t>Updated Check ID Response verification</t>
	  <t>Added 'auth_time' to ID Token</t>
	  <t>Added validation for request object encryption and signature</t>
	  <t>Added explanation for user_id type and calculating pairwise identifiers</t>
	  <t>Added steps for signature and validation and encryption and decryption</t>
	  <t>Added verification of issuer identifier</t>
	  <t>Redefined 'nonce' in Authorization Request. Changed to REQUIRED parameter.</t>
	  <t>Changed usage of the word "approval" to "consent"</t>
	  <t>Use RFC 6125 to verify TLS endpoints</t>
	  <t>ID Token MUST be JWT</t>
	  <t>Access Tokens should include an audience claim for the Resource Server</t>
	  <t>Updated Security Considerations</t>
	  <t>OpenID Request Object parameters takes precedence over the same parameters in
	    the Authorization Request</t>
	  <t>Allow other gender strings in UserInfo schema</t>
	  <t>Changed UserInfo claim 'locale' to 'preferred_locales' and changed it to be a 
	    list of values</t>
	  <t>Changed UserInfo claim 'user_id' to REQUIRED. Added requirement to compare 
	    user_id from userinfo endpoint to id_token</t>
	  <t>RECOMMENDED E.164 format for UserInfo 'phone_number' claim</t>
	  <t>Changed UserInfo Error Response to augment and return OAuth 2.0 Bearer Token Error Response</t>
	  <t>Expanded section regarding UserInfo 'address' claim</t>
	  <t>Added Privacy considerations</t>
	  <t>Added rational for signing then encrypting added to security considerations</t>
	  <t>Added section about string comparison rules needed</t>
	  <t>The Authorization Server MUST understand all the request parameters 
	    except for the unsupported claims.</t>
	  <t>Make openid scope provide user_id from userinfo endpoint</t>
	  <t>Added explanation of select_account</t>
	  <t>Check ID Endpoint uses ID Token as Access Token according to Bearer Token spec</t>
	  <t>Clients MUST verify <spanx style="verb">client_id</spanx> in ID Token</t>
          <t>Bumped version + date</t>
          <t>Update John Bradley email and affiliation for Implementer's Draft</t>
	  <t>Removed invalid_authorization_code, invalid_id_token error codes</t>
	  <t>Section 2.3 client MUST NOT send encrypted JWT to the Check ID Endpoint</t>
	  <t>Section 2.1.2.1.2 Added user_id claim and moved iso29115 to claims element of id_token member</t>
	  <t>Defined Authentication Context, Authentication Context Class Reference (acr), replaced iso29115 with acr.</t>
	  <t>Corrected instances of x509_url_encryption to x509_encryption_url
	    and jwk_url_encryption to jwk_encryption_url</t>
      </list></t>

	<t>-06<list style="symbols">
          <t>Changed section 3.1.4.1 to say the errors are returned as
          defined by the response type not always as query
          parameters. per ticket #174.</t>
          <t>Bumped version + date.</t>
          <t>Fixed section 3.3.3 to refer to errors in Bearer Token.</t>
          <t>Fixed 3.1.3 to ref the other response types ticket #173.</t>
          <t>Included reference to multiple response types.</t>
          <t>Fixed 3.1.2.1 to indicate default Claims in id_token.</t>
          <t>Fixed section 3.2.2 to reference the access token response from the token endpoint 4.1.4.</t>
          <t>Fixed section 3.2.1 to include refresh tokens.</t>
          <t>Fixed section 3.1.1 to be clear on JWT being the token format per ticket #171.</t>
        </list></t>

      <t>-05<list style="symbols">
          <t>Changed check_session to check_id.</t>

          <t>schema=openid now required when requesting UserInfo.</t>

          <t>Removed issued_to, since not well defined.</t>

          <t>Removed display values popup, touch, and mobile, since not well defined.</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>Added secret_type to the Token endpoint.</t>

    <t>Minor edits to the samples.</t>
        </list></t>

      <t>-02 <list style="symbols">
          <t>Incorporates feedback from Nat Sakimura.</t>
        </list></t>

      <t>-01 <list style="symbols">
          <t>First Draft that incorporates the merge of the Core and Framework
          specs.</t>
        </list></t>
    </section>
  </back>
</rfc>
