<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.nl" -->
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' []>
<rfc ipr="trust200902" category="std" xml:lang="en" consensus="yes" docName="openid-connect-4-identity-assurance-1_0-07">
<?rfc toc="yes"?><?rfc symrefs="yes"?><?rfc sortrefs="yes"?><?rfc private="Draft"?><?rfc compact="yes"?><?rfc subcompact="no"?><?rfc comments="no"?>
<front>
<title abbrev="openid-connect-4-identity-assurance-1_0">OpenID Connect for Identity Assurance 1.0</title><author initials="T." surname="Lodderstedt" fullname="Torsten Lodderstedt"><organization>yes.com</organization><address><postal><street></street>
</postal><email>torsten@lodderstedt.net</email>
</address></author>
<author initials="D." surname="Fett" fullname="Daniel Fett"><organization>yes.com</organization><address><postal><street></street>
</postal><email>mail@danielfett.de</email>
</address></author>
<date year="2019" month="August" day="15"></date>
<area>Internet</area><workgroup>connect</workgroup><keyword>security</keyword>
<keyword>openid</keyword>
<keyword>identity assurance</keyword>

<abstract><t>This specification defines an extension of OpenID Connect for providing Relying Parties with verified Claims about End-Users. This extension is intended to be used to verify the identity of a natural person in compliance with a certain law.</t>
</abstract>

</front>

<middle>

<section anchor="Introduction" title="Introduction">
<t>This specification defines an extension to OpenID Connect <xref target="OpenID"></xref> to address the use case of strong identity verification of a natural person in accordance with certain laws. Examples include Anti Money Laundering Laws, Telecommunication Acts, Anti Terror Laws, and regulations on trust services, such as eIDAS <xref target="eIDAS"></xref>.</t>
<t>In such use cases, the Relying Parties (RPs) need to know the assurance level of the Claims about the End-User attested by the OpenID Connect Providers (OPs) or any other trusted source along with evidence related to the identity verification process.</t>
<t>The <spanx style="verb">acr</spanx> Claim, as defined in Section 2 of the OpenID Connect specification <xref target="OpenID"></xref>, is suited to attest information about the authentication performed in a OpenID Connect transaction. But identity assurance requires a different representation for the following reason: authentication is an aspect of an OpenID Connect transaction while identity assurance is a property of a certain Claim or a group of Claims and several of them will typically be conveyed to the RP as the result of an OpenID Connect transaction.</t>
<t>For example, the assurance an OP typically will be able to attest for an e-mail address will be “self-asserted” or “verified by opt-in or similar mechanism”. The family name of a user, in contrast, might have been verified in accordance with the respective Anti Money Laundering Law by showing an ID Card to a trained employee of the OP operator.</t>
<t>Identity assurance therefore requires a way to convey assurance data along with and coupled to the respective Claims about the End-User. This specification proposes a suitable representation and mechanisms the RP will utilize to request verified claims about an End-User along with identity assurance data and for the OP to represent these verified Claims and accompanying identity assurance data.</t>

<section anchor="terminology" title="Terminology">
<t>This section defines some terms relevant to the topic covered in this documents, heavily inspired by NIST SP 800-63A <xref target="NIST-SP-800-63a"></xref>.</t>
<t>
<list style="symbols">
<t>Identity Proofing - process in which a user provides evidence to an OP or claim provider reliably identifying themselves, thereby allowing the OP to assert that identification at a useful identity assurance level.</t>
<t>Identify Verification - process conducted by the OP or a claim provider to verify the user's identity.</t>
<t>Identity Assurance - process in which the OP or a claim provider attests identity data of a certain user with a certain assurance towards a RP, typically expressed by way of an assurance level. Depending on legal requirements, the OP may also be required to provide evidence of the identity verification process to the RP.</t>
<t>Verified Claims - Claims about an End-User, typically a natural person, whose binding to a particular user account were verified in the course of an identity verification process.</t>
</list>
</t>
</section>
</section>

<section anchor="scope-and-requirements" title="Scope and Requirements">
<t>The scope of the extension is to define a mechanism to assert verified Claims, in general, and to introduce new Claims about the End-User required in the identity assurance space; one example would be the place of birth.</t>
<t>The RP will be able to request the minimal data set it needs (data minimization) and to express requirements regarding this data and the evidence and the identity verification processes employed by the OP.</t>
<t>This extension will be usable by OPs operating under a certain regulation related to identity assurance, such as eIDAS notified eID systems, as well as other OPs. Strictly regulated OPs can attest identity data without the need to provide further evidence since they are approved to operate according to well-defined rules with clearly defined liability.</t>
<t>For example in the case of eIDAS, the peer review ensures eIDAS compliance and the respective member state takes the liability for the identities asserted by its notified eID systems. Every other OP not operating under such well-defined conditions is typically required to provide the RP data about the identity verification process along with identity evidence to allow the RP to conduct their own risk assessment and to map the data obtained from the OP to other laws. For example, it shall be possible to use identity data maintained in accordance with the Anti Money Laundering Law to fulfill requirements defined by eIDAS.</t>
<t>From a technical perspective, this means this specification allows the OP to attest verified Claims along with information about the respective trust framework (and assurance level) but also supports the externalization of information about the identity verification process.</t>
<t>The representation defined in this specification can be used to provide RPs with verified Claims about the End-User via any appropriate channel. In the context of OpenID Connnect, verified Claims can be attested in ID Tokens or as part of the UserInfo response. It is also possible to utilize the format described here in OAuth Token Introspection responses (see <xref target="RFC7662"></xref> and <xref target="I-D.ietf-oauth-jwt-introspection-response"></xref>) to provide resource servers with
verified Claims.</t>
<t>This extension is intended to be truly international and support identity assurance for different and across jurisdictions. The extension is therefore extensible to support additional trust frameworks, verification methods, and identity evidence.</t>
<t>In order to give implementors as much flexibility as possible, this extension can be used in conjunction with existing OpenID Connect Claims and other extensions within the same OpenID Connect assertion (e.g., ID Token or UserInfo response) utilized to convey Claims about End-Users.</t>
<t>For example, OpenID Connect <xref target="OpenID"></xref> defines Claims for representing family name and given name of a user without a verification status. Those Claims can be used in the same OpenID Connect assertion beside verified Claims represented according to this extension.</t>
<t>In the same way, existing Claims to inform the RP of the verification status of the <spanx style="verb">phone_number</spanx> and <spanx style="verb">email</spanx> Claims can be used together with this extension.</t>
<t>Even for asserting verified Claims, this extension utilizes existing OpenID Connect Claims if possible and reasonable. The extension will, however, ensure RPs cannot (accidentally) interpret unverified Claims as verified Claims.</t>
</section>

<section anchor="claims" title="Claims">

<section anchor="userclaims" title="Additional Claims about End-Users">
<t>In order to fulfill the requirements of some jurisdictions on identity assurance, this specification defines the following Claims for conveying user data in addition to the Claims defined in the OpenID Connect specification <xref target="OpenID"></xref>:</t>
<t>
<list style="symbols">
<t><spanx style="verb">place_of_birth</spanx>: a structured Claim representing the End-User’s place of birth. It consists of the following fields:
<list style="symbols">
<t><spanx style="verb">country</spanx>: REQUIRED. <xref target="ISO3166-1"></xref> Alpha-2 (e.g., DE) or <xref target="ISO3166-3"></xref></t>
<t><spanx style="verb">region</spanx>: State, province, prefecture, or region component. This field might be required in some jurisdictions.</t>
<t><spanx style="verb">locality</spanx>: REQUIRED. city or other locality</t>
</list></t>
<t><spanx style="verb">nationalities</spanx>: string array representing the user’s nationalities in ICAO 2-letter codes <xref target="ICAO-Doc9303"></xref>, e.g. &quot;US&quot; or &quot;DE&quot;. 3-letter codes MAY be used when there is no corresponding ISO 2-letter code, such as &quot;EUE&quot;.</t>
<t><spanx style="verb">birth_family_name</spanx>: family name someone has when he or she is born, or at least from the time he or she is a child. This term can be used by a person who changes the family name later in life for any reason.</t>
<t><spanx style="verb">birth_given_name</spanx>: given name someone has when he or she is born, or at least from the time he or she is a child. This term can be used by a person who changes the given name later in life for any reason.</t>
<t><spanx style="verb">birth_middle_name</spanx>: middle name someone has when he or she is born, or at least from the time he or she is a child. This term can be used by a person who changes the middle name later in life for any reason.</t>
<t><spanx style="verb">salutation</spanx>: End-User’s salutation, e.g. “Mr.”</t>
<t><spanx style="verb">title</spanx>: End-User’s title, e.g. “Dr.”</t>
</list>
</t>
</section>

<section anchor="txn-claim" title="txn Claim">
<t>Strong identity verification typically requires the participants to keep an audit trail of the whole process.</t>
<t>The <spanx style="verb">txn</spanx> Claim as defined in <xref target="RFC8417"></xref> is used in the context of this extension to build audit trails across the parties involved in an OpenID Connect transaction.</t>
<t>If the OP issues a <spanx style="verb">txn</spanx>, it MUST maintain a corresponding audit trail, which at least consists of the following details:</t>
<t>
<list style="symbols">
<t>the transaction id,</t>
<t>the authentication methods employed, and</t>
<t>the transaction type (e.g. scope values).</t>
</list>
</t>
<t>This transaction data MUST be stored as long as it is required to store transaction data for auditing purposes by the respective regulation.</t>
<t>The RP requests this Claim like any other Claim via the <spanx style="verb">claims</spanx> parameter or as part of a default Claim set identified by a scope value.</t>
<t>The <spanx style="verb">txn</spanx> value MUST allow an RP to obtain these transaction details if needed.</t>
<t>Note: the mechanism to obtain the transaction details from the OP and their format is out of scope of this specification.</t>
</section>
</section>

<section anchor="verified-data-representation" title="Verified Data Representation">
<t>This extension to OpenID Connect wants to ensure that RPs cannot mix up verified and unverified Claims and incidentally process unverified Claims as verified Claims.</t>
<t>The representation proposed therefore provides the RP with the verified Claims within a container element <spanx style="verb">verified_claims</spanx>. This container is composed of the verification evidence related to a certain verification process and the corresponding Claims about the End-User which were verified in this process.</t>
<t>This section explains the structure and meaning of <spanx style="verb">verified_claims</spanx> in detail. A machine-readable syntax definition is given as JSON schema in <xref target="json_schema"></xref>. It can be used to automatically validate JSON documents containing a  <spanx style="verb">verified_claims</spanx> element.</t>
<t><spanx style="verb">verified_claims</spanx> consists of the following sub-elements:</t>
<t>
<list style="symbols">
<t><spanx style="verb">verification</spanx>: REQUIRED. Object that contains all data about the verification process.</t>
<t><spanx style="verb">claims</spanx>: REQUIRED. Object that is the container for the verified Claims about the End-User.</t>
</list>
</t>
<t>Note: implementations MUST ignore any sub-element not defined in this specification or extensions of this specification.</t>

<section anchor="verification" title="verification Element">
<t>This element contains the information about the process conducted to verify a person's identity and bind the respective person data to a user account.</t>
<t>The <spanx style="verb">verification</spanx> element consists of the following elements:</t>
<t><spanx style="verb">trust_framework</spanx>: REQUIRED. String determing the trust framework governing the identity verification process and the identity assurance level of the OP.</t>
<t>An example value is <spanx style="verb">eidas_ial_high</spanx>, which denotes a notified eID system under eIDAS <xref target="eIDAS"></xref> providing identity assurance at level of assurance &quot;High&quot;.</t>
<t>An initial list of standardized values is defined in <eref target="#predefined_values_tf">Trust Frameworks</eref>. Additional trust framework identifiers can be introduced [how?]. RPs SHOULD ignore <spanx style="verb">verified_claims</spanx> claims containing a trust framework id they don't understand.</t>
<t>The <spanx style="verb">trust_framework</spanx> value determines what further data is provided to the RP in the <spanx style="verb">verification</spanx> element. A notified eID system under eIDAS, for example, would not need to provide any further data whereas an OP not governed by eIDAS would need to provide verification evidence in order to allow the RP to fulfill its legal obligations. An example of the latter is an OP acting under the German Anti-Money laundering law (<spanx style="verb">de_aml</spanx>).</t>
<t><spanx style="verb">time</spanx>: Time stamp in ISO 8601:2004 [ISO8601-2004] <spanx style="verb">YYYY-MM-DDThh:mm:ss±hh</spanx> format representing the date and time when identity verification took place. Presence of this element might be required for certain trust frameworks.</t>
<t><spanx style="verb">verification_process</spanx>: Unique reference to the identity verification process as performed by the OP. Used for backtracing in case of disputes or audits. Presence of this element might be required for certain trust frameworks.</t>
<t>Note: While <spanx style="verb">verification_process</spanx> refers to the identity verification process at the OP, the <spanx style="verb">txn</spanx> claim refers to a particular OpenID Connect transaction in which the OP attested the user's verified identity data towards a RP.</t>
<t><spanx style="verb">evidence</spanx> is a JSON array containing information about the evidence the OP used to verify the user's identity as separate JSON objects. Every object contains the property <spanx style="verb">type</spanx> which determines the type of the evidence. The RP uses this information to process the <spanx style="verb">evidence</spanx> property appropriately.</t>
<t>Important: implementations MUST ignore any sub-element not defined in this specification or extensions of this specification.</t>

<section anchor="evidence" title="Evidence">
<t>The following types of evidence are defined:</t>
<t>
<list style="symbols">
<t><spanx style="verb">id_document</spanx>: verification based on any kind of government issued identity document</t>
<t><spanx style="verb">utility_bill</spanx>: verification based on a utility bill</t>
<t><spanx style="verb">qes</spanx>: verification based on a eIDAS Qualified Electronic Signature</t>
</list>
</t>

<section anchor="id-document" title="id_document">
<t>The following elements are contained in an <spanx style="verb">id_document</spanx> evidence sub-element.</t>
<t><spanx style="verb">method</spanx>: REQUIRED. The method used to verify the id document. Predefined values are given in  <eref target="#predefined_values_vm">Verification Methods</eref></t>
<t><spanx style="verb">verifier</spanx>: OPTIONAL. A JSON object denoting the legal entity that performed the identity verification on behalf of the OP. This object SHOULD only be included if the OP did not perform the identity verification itself. This object consists of the following properties:</t>
<t>
<list style="symbols">
<t><spanx style="verb">organization</spanx>: String denoting the organization which performed the verification on behalf of the OP.</t>
<t><spanx style="verb">txn</spanx>: identifier refering to the identity verification transaction. This transaction identifier can be resolved into transaction details during an audit.</t>
</list>
</t>
<t><spanx style="verb">time</spanx>: Time stamp in ISO 8601:2004 [ISO8601-2004] <spanx style="verb">YYYY-MM-DDThh:mm:ss±hh</spanx> format representing the date when this id document was verified.</t>
<t><spanx style="verb">document</spanx>: A JSON object representing the id document used to perform the id verification. It consists of the following properties:</t>
<t>
<list style="symbols">
<t><spanx style="verb">type</spanx>: REQUIRED. String denoting the type of the id document. Standardized values are defined in <eref target="#predefined_values_idd">Identity Documents</eref>. The OP MAY use other than the predefined values in which case the RPs will either be unable to process the assertion, just store this value for audit purposes, or apply bespoken business logic to it.</t>
<t><spanx style="verb">number</spanx>: String representing the number of the identity document.</t>
<t><spanx style="verb">issuer</spanx>: A JSON object containg information about the issuer of this identity document. This object consists of the following properties:
<list style="symbols">
<t><spanx style="verb">name</spanx>: REQUIRED. Designation of the issuer of the identity document</t>
<t><spanx style="verb">country</spanx>: String denoting the country or organization that issued the document as ICAO 2-letter-code <xref target="ICAO-Doc9303"></xref>, e.g. &quot;JP&quot;. ICAO 3-letter codes MAY be used when there is no corresponding ISO 2-letter code, such as &quot;UNO&quot;.</t>
</list></t>
<t><spanx style="verb">date_of_issuance</spanx>: REQUIRED if this attribute exists for the particular type of document. The date the document was issued as ISO 8601:2004 YYYY-MM-DD format.</t>
<t><spanx style="verb">date_of_expiry</spanx>: REQUIRED if this attribute exists for the particular type of document. The date the document will expire as ISO 8601:2004 YYYY-MM-DD format.</t>
</list>
</t>
</section>

<section anchor="utility-bill" title="utility_bill">
<t>The following elements are contained in a <spanx style="verb">utility_bill</spanx> evidence sub-element.</t>
<t><spanx style="verb">provider</spanx>: REQUIRED. A JSON object identifying the respective provider that issued the bill. The object consists of the following properties:</t>
<t>
<list style="symbols">
<t><spanx style="verb">name</spanx>: A String designating the provider.</t>
<t>All elements of the OpenID Connect <spanx style="verb">address</spanx> Claim (<xref target="OpenID"></xref>)</t>
</list>
</t>
<t><spanx style="verb">date</spanx>: A ISO 8601:2004 YYYY-MM-DD formatted string containing the date when this bill was issued.</t>
</section>

<section anchor="qes" title="qes">
<t>The following elements are contained in a <spanx style="verb">qes</spanx> evidence sub-element.</t>
<t><spanx style="verb">issuer</spanx>: REQUIRED. A String denoting the certification authority that issued the signer's certificate.</t>
<t><spanx style="verb">serial_number</spanx>: REQUIRED. String containing the serial number of the certificate used to sign.</t>
<t><spanx style="verb">created_at</spanx>: REQUIRED. The time the signature was created as ISO 8601:2004 YYYY-MM-DDThh:mm:ss±hh format.</t>
</section>
</section>
</section>

<section anchor="claimselement" title="claims Element">
<t>The <spanx style="verb">claims</spanx> element contains the claims about the End-User which were verified by the process and according to the policies determined by the corresponding <spanx style="verb">verification</spanx> element.</t>
<t>The <spanx style="verb">claims</spanx> element MAY contain one or more of the following Claims as defined in Section 5.1 of the OpenID Connect specification <xref target="OpenID"></xref></t>
<t>
<list style="symbols">
<t><spanx style="verb">name</spanx></t>
<t><spanx style="verb">given_name</spanx></t>
<t><spanx style="verb">middle_name</spanx></t>
<t><spanx style="verb">family_name</spanx></t>
<t><spanx style="verb">birthdate</spanx></t>
<t><spanx style="verb">address</spanx></t>
</list>
</t>
<t>or the claims defined in <xref target="userclaims"></xref>.</t>
<t>The <spanx style="verb">claims</spanx> element MAY also contain other claims given the value of the respective claim was verified in the verification process represented by the sibling <spanx style="verb">verification</spanx> element.</t>
<t>Claim names MAY be annotated with language tags as specified in Section 5.2 of the OpenID Connect specification <xref target="OpenID"></xref>.</t>
</section>
</section>

<section anchor="requesting-verified-claims" title="Requesting Verified Claims">

<section anchor="req_claims" title="Requesting End-User Claims">
<t>Verified Claims can be requested on the level of individual Claims about the End-User by utilizing the <spanx style="verb">claims</spanx> parameter as defined in Section 5.5. of the OpenID Connect specification <xref target="OpenID"></xref>.</t>
<t><spanx style="verb">verified_claims</spanx> is added to the <spanx style="verb">userinfo</spanx> or <spanx style="verb">id_token</spanx> element of the <spanx style="verb">claims</spanx> parameter.</t>
<t>Since <spanx style="verb">verified_claims</spanx> contains the effective Claims about the End-User in a nested <spanx style="verb">claims</spanx> element, the syntax is extended to include expressions on nested elements as follows. The <spanx style="verb">verified_claims</spanx> element includes a <spanx style="verb">claims</spanx> element, which in turn includes the desired Claims as keys with a <spanx style="verb">null</spanx> value. An example is shown in the following:</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
      &quot;verified_claims&quot;:{  
         &quot;claims&quot;:{  
            &quot;given_name&quot;:null,
            &quot;family_name&quot;:null,
            &quot;birthdate&quot;:null
         }
      }
   }	
}
</artwork></figure>

<t>Use of the <spanx style="verb">claims</spanx> parameter allows the RP to exactly select the Claims about the End-User needed for its use case. This extension therefore allows RPs to fulfill the requirement for data minimization.</t>
<t>RPs MAY indicate that a certain Claim is essential to the successful completion of the user journey by utilizing the <spanx style="verb">essential</spanx> field as defined in Section 5.5.1. of the OpenID Connect specification <xref target="OpenID"></xref>. The following example designates both given as well as family name as being essential.</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
      &quot;verified_claims&quot;:{  
         &quot;claims&quot;:{  
            &quot;given_name&quot;:{&quot;essential&quot;: true},
            &quot;family_name&quot;:{&quot;essential&quot;: true},
            &quot;birthdate&quot;:null
         }
      }
   }	
}
</artwork></figure>

<t>This specification introduces the additional field <spanx style="verb">purpose</spanx> to allow a RP
to state the purpose for the transfer of a certain End-User Claim it is asking for.
The field <spanx style="verb">purpose</spanx> can be a member value of each individually requested
Claim, but a Claim cannot have more than one associated purpose.</t>
<t><spanx style="verb">purpose</spanx> OPTIONAL. String describing the purpose for obtaining a certain End-User Claim from the OP. The purpose MUST NOT be shorter than 3 characters or
longer than 300 characters. If this rule is violated, the authentication
request MUST fail and the OP returns an error <spanx style="verb">invalid_request</spanx> to the RP.
The OP MUST display this purpose in the respective user consent screen(s)
in order to inform the user about the designated use of the data to be
transferred or the authorization to be approved. If the parameter <spanx style="verb">purpose</spanx>
is not present in the request, the OP MAY display a
value that was pre-configured for the respective RP. For details on UI
localization see <xref target="purpose"></xref>.</t>
<t>Example:</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
      &quot;verified_claims&quot;:{  
         &quot;claims&quot;:{  
            &quot;given_name&quot;:{  
               &quot;essential&quot;:true,
               &quot;purpose&quot;:&quot;To make communication look more personal&quot;
            },
            &quot;family_name&quot;:{  
               &quot;essential&quot;:true
            },
            &quot;birthdate&quot;:{  
               &quot;purpose&quot;:&quot;To send you best wishes on your birthday&quot;
            }
         }
      }
   }
}
</artwork></figure>

<t>Note: A <spanx style="verb">claims</spanx> sub-element with value <spanx style="verb">null</spanx> is interpreted as a request for all possible Claims. An example is shown in the following:</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
      &quot;verified_claims&quot;:{  
         &quot;claims&quot;:null
      }
   }	
}
</artwork></figure>

<t>Note: The <spanx style="verb">claims</spanx> sub-element can be omitted, which is equivalent to a <spanx style="verb">claims</spanx> element whose value is <spanx style="verb">null</spanx>.</t>
<t>Note: If the <spanx style="verb">claims</spanx> sub-element is empty or contains a Claim not fulfilling the requirements defined in <xref target="claimselement"></xref>, the OP will abort the transaction with an <spanx style="verb">invalid_request</spanx> error.</t>
</section>

<section anchor="req_verification" title="Requesting Verification Data">
<t>The content of the <spanx style="verb">verification</spanx> element is basically determined by the respective <spanx style="verb">trust_framework</spanx> and the Claim source's policy.</t>
<t>This specification also defines a way for the RP to explicitly request certain data to be present in the <spanx style="verb">verification</spanx> element. The syntax is based on the rules given in <xref target="req_claims"></xref> and extends them for navigation into the structure of the <spanx style="verb">verification</spanx> element.</t>
<t>Elements within <spanx style="verb">verification</spanx> can be requested in the same way as defined in <xref target="req_claims"></xref> by adding the respective element as shown in the following example:</t>

<figure><artwork type="json">{  
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;date&quot;:null,
         &quot;evidence&quot;:null
      },
      &quot;claims&quot;:null
   }
}
</artwork></figure>

<t>It requests the date of the verification and the available evidence to be present in the issued assertion.</t>
<t>Note: the RP does not need to explicitly request the <spanx style="verb">trust_framework</spanx> field as it is a mandatory element of the <spanx style="verb">verified_claims</spanx> Claim.</t>
<t>The RP may also dig one step deeper into the structure and request certain data to be present within every <spanx style="verb">evidence</spanx>. A single entry is used as prototype for all entries in the result array:</t>

<figure><artwork type="json">{  
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;date&quot;:null,
         &quot;evidence&quot;:[  
            {  
               &quot;method&quot;:null,
               &quot;document&quot;:null
            }
         ]
      },
      &quot;claims&quot;:null
   }
}
</artwork></figure>

<t>This example requests the <spanx style="verb">method</spanx> element and the <spanx style="verb">document</spanx> element for every evidence available for a certain user account.</t>
<t>Note: the RP does not need to explicitly request the <spanx style="verb">type</spanx> field as it is a mandatory element of any <spanx style="verb">evidence</spanx> entry.</t>
<t>The RP may also request certain data within the <spanx style="verb">document</spanx> element to be present. This again follows the syntax rules used above.</t>

<figure><artwork type="json">{  
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;date&quot;:null,
         &quot;evidence&quot;:[  
            {  
               &quot;method&quot;:null,
               &quot;document&quot;:{  
                  &quot;issuer&quot;:null,
                  &quot;number&quot;:null,
                  &quot;date_of_issuance&quot;:null
               }
            }
         ]
      },
      &quot;claims&quot;:null
   }
}
</artwork></figure>

<t>Note: the RP does not need to explicitly request the <spanx style="verb">type</spanx> field as it is a mandatory element of any <spanx style="verb">document</spanx> entry.</t>
<t>It is at the discretion of the Claim source to decide whether the requested verification data is provided to the RP.</t>
</section>

<section anchor="constraintedclaims" title="Defining constraints on Verification Data">
<t>The RP MAY express requirements regarding the elements in the <spanx style="verb">verification</spanx> sub-element.</t>
<t>This, again, requires an extension to the syntax as defined in Section 5.5. of the OpenID Connect specification <xref target="OpenID"></xref> due to the nested nature of the <spanx style="verb">verified_claims</spanx> claim.</t>
<t>Section 5.5.1 of the OpenID Connect specification <xref target="OpenID"></xref> defines a query syntax that allows for the member value of the Claim being requested to be a JSON object with additional information/constraints on the Claim. For doing so it defines three members (<spanx style="verb">essential</spanx>, <spanx style="verb">value</spanx> and <spanx style="verb">values</spanx>) with special query
meanings and allows for other special members to be defined (while stating that any members that are not understood must be ignored).</t>
<t>This specification re-uses that mechanism and introduces a new such member <spanx style="verb">max_age</spanx> (see below).</t>
<t>To start with, the RP MAY limit the possible values of the elements <spanx style="verb">trust_framework</spanx>, <spanx style="verb">evidence/type</spanx>, <spanx style="verb">evidence/method</spanx>, and <spanx style="verb">evidence/document/type</spanx> by utilizing the <spanx style="verb">value</spanx> or <spanx style="verb">values</spanx> fields.</t>
<t>The following example shows that the RP wants to obtain an attestation based on AML and limited to users who were identified in a bank branch in person using government issued id documents.</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
      &quot;verified_claims&quot;:{  
         &quot;verification&quot;:{  
            &quot;trust_framework&quot;:{  
               &quot;value&quot;:&quot;de_aml&quot;
            },
            &quot;evidence&quot;:[  
               {  
                  &quot;type&quot;:{  
                     &quot;value&quot;:&quot;id_document&quot;
                  },
                  &quot;method&quot;:{  
                     &quot;value&quot;:&quot;pipp&quot;
                  },
                  &quot;document&quot;:{  
                     &quot;type&quot;:{  
                        &quot;values&quot;:[  
                           &quot;idcard&quot;,
                           &quot;passport&quot;
                        ]
                     }
                  }
               }
            ]
         },
         &quot;claims&quot;:null
      }
   }
}
</artwork></figure>

<t>The RP MAY also express a requirement regarding the age of the verification data, i.e., the time elapsed since the verification process asserted in the <spanx style="verb">verification</spanx> element has taken place.</t>
<t>This specification therefore defines a new member <spanx style="verb">max_age</spanx>.</t>
<t><spanx style="verb">max_age</spanx>: OPTIONAL. Is a JSON number value only applicable to Claims that contain dates or timestamps. It defines the maximum time (in seconds) to be allowed to elapse since the value of the date/timestamp up to the point in time of the request. The OP should make the calculation of elapsed time starting from the last valid second of the date value. The following is an example of a request for Claims where the verification process of the data is not allowed to be older than 63113852 seconds.</t>
<t>The following is an example:</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
      &quot;verified_claims&quot;:{  
         &quot;verification&quot;:{  
            &quot;date&quot;:{  
               &quot;max_age&quot;:63113852
            }
         },
         &quot;claims&quot;:null
      }
   }
}
</artwork></figure>

<t>The OP SHOULD try to fulfill this requirement. If the verification data of the user is older than the requested <spanx style="verb">max_age</spanx>, the OP MAY attempt to refresh the user’s verification by sending her through a online identity verification process, e.g. by utilizing an electronic ID card or a video identification approach.</t>
<t>If the OP is unable to fulfill the requirement (even in case it is marked as being <spanx style="verb">essential</spanx>), it will provide the RP with the data available and the RP may decide how to use the data. The OP MUST NOT return an error in case it cannot return all Claims requested as essential Claims.</t>
</section>
</section>

<section anchor="examples" title="Examples">
<t>The following sections show examples of <spanx style="verb">verified_claims</spanx>.</t>
<t>The first and second section show JSON snippets of the general identity assurance case, where the RP is provided with verification evidence for different verification methods along with the actual Claims about the End-User.</t>
<t>The third section illustrates how the contents of this object could look like in case of a notified eID system under eIDAS, where the OP does not need to provide evidence of the identity verification process to the RP.</t>
<t>Subsequent sections contain examples for using the <spanx style="verb">verified_claims</spanx> Claim on different channels and in combination with other (unverified) Claims.</t>

<section anchor="id-document-1" title="id_document">

<figure><artwork type="JSON">{  
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;trust_framework&quot;:&quot;de_aml&quot;,
         &quot;time&quot;:&quot;2012-04-23T18:25:43.511+01&quot;,
         &quot;verification_process&quot;:&quot;676q3636461467647q8498785747q487&quot;,
         &quot;evidence&quot;:[  
            {  
               &quot;type&quot;:&quot;id_document&quot;,
               &quot;method&quot;:&quot;pipp&quot;,
               &quot;document&quot;:{  
                  &quot;type&quot;:&quot;idcard&quot;,
                  &quot;issuer&quot;:{  
                     &quot;name&quot;:&quot;Stadt Augsburg&quot;,
                     &quot;country&quot;:&quot;DE&quot;
                  },
                  &quot;number&quot;:&quot;53554554&quot;,
                  &quot;date_of_issuance&quot;:&quot;2012-04-23&quot;,
                  &quot;date_of_expiry&quot;:&quot;2022-04-22&quot;
               }
            }
         ]
      },
      &quot;claims&quot;:{  
         &quot;given_name&quot;:&quot;Max&quot;,
         &quot;family_name&quot;:&quot;Meier&quot;,
         &quot;birthdate&quot;:&quot;1956-01-28&quot;,
         &quot;place_of_birth&quot;:{  
            &quot;country&quot;:&quot;DE&quot;,
            &quot;locality&quot;:&quot;Musterstadt&quot;
         },
         &quot;nationality&quot;:&quot;DE&quot;,
         &quot;address&quot;:{  
            &quot;locality&quot;:&quot;Maxstadt&quot;,
            &quot;postal_code&quot;:&quot;12344&quot;,
            &quot;country&quot;:&quot;DE&quot;,
            &quot;street_address&quot;:&quot;An der Sanddüne 22&quot;
         }
      }
   }
}
</artwork></figure>

</section>

<section anchor="id-document-utility-bill" title="id_document + utility bill">

<figure><artwork type="JSON">{  
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;trust_framework&quot;:&quot;de_aml&quot;,
         &quot;time&quot;:&quot;2012-04-23T18:25:43.511+01&quot;,
         &quot;verification_process&quot;:&quot;676q3636461467647q8498785747q487&quot;,
         &quot;evidence&quot;:[  
            {  
               &quot;type&quot;:&quot;id_document&quot;,
               &quot;method&quot;:&quot;pipp&quot;,
               &quot;document&quot;:{  
                  &quot;document_type&quot;:&quot;de_erp_replacement_idcard&quot;,
                  &quot;issuer&quot;:{  
                     &quot;name&quot;:&quot;Stadt Augsburg&quot;,
                     &quot;country&quot;:&quot;DE&quot;
                  },
                  &quot;number&quot;:&quot;53554554&quot;,
                  &quot;date_of_issuance&quot;:&quot;2012-04-23&quot;,
                  &quot;date_of_expiry&quot;:&quot;2022-04-22&quot;
               }
            },
            {  
               &quot;type&quot;:&quot;utility_bill&quot;,
               &quot;provider&quot;:{  
                  &quot;name&quot;:&quot;Stadtwerke Musterstadt&quot;,
                  &quot;country&quot;:&quot;DE&quot;,
                  &quot;region&quot;:&quot;Thüringen&quot;,
                  &quot;street_address&quot;:&quot;Energiestrasse 33&quot;
               },
               &quot;date&quot;:&quot;2013-01-31&quot;
            }
         ]
      },
      &quot;claims&quot;:{  
         &quot;given_name&quot;:&quot;Max&quot;,
         &quot;family_name&quot;:&quot;Meier&quot;,
         &quot;birthdate&quot;:&quot;1956-01-28&quot;,
         &quot;place_of_birth&quot;:{  
            &quot;country&quot;:&quot;DE&quot;,
            &quot;locality&quot;:&quot;Musterstadt&quot;
         },
         &quot;nationality&quot;:&quot;DE&quot;,
         &quot;address&quot;:{  
            &quot;locality&quot;:&quot;Maxstadt&quot;,
            &quot;postal_code&quot;:&quot;12344&quot;,
            &quot;country&quot;:&quot;DE&quot;,
            &quot;street_address&quot;:&quot;An der Sanddüne 22&quot;
         }
      }
   }
}
</artwork></figure>

</section>

<section anchor="notified-eid-system-eidas" title="Notified eID system (eIDAS)">

<figure><artwork type="JSON">{  
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;trust_framework&quot;:&quot;eidas_ial_substantial&quot;
      },
      &quot;claims&quot;:{  
         &quot;given_name&quot;:&quot;Max&quot;,
         &quot;family_name&quot;:&quot;Meier&quot;,
         &quot;birthdate&quot;:&quot;1956-01-28&quot;,
         &quot;place_of_birth&quot;:{  
            &quot;country&quot;:&quot;DE&quot;,
            &quot;locality&quot;:&quot;Musterstadt&quot;
         },
         &quot;nationality&quot;:&quot;DE&quot;,
         &quot;address&quot;:{  
            &quot;locality&quot;:&quot;Maxstadt&quot;,
            &quot;postal_code&quot;:&quot;12344&quot;,
            &quot;country&quot;:&quot;DE&quot;,
            &quot;street_address&quot;:&quot;An der Sanddüne 22&quot;
         }
      }
   }
}
</artwork></figure>

</section>

<section anchor="verified-claims-in-userinfo-response" title="Verified Claims in UserInfo Response">

<section anchor="request" title="Request">
<t>In this example we assume the RP uses the <spanx style="verb">scope</spanx> parameter to request the email address and, additionally, the <spanx style="verb">claims</spanx> parameter, to request verified Claims.</t>
<t>The scope value is: <spanx style="verb">scope=openid email</spanx></t>
<t>The value of the <spanx style="verb">claims</spanx> parameter is:</t>

<figure><artwork type="json">{  
   &quot;userinfo&quot;:{  
       &quot;verified_claims&quot;:{  
         &quot;claims&quot;:{  
            &quot;given_name&quot;:null,
            &quot;family_name&quot;:null,
            &quot;birthdate&quot;:null
         }
      }
   }	
}
</artwork></figure>

</section>

<section anchor="userinfo-response" title="UserInfo Response">
<t>The respective UserInfo response would be</t>

<figure><artwork type="http">HTTP/1.1 200 OK
Content-Type: application/json

{  
   &quot;iss&quot;:&quot;https://server.example.com&quot;,
   &quot;sub&quot;:&quot;248289761001&quot;,
   &quot;email&quot;:&quot;janedoe@example.com&quot;,
   &quot;email_verified&quot;:true,
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;trust_framework&quot;:&quot;de_aml&quot;,
         &quot;time&quot;:&quot;2012-04-23T18:25:43.511+01&quot;,
         &quot;verification_process&quot;:&quot;676q3636461467647q8498785747q487&quot;,
         &quot;evidence&quot;:[  
            {  
               &quot;type&quot;:&quot;id_document&quot;,
               &quot;method&quot;:&quot;pipp&quot;,
               &quot;document&quot;:{  
                  &quot;type&quot;:&quot;idcard&quot;,
                  &quot;issuer&quot;:{  
                     &quot;name&quot;:&quot;Stadt Augsburg&quot;,
                     &quot;country&quot;:&quot;DE&quot;
                  },
                  &quot;number&quot;:&quot;53554554&quot;,
                  &quot;date_of_issuance&quot;:&quot;2012-04-23&quot;,
                  &quot;date_of_expiry&quot;:&quot;2022-04-22&quot;
               }
            }
         ]
      },
      &quot;claims&quot;:{  
         &quot;given_name&quot;:&quot;Max&quot;,
         &quot;family_name&quot;:&quot;Meier&quot;,
         &quot;birthdate&quot;:&quot;1956-01-28&quot;
      }
   }
}
</artwork></figure>

</section>
</section>

<section anchor="verified-claims-in-id-tokens" title="Verified Claims in ID Tokens">

<section anchor="request-1" title="Request">
<t>In this case, the RP requests verified Claims along with other Claims about the End-User in the <spanx style="verb">claims</spanx> parameter and allocates the response to the ID Token (delivered from the token endpoint in case of grant type <spanx style="verb">code</spanx>).</t>
<t>The <spanx style="verb">claims</spanx> parameter value is</t>

<figure><artwork type="json">{  
   &quot;id_token&quot;:{  
      &quot;email&quot;:null,
      &quot;preferred_username&quot;:null,
      &quot;picture&quot;:null,
      &quot;verified_claims&quot;:{  
         &quot;claims&quot;:{  
            &quot;given_name&quot;:null,
            &quot;family_name&quot;:null,
            &quot;birthdate&quot;:null
         }
      }
   }
}
</artwork></figure>

</section>

<section anchor="id-token" title="ID Token">
<t>The respective ID Token could be</t>

<figure><artwork type="json">{  
   &quot;iss&quot;:&quot;https://server.example.com&quot;,
   &quot;sub&quot;:&quot;24400320&quot;,
   &quot;aud&quot;:&quot;s6BhdRkqt3&quot;,
   &quot;nonce&quot;:&quot;n-0S6_WzA2Mj&quot;,
   &quot;exp&quot;:1311281970,
   &quot;iat&quot;:1311280970,
   &quot;auth_time&quot;:1311280969,
   &quot;acr&quot;:&quot;urn:mace:incommon:iap:silver&quot;,
   &quot;email&quot;:&quot;janedoe@example.com&quot;,
   &quot;preferred_username&quot;:&quot;j.doe&quot;,
   &quot;picture&quot;:&quot;http://example.com/janedoe/me.jpg&quot;,
   &quot;verified_claims&quot;:{  
      &quot;verification&quot;:{  
         &quot;trust_framework&quot;:&quot;de_aml&quot;,
         &quot;time&quot;:&quot;2012-04-23T18:25:43.511+01&quot;,
         &quot;verification_process&quot;:&quot;676q3636461467647q8498785747q487&quot;,
         &quot;evidence&quot;:[  
            {  
               &quot;type&quot;:&quot;id_document&quot;,
               &quot;method&quot;:&quot;pipp&quot;,
               &quot;document&quot;:{  
                  &quot;type&quot;:&quot;idcard&quot;,
                  &quot;issuer&quot;:{  
                     &quot;name&quot;:&quot;Stadt Augsburg&quot;,
                     &quot;country&quot;:&quot;DE&quot;
                  },
                  &quot;number&quot;:&quot;53554554&quot;,
                  &quot;date_of_issuance&quot;:&quot;2012-04-23&quot;,
                  &quot;date_of_expiry&quot;:&quot;2022-04-22&quot;
               }
            }
         ]
      },
      &quot;claims&quot;:{  
         &quot;given_name&quot;:&quot;Max&quot;,
         &quot;family_name&quot;:&quot;Meier&quot;,
         &quot;birthdate&quot;:&quot;1956-01-28&quot;
      }
   }
}
</artwork></figure>

</section>
</section>

<section anchor="aggregated-claims" title="Aggregated Claims">
<t>Note: line breaks for display purposes only</t>

<figure><artwork type="http">HTTP/1.1 200 OK
Content-Type: application/json

{ 
   &quot;iss&quot;:&quot;https://server.example.com&quot;, 
   &quot;sub&quot;:&quot;248289761001&quot;,
   &quot;email&quot;:&quot;janedoe@example.com&quot;,
   &quot;email_verified&quot;:true,
   &quot;_claim_names&quot;:{  
      &quot;verified_claims&quot;:&quot;src1&quot;
   },
   &quot;_claim_sources&quot;:{  
      &quot;src1&quot;:{  
      &quot;JWT&quot;:&quot;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3NlcnZlci5vdGh
      lcm9wLmNvbSIsInZlcmlmaWVkX2NsYWltcyI6eyJ2ZXJpZmljYXRpb24iOnsidHJ1c3RfZnJhbWV3b3
      JrIjoiZWlkYXNfaWFsX3N1YnN0YW50aWFsIn0sImNsYWltcyI6eyJnaXZlbl9uYW1lIjoiTWF4IiwiZ
      mFtaWx5X25hbWUiOiJNZWllciIsImJpcnRoZGF0ZSI6IjE5NTYtMDEtMjgifX19.M8tTKxzj5LBgqGj
      UAzFooEiCPJ4wcZVQDrnW5_ooAG4&quot;
      }
   }
}
</artwork></figure>

</section>

<section anchor="distributed-claims" title="Distributed Claims">

<figure><artwork type="http">HTTP/1.1 200 OK
Content-Type: application/json

{
   &quot;iss&quot;:&quot;https://server.example.com&quot;,  
   &quot;sub&quot;:&quot;248289761001&quot;,
   &quot;email&quot;:&quot;janedoe@example.com&quot;,
   &quot;email_verified&quot;:true,
   &quot;_claim_names&quot;:{  
      &quot;verified_claims&quot;:&quot;src1&quot;
   },
   &quot;_claim_sources&quot;:{  
      &quot;src1&quot;:{  
         &quot;endpoint&quot;:&quot;https://server.yetanotherop.com/claim_source&quot;,
         &quot;access_token&quot;:&quot;ksj3n283dkeafb76cdef&quot;
      }
   }
}
</artwork></figure>

</section>
</section>

<section anchor="opmetadata" title="OP Metadata">
<t>The OP advertises its capabilities with respect to verified Claims in its openid-configuration (see <xref target="OpenID-Discovery"></xref>) using the following new elements:</t>
<t><spanx style="verb">verified_claims_supported</spanx>: Boolean value indicating support for <spanx style="verb">verified_claims</spanx>, i.e. the OpenID Connect for Identity Assurance extension.</t>
<t><spanx style="verb">trust_frameworks_supported</spanx> This is a JSON array containing all supported trust frameworks.</t>
<t><spanx style="verb">evidence_supported</spanx> This JSON array contains all types of identity evidence the OP uses.</t>
<t><spanx style="verb">id_documents_supported</spanx> This JSON array contains all identity documents utilized by the OP for identity verification.</t>
<t><spanx style="verb">id_documents_verification_methods_supported</spanx> This element is a JSON array containing the id document verification methods a OP supports as defined in <xref target="verification"></xref>.</t>
<t><spanx style="verb">claims_in_verified_claims_supported</spanx> This JSON array contains all claims supported within <spanx style="verb">verified_claims</spanx>.</t>
<t>This is an example openid-configuration snippet:</t>

<figure><artwork type="json">{  
...
   &quot;verified_claims_supported&quot;:true,
   &quot;trust_frameworks_supported&quot;:[
     &quot;nist_800_63A_ial_2&quot;,
     &quot;nist_800_63A_ial_3&quot;
   ],
   &quot;evidence_supported&quot;:[
      &quot;id_document&quot;,
      &quot;utility_bill&quot;,
      &quot;qes&quot;
   ]
   &quot;id_documents_supported&quot;:[  
       &quot;idcard&quot;,
       &quot;passport&quot;,
       &quot;driving_permit&quot;
   ]
   &quot;id_documents_verification_methods_supported&quot;:[  
       &quot;pipp&quot;,
       &quot;sripp&quot;,
       &quot;eid&quot;
   ]
   &quot;claims_in_verified_claims_supported&quot;:[  
      &quot;given_name&quot;,
      &quot;family_name&quot;,
      &quot;birthdate&quot;,
      &quot;place_of_birth&quot;,
      &quot;nationality&quot;,
      &quot;address&quot;
   ],
...
}
</artwork></figure>

<t>The OP MUST support the <spanx style="verb">claims</spanx> parameter and needs to publish this in its openid-configuration using the <spanx style="verb">claims_parameter_supported</spanx> element.</t>
</section>

<section anchor="purpose" title="Transaction-specific Purpose">
<t>This specification introduces the request parameter <spanx style="verb">purpose</spanx> to allow a RP
to state the purpose for the transfer of user data it is asking for.</t>
<t><spanx style="verb">purpose</spanx> OPTIONAL. String describing the purpose for obtaining certain user data from the OP. The purpose MUST NOT be shorter than 3 characters and MUST NOT be longer than 300 characters. If these rules are violated, the authentication request MUST fail and the OP returns an error <spanx style="verb">invalid_request</spanx> to the RP.</t>
<t>The OP MUST display this purpose in the respective user consent screen(s) in order to inform the user about the designated use of the data to be transferred or the authorization to be approved.</t>
<t>In order to ensure a consistent UX, the RP MAY send the <spanx style="verb">purpose</spanx> in a certain language and request the OP to use the same language using the <spanx style="verb">ui_locales</spanx> parameter.</t>
<t>If the parameter <spanx style="verb">purpose</spanx> is not present in the request, the OP MAY utilize a description that was pre-configured for the respective RP.</t>
<t>Note: In order to prevent injection attacks, the OP MUST escape the text appropriately before it will be shown in a user interface. The OP MUST expect special characters in the URL decoded purpose text provided by the RP. The OP MUST ensure that any special characters in the purpose text cannot be used to inject code into the web interface of the OP (e.g., cross-site scripting, defacing). Proper escaping MUST be applied by the OP. The OP SHALL NOT remove characters from the purpose text to this end.</t>
</section>

<section anchor="Privacy" title="Privacy Consideration">
<t>OP and RP MUST establish a legal basis before exchanging any personally identifiable information. It can be established upfront or in the course of the OpenID process.</t>
</section>

<section anchor="Security" title="Security Considerations">
<t>The integrity and authenticity of the issued assertions MUST be ensured in order to prevent identity spoofing. The Claims source MUST therefore cryptographically sign all assertions.</t>
<t>The confidentiality of all user data exchanged between the protocol parties MUST be ensured using suitable methods at transport or application layer.</t>
</section>

<section anchor="predefined_values" title="Predefined Values">

<section anchor="predefined_values_tf" title="Trust Frameworks">
<t>This section defines trust framework identifiers for use with this specification.</t>
<texttable>
<ttcol align="left">Identifier</ttcol>
<ttcol align="left">Definition</ttcol>


<c>de_aml</c>
<c>The OP verifies and maintains user identities in conforms with the German Anti-Money Laundering Law.</c>

<c>eidas_ial_substantial</c>
<c>The OP is able to attest user identities in accordance with the EU regulation No 910/2014 (eIDAS) at the identitfication assurance level &quot;Substantial&quot;.</c>

<c>eidas_ial_high</c>
<c>The OP is able to attest user identities in accordance with the EU regulation No 910/2014 (eIDAS) at the identitfication assurance level &quot;High&quot;.</c>

<c>nist_800_63A_ial_2</c>
<c>The OP is able to attest user identities in accordance with the NIST Special Publication 800-63A at the Identity Assurance Level 2.</c>

<c>nist_800_63A_ial_3</c>
<c>The OP is able to attest user identities in accordance with the NIST Special Publication 800-63A at the Identity Assurance Level 3.</c>

<c>jp_aml</c>
<c>The OP verifies and maintains user identities in conforms with the Japanese Act on Prevention of Transfer of Criminal Proceeds.</c>

<c>jp_mpiupa</c>
<c>The OP verifies and maintains user identities in conformance with the Japanese Act for Identification, etc. by Mobile Voice Communications Carriers of Their Subscribers, etc. and for Prevention of Improper Use of Mobile Voice Communications Services.</c>

</texttable></section>

<section anchor="predefined_values_idd" title="Identity Documents">
<t>This section defines identity document identifiers for use with this specification.</t>
<texttable>
<ttcol align="left">Identifier</ttcol>
<ttcol align="left">Definition</ttcol>


<c>idcard</c>
<c>An identity document issued by a country's government for the purpose of identifying a citizen.</c>

<c>passport</c>
<c>A passport is a travel document, usually issued by a country's government, that certifies the identity and nationality of its holder primarily for the purpose of international travel.<xref target="OxfordPassport"></xref></c>

<c>driving_permit</c>
<c>Official document permitting an individual to operate motorized vehicles. In the absence of a formal identity document, a driver's license may be accepted in many countries for identity verification.</c>

<c>de_idcard_foreigners</c>
<c>ID Card issued by the German government to foreign nationals.</c>

<c>de_emergency_idcard</c>
<c>ID Card issued by the German government to foreign nationals as passports replacement</c>

<c>de_erp</c>
<c>Electronic Resident Permit issued by the German government to foreign nationals</c>

<c>de_erp_replacement_idcard</c>
<c>Electronic Resident Permit issued by the German government to foreign nationals as replacement for another identity document</c>

<c>de_idcard_refugees</c>
<c>ID Card issued by the German government to refugees as passports replacement</c>

<c>de_idcard_apatrids</c>
<c>ID Card issued by the German government to apatrids as passports replacement</c>

<c>de_certificate_of_suspension_of_deportation</c>
<c>identity document issued to refugees in case of suspension of deportation that are marked as &quot;id card replacement&quot;</c>

<c>de_permission_to_reside</c>
<c>permission to reside issued by the German governed to foreign nationals appliying for asylum</c>

<c>de_replacement_idcard</c>
<c>ID Card replacement document issued by the German government to foreign nationals (see Act on the Residence, Economic Activity and Integration of Foreigners in the Federal Territory, Residence Act, Appendix D1 ID Card replacement according to § 48 Abs. 2 i.V.m. § 78a Abs. 4)</c>

<c>jp_drivers_license</c>
<c>Japanese drivers license</c>

<c>jp_residency_card_for_foreigner</c>
<c>Japanese residence card for foreigners.</c>

<c>jp_individual_number_card</c>
<c>Japanese national id card.</c>

<c>jp_permanent_residency_card_for_foreigner</c>
<c>Japanese special residency card for foreigners to permit permanently resident.</c>

<c>jp_health_insurance_card</c>
<c>Japanese health and insurance card.</c>

<c>jp_residency_card</c>
<c>Japanese residency card</c>

</texttable></section>

<section anchor="predefined_values_vm" title="Verification Methods">
<t>This section defines verification method identifiers for use with this specification.</t>
<texttable>
<ttcol align="left">Identifier</ttcol>
<ttcol>Definition</ttcol>


<c>pipp</c>
<c>Physical In-Person Proofing</c>

<c>sripp</c>
<c>Supervised remote In-Person Proofing</c>

<c>eid</c>
<c>Online verification of an electronic ID card</c>

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

<section anchor="json_schema" title="JSON Schema">
<t>This section contains the JSON Schema of assertions containing the <spanx style="verb">verified_claims</spanx> claim.</t>

<figure><artwork type="JSON">{
  &quot;$schema&quot;: &quot;http://json-schema.org/draft-07/schema#&quot;,
  &quot;definitions&quot;:{
    &quot;qes&quot;:{
      &quot;type&quot;:&quot;object&quot;,
      &quot;properties&quot;:{
        &quot;type&quot;:{
          &quot;type&quot;:&quot;string&quot;,
          &quot;enum&quot;:[
            &quot;qes&quot;
          ]
        },
        &quot;issuer&quot;:{
          &quot;type&quot;:&quot;string&quot;
        },
        &quot;serial_number&quot;:{
          &quot;type&quot;:&quot;string&quot;
        },
        &quot;created_at&quot;:{
          &quot;type&quot;:&quot;string&quot;,
          &quot;format&quot;:&quot;date&quot;
        }
      },
      &quot;required&quot;: [&quot;type&quot;,&quot;issuer&quot;,&quot;serial_number&quot;,&quot;issued_at&quot;]
    },
    &quot;utility_bill&quot;:{
      &quot;type&quot;:&quot;object&quot;,
      &quot;properties&quot;:{
        &quot;type&quot;:{
          &quot;type&quot;:&quot;string&quot;,
          &quot;enum&quot;:[
            &quot;utility_bill&quot;
          ]
        },
        &quot;provider&quot;:{
          &quot;type&quot;:&quot;object&quot;,
          &quot;properties&quot;:{
            &quot;name&quot;:{
              &quot;type&quot;:&quot;string&quot;
            },
            &quot;country&quot;:{
              &quot;type&quot;:&quot;string&quot;
            },
            &quot;region&quot;:{
              &quot;type&quot;:&quot;string&quot;
            },
            &quot;street_address&quot;:{
              &quot;type&quot;:&quot;string&quot;
            }
          }
        },
        &quot;date&quot;:{
          &quot;type&quot;:&quot;string&quot;
        }
      },
      &quot;required&quot;: [&quot;type&quot;,&quot;provider&quot;,&quot;date&quot;]
    },
    &quot;id_document&quot;:{
      &quot;type&quot;:&quot;object&quot;,
      &quot;properties&quot;:{
        &quot;type&quot;:{
          &quot;type&quot;:&quot;string&quot;,
          &quot;enum&quot;:[
            &quot;id_document&quot;
          ]
        },
        &quot;method&quot;:{
          &quot;type&quot;:&quot;string&quot;,
          &quot;enum&quot;:[&quot;pipp&quot;,&quot;sripp&quot;,&quot;eid&quot;]
        },
        &quot;verifier&quot;:{
          &quot;type&quot;:&quot;object&quot;,
          &quot;properties&quot;:{
            &quot;organization&quot;:{
              &quot;type&quot;:&quot;string&quot;
            },
            &quot;txn&quot;:{
              &quot;type&quot;:&quot;string&quot;
            }
          }
        },
        &quot;time&quot;:{
              &quot;type&quot;:&quot;string&quot;,
              &quot;format&quot;:&quot;time&quot;
        },
        &quot;document&quot;:{
          &quot;type&quot;:&quot;object&quot;,
          &quot;properties&quot;:{
            &quot;type&quot;:{
              &quot;type&quot;:&quot;string&quot;,
              &quot;enum&quot;:[
                &quot;idcard&quot;,
                &quot;passport&quot;,
                &quot;driving_permit&quot;,
                &quot;de_idcard_foreigners&quot;,
                &quot;de_emergency_idcard&quot;,
                &quot;de_erp&quot;,
                &quot;de_erp_replacement_idcard&quot;,
                &quot;de_idcard_refugees&quot;,
                &quot;de_idcard_apatrids&quot;,
                &quot;de_certificate_of_suspension_of_deportation&quot;,
                &quot;de_permission_to_reside&quot;,
                &quot;de_replacement_idcard&quot;,
                &quot;jp_drivers_license&quot;,
                &quot;jp_residency_card_for_foreigner&quot;,
                &quot;jp_individual_number_card&quot;,
                &quot;jp_permanent_residency_card_for_foreigner&quot;,
                &quot;jp_health_insurance_card&quot;,
                &quot;jp_residency_card&quot;
              ]
            },
            &quot;number&quot;:{
              &quot;type&quot;:&quot;string&quot;
            },
            &quot;issuer&quot;:{
              &quot;type&quot;:&quot;object&quot;,
              &quot;properties&quot;:{
                &quot;name&quot;:{
                  &quot;type&quot;:&quot;string&quot;
                },
                &quot;country&quot;:{
                  &quot;type&quot;:&quot;string&quot;
                }
              }
            },
            &quot;date_of_issuance&quot;:{
              &quot;type&quot;:&quot;string&quot;,
              &quot;format&quot;:&quot;date&quot;
            },
            &quot;date_of_expiry&quot;:{
              &quot;type&quot;:&quot;string&quot;,
              &quot;format&quot;:&quot;date&quot;
            }
          }
        }
      },
      &quot;required&quot;:[
        &quot;type&quot;,
        &quot;method&quot;,
        &quot;document&quot;
      ]
    }
  },
  &quot;type&quot;:&quot;object&quot;,
  &quot;properties&quot;:{
    &quot;verified_claims&quot;:{
      &quot;type&quot;:&quot;object&quot;,
      &quot;properties&quot;:{
        &quot;verification&quot;:{
          &quot;type&quot;:&quot;object&quot;,
          &quot;properties&quot;:{
            &quot;trust_framework&quot;:{
              &quot;type&quot;:&quot;string&quot;,
              &quot;enum&quot;:[
                &quot;de_aml&quot;,
                &quot;eidas_ial_substantial&quot;,
                &quot;eidas_ial_hig&quot;,
                &quot;nist_800_63A_ial_2&quot;,
                &quot;nist_800_63A_ial_3&quot;,
                &quot;jp_aml&quot;,
                &quot;jp_mpiupa&quot;
              ]
            },
            &quot;time&quot;:{
              &quot;type&quot;:&quot;string&quot;,
              &quot;format&quot;:&quot;time&quot;
            },
            &quot;verification_process&quot;:{
              &quot;type&quot;:&quot;string&quot;
            },
            &quot;evidence&quot;:{
              &quot;type&quot;:&quot;array&quot;,
              &quot;minItems&quot;: 1,
              &quot;items&quot;:{
                &quot;oneOf&quot;:[
                  {
                    &quot;$ref&quot;:&quot;#/definitions/id_document&quot;
                  },
                  {
                    &quot;$ref&quot;:&quot;#/definitions/utility_bill&quot;
                  },
                  {
                    &quot;$ref&quot;:&quot;#/definitions/qes&quot;
                  }
                ]
              }
            }
          },
          &quot;required&quot;:[&quot;trust_framework&quot;],
          &quot;additionalProperties&quot;: false
        },
        &quot;claims&quot;:{
          &quot;type&quot;:&quot;object&quot;,
          &quot;minProperties&quot;: 1
        }
      },
      &quot;required&quot;:[&quot;verification&quot;,&quot;claims&quot;],
      &quot;additionalProperties&quot;: false
    },
    &quot;txn&quot;: {&quot;type&quot;: &quot;string&quot;}
  },
  &quot;required&quot;:[&quot;verified_claims&quot;]
}
</artwork></figure>

</section>

</middle>

<back>
<references title="Normative References">
<reference anchor="OpenID-Discovery" target="https://openid.net/specs/openid-connect-discovery-1_0.html">
  <front>
    <title>OpenID Connect Discovery 1.0 incorporating errata set 1</title>
    <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
      <organization>NRI</organization>
    </author>
    <author fullname="John Bradley" initials="J." surname="Bradley">
      <organization>Ping Identity</organization>
    </author>
    <author fullname="Breno de Medeiros" initials="B." surname="de Medeiros">
      <organization>Google</organization>
    </author>
    <author fullname="Edmund Jay" initials="E." surname="Jay">
      <organization> Illumila </organization>
    </author>
    <date year="2014" month="Nov" day="8"></date>
  </front>
</reference>
<reference anchor="ISO3166-3" target="https://www.iso.org/standard/63547.html">
  <front>
    <title>ISO 3166-1:2013. Codes for the representation of names of countries and their subdivisions -- Part 3: Code for formerly used names of countries</title>
    <author fullname="International Organization for Standardization">
      <organization abbrev="ISO">International Organization for&#xA;&#x9;    Standardization</organization>
    </author>
    <date year="2013"></date>
  </front>
</reference>
<reference anchor="ISO3166-1" target="https://www.iso.org/standard/63545.html">
  <front>
    <title>ISO 3166-1:1997. Codes for the representation of names of&#xA;&#x9;  countries and their subdivisions -- Part 1: Country codes</title>
    <author fullname="International Organization for Standardization">
      <organization abbrev="ISO">International Organization for&#xA;&#x9;    Standardization</organization>
    </author>
    <date year="2013"></date>
  </front>
</reference>
<reference anchor="ICAO-Doc9303" target="https://www.icao.int/publications/Documents/9303_p3_cons_en.pdf">
  <front>
    <title>Machine Readable Travel Documents, Seventh Edition, 2015, Part 3: Specifications Common to all MRTDs</title>
    <author fullname="INTERNATIONAL CIVIL AVIATION ORGANIZATION">
      <organization abbrev="ICAO">INTERNATIONAL CIVIL AVIATION ORGANIZATION</organization>
    </author>
    <date year="2015"></date>
  </front>
</reference>
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8417.xml"?>
<reference anchor="OpenID" target="http://openid.net/specs/openid-connect-core-1_0.html">
  <front>
    <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
    <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
      <organization>NRI</organization>
    </author>
    <author fullname="John Bradley" initials="J." surname="Bradley">
      <organization>Ping Identity</organization>
    </author>
    <author fullname="Mike Jones" initials="M." surname="Jones">
      <organization>Microsoft</organization>
    </author>
    <author fullname="Breno de Medeiros" initials="B." surname="de Medeiros">
      <organization>Google</organization>
    </author>
    <author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
      <organization>Salesforce</organization>
    </author>
    <date year="2014" month="Nov" day="8"></date>
  </front>
</reference>
</references>
<references title="Informative References">
<reference anchor="OxfordPassport" target="http://www.oxfordreference.com/view/10.1093/acref/9780199290543.001.0001/acref-9780199290543-e-1616">
  <front>
    <title>The New Oxford Companion to Law. ISBN 9780199290543.</title>
    <author fullname="P. Cane" initials="P" surname="Cane"></author>
    <author fullname="J. Conaghan" initials="Mary F." surname="Conaghan"></author>
    <date year="2008"></date>
  </front>
</reference>
<reference anchor="eIDAS" target="https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32014R0910">
  <front>
    <title>REGULATION (EU) No 910/2014 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL on electronic identification and trust services for electronic transactions in the internal market and repealing Directive 1999/93/EC</title>
    <author surname="European Parliament">
      <organization>European Parliament</organization>
    </author>
    <date year="2014" month="July" day="23"></date>
  </front>
</reference>
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7662.xml"?>
<?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-oauth-jwt-introspection-response.xml"?>
<reference anchor="NIST-SP-800-63a" target="https://doi.org/10.6028/NIST.SP.800-63a">
  <front>
    <title>NIST Special Publication 800-63A, Digital Identity Guidelines, Enrollment and Identity Proofing Requirements</title>
    <author fullname="Paul A. Grassi">
      <organization>NIST</organization>
    </author>
    <author fullname="James L. Fentony" initials="James L." surname="Fentony">
      <organization>Altmode Networks</organization>
    </author>
    <author fullname="Naomi B. Lefkovitz" initials="Naomi B." surname="Lefkovitz">
      <organization>NIST</organization>
    </author>
    <author fullname="Jamie M. Danker" initials="Jamie M." surname="Danker">
      <organization>Department of Homeland Security</organization>
    </author>
    <author fullname="Yee-Yin Choong" initials="Yee-Yin" surname="Choong">
      <organization>NIST</organization>
    </author>
    <author fullname="Kristen K. Greene" initials="Kristen K." surname="Greene">
      <organization>NIST</organization>
    </author>
    <author fullname="Mary F. Theofanos" initials="Mary F." surname="Theofanos">
      <organization>NIST</organization>
    </author>
    <date year="2017" month="June"></date>
  </front>
</reference>
</references>

<section anchor="Acknowledgements" title="Acknowledgements">
<t>The following people at yes.com and partner companies contributed to the concept described in the initial contribution to this specification: Karsten Buch, Lukas Stiebig, Sven Manz, Waldemar Zimpfer, Willi Wiedergold, Fabian Hoffmann, Daniel Keijsers, Ralf Wagner, Sebastian Ebling, Peter Eisenhofer.</t>
<t>I would like to thank Sebastian Ebling, Marcos Sanz, Tom Jones, Mike Pegman,
Michael B. Jones, and Jeff Lombardo for their valuable feedback that helped to evolve this specification.</t>
</section>

<section anchor="notices" title="Notices">
<t>Copyright (c) 2019 The OpenID Foundation.</t>
<t>The OpenID Foundation (OIDF) grants to any Contributor, developer, implementer, or other interested party a non-exclusive, royalty free, worldwide copyright license to reproduce, prepare derivative works from, distribute, perform and display, this Implementers Draft or Final Specification solely for the purposes of (i) developing specifications, and (ii) implementing Implementers Drafts and Final Specifications based on such documents, provided that attribution be made to the OIDF as the source of the material, but that such attribution does not indicate an endorsement by the OIDF.</t>
<t>The technology described in this specification was made available from contributions from various sources, including members of the OpenID Foundation and others. Although the OpenID Foundation has taken steps to help ensure that the technology is available for distribution, it takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this specification or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any independent effort to identify any such rights. The OpenID Foundation and the contributors to this specification make no (and hereby expressly disclaim any) warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to this specification, and the entire risk as to implementing this specification is assumed by the implementer. The OpenID Intellectual Property Rights policy requires contributors to offer a patent promise not to assert certain patent claims against other contributors and against implementers. The OpenID Foundation invites any interested party to bring to its attention any copyrights, patents, patent applications, or other proprietary rights that may cover technology that may be required to practice this specification.</t>
</section>

<section anchor="document-history" title="Document History">
<t>[[ To be removed from the final specification ]]</t>
<t>-07</t>
<t>
<list style="symbols">
<t>fixed typos</t>
<t>changed <spanx style="verb">nationality</spanx> String claim to <spanx style="verb">nationalities</spanx> String array claim</t>
<t>replaced <spanx style="verb">agent</spanx> in id_document verifier element by <spanx style="verb">txn</spanx> element</t>
<t>qes method: fixed error in description of <spanx style="verb">issuer</spanx></t>
<t>qes method: changed <spanx style="verb">issued_at</spanx> to <spanx style="verb">created_at</spanx> since this field applies to the signature (that is created and not issued)</t>
<t>Changed format of <spanx style="verb">nationalities</spanx> and issuing <spanx style="verb">country</spanx> to ICAO codes</t>
<t>Changed <spanx style="verb">date</spanx> in verification element to <spanx style="verb">time</spanx></t>
<t>Added Japanese trust frameworks to pre-defined values</t>
<t>Added Japanese id documents to pre-defined values</t>
<t>adapted JSON schema and examples</t>
</list>
</t>
<t>-06</t>
<t>
<list style="symbols">
<t>Incorporated review feedback by Marcos Sanz and Adam Cooper</t>
<t>Added text on integrity, authenticity, and confidentiality for data passed between OP and RP to Security Considerations section</t>
<t>added <spanx style="verb">purpose</spanx> field to <spanx style="verb">claims</spanx> parameter</t>
<t>added feature to let the RP explicitly requested certain <spanx style="verb">verification</spanx> data</t>
</list>
</t>
<t>-05</t>
<t>
<list style="symbols">
<t>incorporated review feedback by Mike Jones</t>
<t>Added OIDF Copyright Notices</t>
<t>Moved Acknowledgements to Appendix A</t>
<t>Removed RFC 2119 keywords from scope &amp; requirements section and rephrased section</t>
<t>rephrased introduction</t>
<t>replaced <spanx style="verb">birth_name</spanx> with <spanx style="verb">birth_family_name</spanx>, <spanx style="verb">birth_given_name</spanx>, and <spanx style="verb">birth_middle_name</spanx></t>
<t>replaced <spanx style="verb">transaction_id</spanx> with <spanx style="verb">txn</spanx> from RFC 8417</t>
<t>added references to eIDAS, ISO 3166-1, ISO 3166-3, and ISO 8601-2004</t>
<t>added note on <spanx style="verb">purpose</spanx> and locales</t>
<t>changed file name and document title to include 1.0 version id</t>
<t>corrected evidence plural</t>
<t>lots of editorial fixes</t>
<t>Alignment with OpenID Connect Core wording</t>
<t>Renamed <spanx style="verb">id</spanx> to <spanx style="verb">verification_process</spanx></t>
<t>Renamed <spanx style="verb">verified_person_data</spanx> to <spanx style="verb">verified_claims</spanx></t>
</list>
</t>
<t>-04</t>
<t>
<list style="symbols">
<t>incorporated review feedback by Marcos Sanz</t>
</list>
</t>
<t>-03</t>
<t>
<list style="symbols">
<t>enhanced draft to support multiple evidence</t>
<t>added a JSON Schema for assertions containing the <spanx style="verb">verified_person_data</spanx> Claim</t>
<t>added more identity document definitions</t>
<t>added <spanx style="verb">region</spanx> field to <spanx style="verb">place_of_birth</spanx> Claim</t>
<t>changed <spanx style="verb">eidas_loa_substantial/high</spanx> to <spanx style="verb">eidas_ial_substantial/high</spanx></t>
<t>fixed typos in examples</t>
<t>uppercased all editorial occurences of the term <spanx style="verb">claims</spanx> to align with OpenID Connect Core</t>
</list>
</t>
<t>-02</t>
<t>
<list style="symbols">
<t>added new request parameter <spanx style="verb">purpose</spanx></t>
<t>simplified/reduced number of verification methods</t>
<t>simplfied identifiers</t>
<t>added <spanx style="verb">identity_documents_supported</spanx> to metadata section</t>
<t>improved examples</t>
</list>
</t>
<t>-01</t>
<t>
<list style="symbols">
<t>fixed some typos</t>
<t>remove organization element (redundant) (issue 1080)</t>
<t>allow other Claims about the End-User in the <spanx style="verb">claims</spanx> sub element (issue 1079)</t>
<t>changed <spanx style="verb">legal_context</spanx> to <spanx style="verb">trust_framework</spanx></t>
<t>added explanation how the content of the verification element is determined by the trust framework</t>
<t>added URI-based identifiers for <spanx style="verb">trust_framework</spanx>, <spanx style="verb">identity_document</spanx> and (verification) <spanx style="verb">method</spanx></t>
<t>added example attestation for notified/regulated eID system</t>
<t>adopted OP metadata section accordingly</t>
<t>changed error behavior for <spanx style="verb">max_age</spanx> member to alig with OpenID Core</t>
<t>Added feature to let the RP express requirements for verification data (trust framework, identity documents, verification method)</t>
<t>Added privacy consideration section and added text on legal basis for data exchange</t>
<t>Added explanation about regulated and un-regulated eID systems</t>
</list>
</t>
<t>-00 (WG document)</t>
<t>
<list style="symbols">
<t>turned the proposal into a WG document</t>
<t>changed name</t>
<t>added terminology section and reworked introduction</t>
<t>added several examples (ID Token vs UserInfo, unverified &amp; verified claims, aggregated &amp; distributed claims)</t>
<t>incorporated text proposal of Marcos Sanz regarding max_age</t>
<t>added IANA registration for new error code <spanx style="verb">unable_to_meet_requirement</spanx></t>
</list>
</t>
</section>

</back>

</rfc>
