<?xml version='1.0' encoding='ascii'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<rfc ipr="trust200902" category="info" docName="opend-connect-claims-aggregation_1_0" obsoletes="" updates="" submissionType="IETF" xml:lang="en">
  <?rfc toc="yes" ?>
  <?rfc tocdepth="4" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc strict="yes" ?>
  <?rfc iprnotified="no" ?>
  <?rfc private="Draft-01" ?>
  <front>
    <title abbrev="OIDC Claims Aggregation">OpenID Connect Claims Aggregation 1.0</title>
    <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
      <organization abbrev="Nat Consulting">Nat Consulting</organization>
      <address>
        <email>nat@nat.consulting</email>
        <uri>http://nat.sakimura.org/</uri>
      </address>
    </author>
    <author fullname="Edmund Jay" initials="E." surname="Jay">
      <organization abbrev="Illumila">Illumila</organization>
      <address>
        <email>ejay@mgi1.com</email>
        <uri>http://illumi.la/</uri>
      </address>
    </author>
    <date day="26" month="August" year="2020"/>
    <note title="Warning">
      <t>This document is not an OIDF International Standard. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an International Standard.  </t>
      <t>Recipients of this draft are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.  </t>
    </note>
    <note title="Copyright notice &amp; license">
      <t>The OpenID Foundation (OIDF) grants to any Contributor, developer, implementer, or other interested party a non-exclusive, royalty free, worldwide copyright license to reproduce, prepare derivative works from, distribute, perform and display, this Implementers Draft or Final Specification solely for the purposes of (i) developing specifications, and (ii) implementing Implementers Drafts and Final Specifications based on such documents, provided that attribution be made to the OIDF as the source of the material, but that such attribution does not indicate an endorsement by the OIDF.</t>
      <t>The technology described in this specification was made available from contributions from various sources, including members of the OpenID Foundation and others. Although the OpenID Foundation has taken steps to help ensure that the technology is available for distribution, it takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this specification or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any independent effort to identify any such rights. The OpenID Foundation and the contributors to this specification make no (and hereby expressly disclaim any) warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to this specification, and the entire risk as to implementing this specification is assumed by the implementer. The OpenID Intellectual Property Rights policy requires contributors to offer a patent promise not to assert certain patent claims against other contributors and against implementers. The OpenID Foundation invites any interested party to bring to its attention any copyrights, patents, patent applications, or other proprietary rights that may cover technology that may be required to practice this specification.</t>
    </note>
    <note title="Foreword">
      <t>The OpenID Foundation (OIDF) promotes, protects and nurtures the OpenID community and technologies. As a non-profit international standardizing body, it is comprised by over 160 participating entities (workgroup participants). The work of preparing implementer drafts and final international standards is carried out through OIDF workgroups in accordance with the OpenID Process. Participants interested in a subject for which a workgroup has been established has the right to be represented in that workgroup. International organizations, governmental and non-governmental, in liaison with OIDF, also take part in the work. OIDF collaborates closely with other standardizing bodies in the related fields.</t>
    </note>
    <note title="Introduction">
      <t/>
    </note>
    <note title="Notational conventions">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.</t>
    </note>
  </front>
  <middle><!--This document was prepared using Pandoc2rfc, https://github.com/miekg/pandoc2rfc --><section title="Scope" anchor="scope" toc="default"><t>This document specifies the methods for an application to: * perform discovery for a Claims Provider; * register a client to a Claims Provider; * obtain claims from the Claims Provider; and * returned aggregated claims from Claims Providers to requesting clients.  </t></section><section title="Normative references" anchor="normative-references" toc="default"><t>The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applied. For undated references, the latest edition of the referenced document (including any amendments) applies.  </t><t>[BCP14] - Key words for use in RFCs to Indicate Requirement Levels [BCP14]: https://tools.ietf.org/html/bcp14 </t><t>[RFC6749] - The OAuth 2.0 Authorization Framework [RFC6749]: https://tools.ietf.org/html/rfc6749 </t><t>[RFC6750] - The OAuth 2.0 Authorization Framework: Bearer Token Usage [RFC6750]: https://tools.ietf.org/html/rfc6750 </t><t>[RFC7636] - # Proof Key for Code Exchange by OAuth Public Clients [RFC7636]: https://tools.ietf.org/html/rfc76360 </t><t>[BCP212] - OAuth 2.0 for Native Apps [BCP212]: https://tools.ietf.org/html/bcp212 </t><t>[RFC6819] - OAuth 2.0 Threat Model and Security Considerations [RFC6819]: https://tools.ietf.org/html/rfc6819 </t><t>[BCP195] - Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) [BCP195]: https://tools.ietf.org/html/bcp195 </t><t>[OIDC] - OpenID Connect Core 1.0 incorporating errata set 1 [OIDC]: https://openid.net/specs/openid-connect-core-1_0.html </t><t>[OpenID.Discovery] - OpenID Connect Discovery 1.0 [OpenID.Discovery]: https://openid.net/specs/openid-connect-discovery-1_0.html </t><t>[OpenID.Registration] - OpenID Connect Registration 1.0 [OpenID.Registration]: http://openid.net/specs/openid-connect-registration-1_0.html </t><t>[OpenID.IDA] - OpenID Connect for Identity Assurance 1.0 [OpenID.IDA]:https://openid.net/specs/openid-connect-4-identity-assurance-1_0-ID1.html </t><t>[MTLS] - OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens [MTLS]: https://tools.ietf.org/html/draft-ietf-oauth-mtls </t><t>[JWT] - JSON Web Token [JWT]: http://tools.ietf.org/html/draft-ietf-oauth-json-web-token </t><t>[JWS] - JSON Web Signature [JWS]: http://tools.ietf.org/html/draft-ietf-jose-json-web-signature </t><t>[JWE] - JSON Web Encryption [JWE]: http://tools.ietf.org/html/draft-ietf-jose-json-web-encryption </t><t>[JWA] - JSON Web Algorithms [JWA]: http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms </t></section><section title="Terms and definitions" anchor="terms-and-definitions" toc="default"><t>For the purpose of this document, the terms defined in [RFC6749], [RFC6750], [RFC7636], [OpenID Connect Core][OIDC] apply.  </t></section><section title="Symbols and abbreviated terms" anchor="symbols-and-abbreviated-terms" toc="default"><t><spanx style="strong" xml:space="preserve">HTTP</spanx> - Hyper Text Transfer Protocol </t><t><spanx style="strong" xml:space="preserve">TLS</spanx> - Transport Layer Security </t></section><section title="OpenID Connect Claims Aggregation" anchor="openid-connect-claims-aggregation" toc="default"><section title="Introduction" anchor="introduction" toc="default"><t>Personal information can be stored in various places : locally or at various online claims providers. Commonly, different claims providers will store different types of personal information (e.g., a medical Claims Provider will store medical information and a school will store students' education history at the school). The decentralization of these various pieces of information makes it onerous for a person to share their information with other service providers.  </t><t>OpenID Connect Claims Aggregation provides a way for an OpenID Connect Provider to provide aggregated claims from Claims Providers to OpenID Connect clients. This enables a more user-centric way for users to share their information from an OpenID Provider which gathers all their information in a centralized location. The OpenID Provider acts as a Relying Party to Claims Providers by registering as a client and then making OpenID authentication requests for the necessary user information.  The authentication requests goes through the normal OpenID request flow of obtaining user authentication and authorization for the requested claims. The OpenID Provider then makes a request for an access token that can be used at the Aggregate Claims Endpoint to fetch the requested claims that are then returned as aggregate claims to the requesting Relying Party client.  </t></section><section title="Discovery" anchor="discovery" toc="default"><t>This specification assumes that the Relying Party has already obtained configuration information about the OpenID Claims Provider, including its Authorization Endpoint and Token Endpoint locations. This information is obtained via Discovery, as described in OpenID Connect Discovery 1.0 [OpenID.Discovery], or may be obtained via other mechanisms.  </t><t>OpenID Connect Claims Aggregation adds the following OpenID Provider Metadata to the OpenID Connect Discovery 1.0 [OpenID.Discovery] response when aggregatable claims are supported by a Claims Provider : </t><t><list style="symbols"><t><spanx style="emph" xml:space="preserve">claims_endpoint</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Required</spanx>. Claims Endpoint. URL at the Claims Provider that provides signed claims.  </t></list> </t><t><spanx style="emph" xml:space="preserve">claims_signing_alg_values_supported</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Optional</spanx>. JSON array containing a list of the JWS [JWS] signing algorithms (alg values) JWA [JWA] supported by the Claims Endpoint to encode the Claims in a JWT [JWT]. The value <spanx style="emph" xml:space="preserve">none</spanx> MUST NOT be included.  </t></list> </t><t><spanx style="emph" xml:space="preserve">claims_encryption_alg_values_supported</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Optional</spanx>. JSON array containing a list of the JWE [JWE] encryption algorithms (alg values) JWA [JWA] supported by the Claims Endpoint to encode the Claims in a JWT [JWT].  </t></list> </t><t><spanx style="emph" xml:space="preserve">claims_encryption_enc_values_supported</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Optional</spanx>. JSON array containing a list of the JWE [JWE] encryption algorithms (enc values) JWA [JWA] supported by the Claims Endpoint to encode the Claims in a JWT [JWT].  </t></list> </t></list></t><t>Additionally, the following OP Metadata MUST contain the following parameters: - <spanx style="emph" xml:space="preserve">claim_types_supported</spanx>. The JSON array MUST contain the values <spanx style="emph" xml:space="preserve">normal</spanx>, and <spanx style="emph" xml:space="preserve">distributed</spanx> (client only). - <spanx style="emph" xml:space="preserve">claims_supported</spanx>. A JSON array containing a list of the Claim Names of the Claims that the OpenID Provider MAY be able to supply values for. - <spanx style="emph" xml:space="preserve">claims_parameter_supported</spanx>. The value MUST be <spanx style="emph" xml:space="preserve">true</spanx> to support the <spanx style="emph" xml:space="preserve">claims</spanx> request parameter. - <spanx style="emph" xml:space="preserve">request_parameter_supported</spanx>. The value MUST be <spanx style="emph" xml:space="preserve">true</spanx> to support the <spanx style="emph" xml:space="preserve">request</spanx> request parameter. - <spanx style="emph" xml:space="preserve">request_uri_parameter_supported</spanx>. The value MUST be <spanx style="emph" xml:space="preserve">true</spanx> to support the <spanx style="emph" xml:space="preserve">request_uri</spanx> request parameter.  </t><t>If the OpenID Provider supports OpenID Connect for Identity Assurance 1.0 [OpenID.IDA], the supported OpenID Connect for Identity Assurance 1.0 [OpenID.IDA] supported features MUST be published as specified in section 7 of OpenID Connect for Identity Assurance 1.0 [OpenID.IDA].  </t></section><section title="Registration" anchor="registration" toc="default"><t>This specification assumes that the Relying Party has already obtained sufficient credentials and provided information needed to use the OpenID Claims Provider. This is normally done via Dynamic Registration, as described in <eref target="https://openid.net/specs/openid-connect-core-1_0.html#OpenID.Registration">OpenID Connect Dynamic Client Registration 1.0</eref> [OpenID.Registration], or may be obtained via other mechanisms.  </t><t>OpenID Connect Claims Aggregation adds the following Client Metadata to the OpenID Connect Dynamic Client Registration : </t><t><list style="symbols"><t><spanx style="emph" xml:space="preserve">claims_signed_response_alg</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Required</spanx>. JWS <spanx style="emph" xml:space="preserve">alg</spanx> algorithm JWA [JWA] REQUIRED for signing Claims Responses. The value <spanx style="emph" xml:space="preserve">none</spanx> MUST NOT be used. If this is specified, the response will be JWT [JWT] serialized, and signed using JWS. The default, if omitted, is <spanx style="emph" xml:space="preserve">RS256</spanx>.  </t></list> </t><t><spanx style="emph" xml:space="preserve">claims_encrypted_response_alg</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Optional</spanx>. JWE <spanx style="emph" xml:space="preserve">alg</spanx> algorithm JWA [JWA] REQUIRED for encrypting Claims responses to the client. If both signing and encryption are requested, the response will be signed then encrypted, with the result being a Nested JWT, as defined in JWT [JWT]. The default, if omitted, is that no encryption is performed.  </t></list> </t><t><spanx style="emph" xml:space="preserve">claims_encrypted_response_enc</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Optional</spanx>. JWE <spanx style="emph" xml:space="preserve">enc</spanx> algorithm JWA [JWA] REQUIRED for encrypting Claims responses. If <spanx style="emph" xml:space="preserve">claims_encrypted_response_enc</spanx> is specified, the default for this value is <spanx style="emph" xml:space="preserve">A128CBC-HS256</spanx>. When <spanx style="emph" xml:space="preserve">claims_encrypted_response_enc</spanx> is included, <spanx style="emph" xml:space="preserve">claims_encrypted_response_alg</spanx> MUST also be provided.  </t></list> </t></list></t><t>Authentication requests to the Claims Provider's Authorization Endpoint should be signed or signed and encrypted. In order to support a more diverse set of claims, requests for claims should be made using Request Objects which are signed or signed and encrypted by registering the appropriate values for the following Client Metadata registration parameters: </t><t><list style="symbols"><t><spanx style="emph" xml:space="preserve">request_object_signing_alg</spanx> </t><t><spanx style="emph" xml:space="preserve">request_object_encryption_alg</spanx> </t><t><spanx style="emph" xml:space="preserve">request_object_encryption_enc</spanx> </t></list></t></section><section title="Authentication Request" anchor="authentication-request" toc="default"><t>Authentication requests to Claims Providers are made using the OpenID Connect Code Authorization Flow as described in 3.1 of OpenID Connect 1.0 [OIDC] along with PKCE [RFC7636].  </t><t>Requests for specific claims MUST be made using <spanx style="emph" xml:space="preserve">scope</spanx> values, <spanx style="emph" xml:space="preserve">claims</spanx> values, or and/or Request Objects in the Authentication Request.  </t><t>Since claims from Claims Providers are returned as aggregated claims, only signed or signed and encrypted responses from the Claims Endpoint can be returned as aggregated claims by the OpenID Provider.  </t><t>The OpenID Provider should request a refresh token in the Authentication request to the Claims Provider to facilitate ease of retrieving individual claims from the Claim Provider's Claims Endpoint.  </t><section title="Requesting Claims Using Scope Values" anchor="requesting-claims-using-scope-values" toc="default"><t>OpenID Connect Claims Aggregation supports the use of <spanx style="emph" xml:space="preserve">scope</spanx> values in the Authentication Request to retrieve claims from the Claims Endpoint as specified in 5.4 of OpenID Connect 1.0 [OIDC].  </t></section><section title="Requesting Claims Using the 'claims&quot; Parameter" anchor="requesting-claims-using-the-claims-parameter" toc="default"><t>OpenID Connect Claims Aggregation supports the use of <spanx style="emph" xml:space="preserve">claims</spanx> parameter to retrieve claims from the Claims Endpoint as specified in 5.5 of OpenID Connect 1.0 [OIDC].  </t><t>To support additional claims and provide claims assurance, OpenID Claims Aggregation supports OpenID Connect for Identity Assurance 1.0 [OpenID.IDA] for the Claims request JSON object and defines the following new Claims in addition to the Claims defined in the OpenID Connect specification OpenID Connect 1.0 [OIDC]: </t><t><list style="symbols"><t><spanx style="strong" xml:space="preserve">uid</spanx> <spanx style="emph" xml:space="preserve">string</spanx> The value is the base64url encoded representation of the thumbprint of the Client's public key for signing. This thumbprint value is computed as the SHA-256 hash of the octets of the UTF-8 representation of a JWK constructed containing only the REQUIRED members to represent the key, with the member names sorted into lexicographic order, and with no white space or line breaks.  For instance, when the kty value is RSA, the member names e, kty, and n are the ones present in the constructed JWK used in the thumbprint computation and appear in that order; when the kty value is EC, the member names crv, kty, x, and y are present in that order. Note that this thumbprint calculation is the same as that defined in the JWK Thumbprint <eref target="https://openid.net/specs/openid-connect-core-1_0.html#JWK.Thumbprint">[JWK.Thumbprint]</eref> specification.  </t><t><spanx style="strong" xml:space="preserve">cp_sub</spanx> <spanx style="emph" xml:space="preserve">string</spanx> The Claim Providers <spanx style="emph" xml:space="preserve">sub</spanx> identifier for the authenticated user.  </t></list></t><t>In addition, OpenID Connect Claims Aggregation defines the following top-level member to the Claims request JSON object: </t><t><list style="symbols"><t><spanx style="emph" xml:space="preserve">c_token</spanx> <list style="symbols"><t><spanx style="strong" xml:space="preserve">Optional</spanx>. Requests that the listed individual Claims be returned from the Claims Endpoint. If present, the listed Claims are being requested to be added to any Claims that are being requested using scope values. If not present, the Claims being requested from the Claims Endpoint are only those requested using scope values. This top-level member is a JSON object with the names of the individual Claims being requested as the member names and the values are defined as in 5.5.1 of OpenID Connect 1.0 [OIDC].  </t></list> </t></list></t><t>OpenID Claims Aggregation supports the requesting of additional claims and verified claims defined in OpenID Connect for Identity Assurance 1.0 [OpenID.IDA] for the <spanx style="emph" xml:space="preserve">c_token</spanx> member of the Claims request JSON object.  </t><t>When the <spanx style="emph" xml:space="preserve">c_token</spanx> member is used, the request MUST also use a <spanx style="emph" xml:space="preserve">response_type</spanx> value that results in an Access Token being issued to the Client for use at the claims endpoint.  </t></section><section title="Requesting Claims Using Request Object" anchor="requesting-claims-using-request-object" toc="default"><t>OpenID Connect Claims Aggregation is a superset of OpenID Connect 1.0 [OIDC]; it fully supports requesting claims via Request Objects as specified in 6 of OpenID Connect 1.0 [OIDC] in conjunction with the additional <spanx style="emph" xml:space="preserve">c_token</spanx> member as defined in 5.3.2 of this specification.  </t></section></section><section title="Token Endpoint" anchor="token-endpoint" toc="default"><t>The OpenID Provider acting as Relying Party to the Claims Provider makes a request to the Claims Provider's Token Endpoint to retrieve an access token as described in 3.1.3 of OpenID Connect 1.0 [OIDC].  </t><t>The Token Endpoint request should limit the scope if less information is desired than the initial Authentication request.  </t></section><section title="Claims Endpoint" anchor="claims-endpoint" toc="default"><t>The Claims Endpoint is an OAuth 2.0 Protected Resource that returns Claims about the authenticated End-User. To obtain the requested Claims about the End-User, the Client makes a request to the Claims Endpoint using an Access Token obtained through OpenID Connect Authentication. These Claims are normally represented by a JSON object that contains a collection of name and value pairs for the Claims.  </t><t>Communication with the Claims Endpoint MUST utilize TLS. See <eref target="https://openid.net/specs/openid-connect-core-1_0.html#TLSRequirements">Section 16.17</eref> for more information on using TLS.  </t><t>The Claims Endpoint MUST support the use of the HTTP GET and HTTP POST methods defined in <eref target="https://openid.net/specs/openid-connect-core-1_0.html#RFC2616">RFC 2616</eref> [RFC2616].  </t><t>The Claims Endpoint MUST accept Access Tokens as <eref target="https://openid.net/specs/openid-connect-core-1_0.html#RFC6750">OAuth 2.0 Bearer Token Usage</eref> [RFC6750].  </t><t>The Claims Endpoint SHOULD support the use of <eref target="https://openid.net/specs/openid-connect-core-1_0.html#CORS">Cross Origin Resource Sharing (CORS)</eref> [CORS] and or other methods as appropriate to enable Java Script Clients to access the endpoint.  </t><section title="Claims Endpoint Request" anchor="claims-endpoint-request" toc="default"><t>Using the access token retrieved from the Claims Provider's Token Endpoint, the OpenID Provider acting as Relying Party to the Claims Provider, makes a request to the Claims Provider's Claims Endpoint for the requested claims as described in 5.3.1 of OpenID Connect 1.0 [OIDC].  </t><t>The Client sends the Claims Request using either HTTP GET or HTTP POST. If using the HTTP GET method, the request parameters are serialized using URI Query String Serialization, per <eref target="https://openid.net/specs/openid-connect-core-1_0.html#QuerySerialization">Section 13.1</eref>. If using the HTTP POST method, the request parameters are serialized using Form Serialization, per <eref target="https://openid.net/specs/openid-connect-core-1_0.html#FormSerialization">Section 13.2</eref>. The Access Token obtained from an OpenID Connect Authentication Request MUST be sent as a Bearer Token, per Section 2 of <eref target="https://openid.net/specs/openid-connect-core-1_0.html#RFC6750">OAuth 2.0 Bearer Token Usage</eref> [RFC6750].  </t><t>It is RECOMMENDED that the request use the HTTP GET method and the Access Token be sent using the Authorization header field.  </t><t>This specification defines the following request parameters for the Claims Endpoint request: </t><t><list style="symbols"><t><spanx style="emph" xml:space="preserve">uid</spanx> <spanx style="strong" xml:space="preserve">Optional</spanx> String value which identifies the end-user at the Client. The value is described in 5.3.2 of this specification. If this parameter is not supplied, the <spanx style="emph" xml:space="preserve">uid</spanx> claims value MUST be supplied in the <spanx style="emph" xml:space="preserve">claims</spanx> parameter.  </t><t><spanx style="emph" xml:space="preserve">claims</spanx> <spanx style="strong" xml:space="preserve">Optional</spanx>. This parameter is used to request that specific Claims be returned. This is a JSON object with only the <spanx style="emph" xml:space="preserve">c_token</spanx> top-level member defined in 5.3.2 of this specification. The <spanx style="emph" xml:space="preserve">c_token</spanx> member requests that the listed individual Claims be returned from the Claims Endpoint. The requested claims MUST only be a subset of the claims bounded to the Access Token as requested in the Authentication Request's <spanx style="emph" xml:space="preserve">scope</spanx>, <spanx style="emph" xml:space="preserve">claims</spanx>, or <spanx style="emph" xml:space="preserve">request</spanx> or <spanx style="emph" xml:space="preserve">request_uri</spanx> parameters. The <spanx style="emph" xml:space="preserve">c_token</spanx> member MUST contain the <spanx style="emph" xml:space="preserve">uid</spanx> claim value if the <spanx style="emph" xml:space="preserve">uid</spanx> request parameter is not supplied.  </t><t><spanx style="emph" xml:space="preserve">aud</spanx> <spanx style="strong" xml:space="preserve">Required???</spanx> JSON object containing a string array of client identifiers that will be added as additional <spanx style="emph" xml:space="preserve">aud</spanx> (audience) claims for the resulting JWT response from this endpoint.  </t></list></t><t>The following is a non-normative example of a Aggregation Request: </t><figure title="" suppress-title="false" align="left" alt="" width="" height=""><artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
  GET /c_token?claims={"aggregation":{"uid":"id8837395937","email":{"essential":true},"email_verified":{"essential":true}}}&amp;aud={["client1234"}      
  HTTP/1.1
  Host: server.example.com
  Authorization: Bearer SlAV32hkKG
</artwork></figure></section><section title="Claims Endpoint Response" anchor="claims-endpoint-response" toc="default"><t>The Claims Endpoint Claims MUST return signed or signed and encrypted response as was requested during Client Registration.  The Claims defined in <eref target="https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims">Section 5.1</eref> can be returned, as can additional Claims not specified there.  </t><t>For privacy reasons, OpenID Providers MAY elect to not return values for some requested Claims.  </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 <spanx style="emph" xml:space="preserve">uid</spanx> claim MUST always be returned in the Aggregation Response.  </t><t>Upon receipt of the Aggregation Request, the Claims Endpoint MUST return the JSON Serialization of the Aggregation Response as in <eref target="https://openid.net/specs/openid-connect-core-1_0.html#JSONSerialization">Section 13.3</eref> in the HTTP response body unless a different format was specified during Registration OpenID Connect Registration 1.0 [OpenID.Registration]. The Claims Endpoint MUST return a content-type header to indicate which format is being returned.  The content-type of the HTTP response MUST be application/json if the response body is a text JSON object; the response body SHOULD be encoded using UTF-8.  </t><t>If the Aggregation Response is signed and/or encrypted, then the Claims are returned in a JWT and the content-type MUST be application/jwt. The response MAY be encrypted without also being signed. If both signing and encryption are requested, the response MUST be signed then encrypted, with the result being a Nested JWT, as defined in JWT [JWT]. The JWT returned from the Claims Endpoint SHOULD NOT have an expiration or if it does, it SHOULD have a suitable long term expiration period.  </t><t>If signed, the Aggregation Response SHOULD contain the Claims iss (issuer) and aud (audience) as members. The iss value SHOULD be the Claim Provider's Issuer Identifier URL. The aud value MUST be the RP's Client ID value in addition to any <spanx style="emph" xml:space="preserve">aud</spanx> identifiers that were supplied in the request.  </t><t>*<spanx style="strong" xml:space="preserve">Note:</spanx> <eref target="https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3">https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3</eref> The "aud" (audience) claim identifies the recipients that the JWT is intended for. Each principal intended to process the JWT MUST identify itself with a value in the audience claim.  If the principal processing the claim does not identify itself with a value in the "aud" claim when this claim is present, then the JWT MUST be rejected. This statement seems contradictory. a) Audience must identify itself b) Reject if present and does not identify </t><t>The following is a non-normative example of a Aggregation Response: The Claims Provider returns the requested claims as described in 5.3.2 of OpenID Connect 1.0 [OIDC].  </t></section><section title="Claims Endpoint Error Response" anchor="claims-endpoint-error-response" toc="default"><t>When an error condition occurs, the Claims Endpoint returns an Error Response as defined in Section 3 of <eref target="https://openid.net/specs/openid-connect-core-1_0.html#RFC6750">OAuth 2.0 Bearer Token Usage</eref> [RFC6750]. (HTTP errors unrelated to RFC 6750 are returned to the User Agent using the appropriate HTTP status code.) </t><t>The following is a non-normative example of a Aggregation Error Response: </t><figure title="" suppress-title="false" align="left" alt="" width="" height=""><artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
HTTP/1.1 401 Unauthorized
  WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
</artwork></figure></section></section><section title="Aggregate Claims Response" anchor="aggregate-claims-response" toc="default"><t>The OpenID Provider returning aggregate claims shall fetch the claims from the Claims Provider's Claims Endpoint. Claims Provider's Claims Endpoint responses must be signed or signed and encrypted.  </t><t>The Claims Provider's Claims Endpoint response is then returned as aggregate claims in the OpenID Provider's ID Token response or Claims Endpoint response as described in 5.6.2 of OpenID Connect 1.0 [OIDC].  </t></section><section title="Aggregate Claims Response Validation" anchor="aggregate-claims-response-validation" toc="default"><t><list style="numbers"><t>If the Aggregate Claim is encrypted, decrypt it using the keys and algorithms that the Client specified during Registration that the OP was to use to encrypt the Claims Endpoint response. If encryption was negotiated with the OP at Registration time and the Aggregate Claims is not encrypted, the RP SHOULD reject it.  </t><t>The value of the iss (issuer) Claim containing the Claims Provider's Issuer Identifier must be a value that the Client trusts.  </t><t>The value of the uid MUST be the base64url encoded representation of the thumbprint of the Client's public signing key.  </t><t>The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified by the iss (issuer) Claim as an audience. The aud (audience) Claim MAY contain an array with more than one element. The Aggregate Claim MUST be rejected if the Aggregate Claim does not list the Client as a valid audience, or if it contains additional audiences not trusted by the Client.  </t><t>The Client MUST validate the signature of the Aggregate Claim according to [JWS [JWS] using the algorithm specified in the JWT alg Header Parameter. The Client MUST use the keys provided by the Issuer of the Aggregate Claim.  </t></list></t><t>Security Considerations </t><t>TBD </t><t>Privacy Considerations </t><t>TBD </t></section></section><section title="Authors" anchor="authors" toc="default"><t><list style="symbols"><t>Edmund Jay, Illumila </t><t>Nat Sakimura, NAT Consulting </t></list></t></section> </middle>
  <back/>
</rfc>
