<?xml version="1.0" encoding="US-ASCII"?> <?xml-stylesheet type='text/xsl'
href='http://xml2rfc.tools.ietf.org/authoring/rfc2629.xslt' ?> <!DOCTYPE rfc
PUBLIC "-//IETF//DTD RFC 2629//EN"
"http://xml2rfc.tools.ietf.org/authoring/rfc2629.dtd"> <!-- NOTE: This XML file is input used to produce the authoritative copy
	of an OpenID Foundation specification. The authoritative copy is the HTML
	output. This XML source file is not authoritative. The statement ipr="none"
	is present only to satisfy the document compilation tool and is not indicative
	of the IPR status of this specification. The IPR for this specification is
	described in the "Notices" section. This is a public OpenID Foundation document
	and not a private document, as the private="..." declaration could be taken
	to indicate. -->
<rfc category="std" docName="openid-igov-openid-connect-1_0" ipr="none">   <?rfc
toc="yes" ?>

  <?rfc tocdepth="5" ?>

  <?rfc symrefs="yes" ?>

  <?rfc sortrefs="yes"?>

  <?rfc strict="yes" ?>

  <?rfc iprnotified="no" ?>

  <?rfc private="Final" ?>

	<front>
		<title abbrev="openid-igov-profile">International Government Assurance Profile (iGov)
			for
			OpenID Connect 1.0 - Draft 02</title>

		<author fullname="Michael Varley" initials="M.V." role="editor"
			surname="Varley">
			<address>
				<email>mike.varley@securekey.com</email>
			</address>
		</author>
		<author fullname="Paul Grassi" initials="P.G." role="editor"
			surname="Grassi">
			<address>
				<email>pag3@nist.gov</email>
			</address>
		</author>
		<date day="7" month="July" year="2017" />

		<workgroup>OpenID iGov Working Group</workgroup>

		<abstract>
			<t>The OpenID Connect protocol defines an identity federation system
				that allows a relying party to request and receive authentication
				and
				profile information about an end user.
			</t>

			<t>This specification profiles the OpenID Connect protocol to
				increase
				baseline security, provide greater interoperability, and
				structure
				deployments in a manner specifically applicable to (but not
				limited
				to)
				government and public service domains.
			</t>

			<t>
				This profile builds on top of, and inherits all properties of, the
				<xref target="iGov.OAuth2">OAUTH profile for iGov.</xref>
			</t>
		</abstract>
	</front>

	<middle>
		<section anchor="Introduction" title="Introduction">
			<t>Government regulations for permitting users (citizens and
				non-citizens)
				online access to government resources vary greatly from
				region to region.
				There is a strong desire to leverage federated
				authentication and
				identity
				services for public access to government
				resources online to reduce
				'password
				fatigue', increase overall
				account security, reduce cost, and provide
				reliable
				identity
				assurances from established and trusted sources when applicable.
			</t>

			<t>This specification aims to define an OpenID Connect profile that
				provides
				governments with a foundation for securing federated access
				to public services
				online.
			</t>

			<section anchor="rnc" title="Requirements Notation and 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
					<xref target="RFC2119">RFC 2119</xref>
					.
				</t>

				<t>
					All uses of
					<xref target="RFC7515">JSON Web Signature (JWS)</xref>
					and
					<xref target="RFC7516">JSON Web Encryption (JWE)</xref>
					data
					structures in this specification utilize the JWS Compact
					Serialization
					or the JWE Compact Serialization; the JWS JSON
					Serialization and the
					JWE JSON Serialization are not used.
				</t>
			</section>

			<section anchor="Terminology" title="Terminology">
				<t>
					This specification uses the terms "Access Token", "Authorization
					Code", "Authorization Endpoint", "Authorization Grant",
					"Authorization
					Server", "Client", "Client Authentication", "Client
					Identifier",
					"Client Secret", "Grant Type", "Protected Resource",
					"Redirection
					URI", "Refresh Token", "Resource Owner", "Resource
					Server", "Response
					Type", and "Token Endpoint" defined by
					<xref target="RFC6749">OAuth
						2.0</xref>
					, the terms "Claim Name", "Claim Value", and "JSON Web Token
					(JWT)"
					defined by
					<xref target="RFC7519">JSON Web Token (JWT)</xref>
					,
					and the terms defined by
					<xref target="OpenID.Core">OpenID Connect
						Core 1.0</xref>
					.
				</t>
			</section>

			<section title="Conformance">
				<t>This specification defines requirements for the following
					components:
				</t>

				<t>
					<list style="symbols">
						<t>OpenID Connect 1.0 relying parties (also known as OpenID
							Clients)
						</t>

						<t>OpenID Connect 1.0 identity providers (also known as OpenID
							Providers)
						</t>
					</list>
				</t>

				<t>The specification also defines features for interaction between
					these components:
				</t>

				<t>
					<list style="symbols">
						<t>Relying party to identity provider</t>
					</list>
				</t>

				<t>When an iGov-compliant component is interacting with other
					iGov-compliant components, in any valid combination, all
					components
					MUST fully conform to the features and requirements of this
					specification. All interaction with non-iGov components is outside
					the scope of this specification.
				</t>

				<t>An iGov-compliant OpenID Connect IdP MUST support all features as
					described in this specification. A general-purpose IdP MAY support
					additional features for use with non-iGov clients.
				</t>

				<t>An iGov-compliant OpenID Connect IdP MAY also provide
					iGov-compliant OAuth 2.0 authorization server functionality. In
					such
					cases, the authorization server MUST fully implement the OAuth
					2.0
					iGov profile. If an iGov-compliant OpenID Connect IdP does not
					provide iGov-compliant OAuth 2.0 authorization server services, all
					features related to interaction between the authorization server
					and
					protected resource are therefore OPTIONAL.
				</t>

				<t>An iGov-compliant OpenID Connect client MUST use all functions as
					described in this specification. A general-purpose client library
					MAY
					support additional features for use with non-iGov IdPs.
				</t>
			</section>
		</section>

		<section title="Relying Party Profile">
			<t />
			<section
				title="Requests to the Authorization Endpoint (Authentication Request)">

				<t>The <xref target="iGov.OAuth2">iGov OAuth2 profile</xref> specifies requirements
				   for requests to Authorization Endpoints - for example, when to use the
				   <xref target="RFC7636">PKCE</xref> parameters to secure token exchange.
				</t>
				<t>In addition to the requirements specified in Section 2.1.1 of the
					<xref target="iGov.OAuth2">iGov OAuth2 profile</xref>, the following
					describes the supported OpenID Connect Authorization Code Flow
					parameters for use with iGov compatible	IdPs.
				</t>

				<t>
					Request Parameters:
					<list style="hanging">
						<t hangText="client_id">REQUIRED. OAuth 2.0 Client Identifier valid at the
							Authorization Server.
						</t>

						<t hangText="response_type">
							REQUIRED. MUST be set to
							<spanx style="verb">code</spanx>
							.
						</t>

						<t hangText="scope">REQUIRED. Indicates the attributes being requested.
							(See below)
						</t>

						<t hangText="redirect_uri">REQUIRED. Indicates a valid endpoint where the
							client will receive the authentication response. See (core
							section 3.1.2.1)
						</t>

						<t hangText="state"> REQUIRED. Unguessable random string generated by
							the RP, used to protect against CSRF attacks. Must contain a
							sufficient amount of entropy to avoid guessing. Returned to the
							RP in the authentication response.
						</t>

						<t hangText="prompt">
							REQUIRED. This value must be set to
							<spanx style="verb">select_account</spanx>
							.
						</t>

						<t hangText="nonce">REQUIRED. Unguessable random string generated by the
							client, used to protect against CSRF attacks. Must contain a
							sufficient amount of entropy to avoid guessing. Returned to the
							client in the ID Token.
						</t>

						<t hangText="vtr">
							OPTIONAL. MUST be set to
							a value as described in Section 6.1 of
							<xref target="I-D.richer-vectors-of-trust">Vectors of Trust</xref>
							<spanx style="verb">vtr</spanx> takes precedence over <spanx style="verb">acr_values</spanx>.
						</t>

						<t hangText="acr_values">OPTIONAL. Lists the acceptable LoAs for this
							authentication. See (below). MUST not be set if <spanx style="verb">vtr</spanx> is specified.
						</t>

						<t hangText="code_challenge and code_challenge_method">OPTIONAL. If the PKCE protocol
							is being used by the client. See <xref target="iGov.OAuth2">OAUTH profile for iGov.</xref>
						</t>
					</list>
				</t>

				<t>A sample request may look like:</t>

				<figure>
					<artwork><![CDATA[
https://idp.government.gov/oidc/authorization?
  response_type=code
  &client_id=827937609728-m2mvqffo9bsefh4di90saus4n0diar2h
  &scope=d+openid
  &redirect_uri=https%3A%2F%2Frp.fed1.gov%2Foidc%2FloginResponse
  &state=2ca3359dfbfd0
  &prompt=select_account
  &acr_values=http%3A%2F%2Fidmanagement.gov%2Fns%2Fassurance%2Floa%2F1
+http%3A%2F%2Fidmanagement.gov%2Fns%2Fassurance%2Floa%2F2
+http%3A%2F%2Fidmanagement.gov%2Fns%2Fassurance%2Floa%2F3
+http%3A%2F%2Fidmanagement.gov%2Fns%2Fa]]>
</artwork>
				</figure>
			</section>

			<section anchor="RequestsToTokenEndpoint" title="Requests to the Token Endpoint">
				<t>
					In addition to the requirements specified in Section 2.1.2 of the
					<xref target="iGov.OAuth2">iGov OAuth2 profile</xref>
					,
					the following claims MUST be included:
				</t>

				<t>
					The following parameters are specified:
					<list style="hanging">
						<t hangText="grant_type">
							MUST be set to
							<spanx style="verb">authorization_code</spanx>
							.
						</t>

						<t hangText="code">The value of the code parameter returned
							in the authorization response.</t>

						<t hangText="client_assertion_type">
							MUST be set to
							<spanx style="verb">urn:ietf:params:oauth:client-assertion-type:jwt-bearer</spanx>
							.
						</t>

						<t hangText="client_assertion"> The value of the signed client
							authentication JWT generated as described below. The RP must
							generate a new assertion JWT for each call to the token endpoint.
						</t>
					</list>
				</t>

			</section>
			<section title="ID Tokens">

				<t>
					All clients MUST validate the signature of an ID Token
					before
					accepting it using the public key of the issuing server, which is
					published in
					<xref target="RFC7517">JSON Web Key (JWK)</xref>
					format. ID
					Tokens MAY be encrypted using the appropriate key of the
					requesting
					client.
				</t>

				<t>
					Clients MUST verify the following in received ID tokens:
					<list style="hanging">
						<t hangText="iss">The "issuer" field is the Uniform Resource
							Locater
							(URL) of the expected issuer
						</t>

						<t hangText="aud">The "audience" field contains the client ID of
							the
							client
						</t>

						<t hangText="exp, iat, nbf">The "expiration", "issued at", and
							"not before"
							timestamps for the token are dates (integer number of
							seconds
							since from 1970-01-01T00:00:00Z UTC) within acceptable
							ranges
						</t>
					</list>
				</t>

			</section>

			<section title="Request Objects">
				<t>
					Clients MAY optionally send requests to the authorization endpoint
					using the
					<spanx style="verb">request</spanx>
					parameter as defined by
					<xref target="OpenID.Core">OpenID Connect</xref>
					.
					Clients MAY send requests to the authorization
					endpoint by
					reference using the request_uri parameter.
				</t>

				<t>Request objects MUST be signed by the client's registered key.
					Request objects MAY be encrypted to the authorization server's
					public
					key.
				</t>
			</section>

			<section title="Discovery">
				<t>Clients and protected resources SHOULD cache OpenID provider
					metadata once an OP has been discovered and used by the client.
				</t>

			</section>

		</section>

		<section title="OpenID Provider Profile">
			<t />
			<section title="ID Tokens">

				<t>All ID Tokens MUST be signed by the OpenID Provider's private
					signature key. ID Tokens MAY be encrypted using the appropriate
					key
					of the
					requesting client.
				</t>

				<t>The ID Token MUST expire and SHOULD have an active lifetime no
					longer than five minutes. Since the ID token is consumed by the
					client
					and not presented to remote systems, much shorter expiration
					times
					are
					RECOMMENDED where possible.
				</t>

				<t>
					The token response includes an access token (which can be used to
					make a UserInfo request) and ID token (a signed and optionally
					encrypted JSON Web Token). ID Token values have the following
					meanings:
					<list style="hanging">
						<t hangText="iss">REQUIRED. The "issuer" field is the Uniform Resource Locater
							(URL) of the expected issuer.
						</t>

						<t hangText="aud">REQUIRED. The "audience" field contains the client ID of the
							client.
						</t>

						<t hangText="sub">REQUIRED. The identifier of the user. SHOULD be a pairwize
							annonymous identifier, and be unique per client to prevent
							linkability and traceability between clients.
						</t>

						<t hangText="vot">
							OPTIONAL. The vector value as specified in
							<xref target="I-D.richer-vectors-of-trust">Vectors of Trust</xref>
							. See <xref target="vot">Vectors of Trust</xref> for more details.
							<spanx style="verb">vot</spanx> takes precedence over acr.
						</t>

						<t hangText="vtm"> REQUIRED if <spanx style="verb">vot</spanx> is provided.
							The trustmark URI as specified in
							<xref target="I-D.richer-vectors-of-trust">Vectors of Trust</xref>
							. See <xref target="vot">Vectors of Trust</xref> for more details.
						</t>

						<t hangText="acr">OPTIONAL.
							The LoA the user was authenticated at. MUST be a member of the
							<spanx style="verb">acr_values</spanx>
							list from the authentication request.  The OP MUST NOT include if <spanx style="verb">vot</spanx> is provided. See <xref target="AuthenticationContext">Authentication Context</xref> for more details.
						</t>

						<t hangText="nonce">The nonce value that was provided in the
							authentication request. MUST be Included if provided in authentication
							request.
						</t>

						<t hangText="jti">REQUIRED. A unique identifier for the token, which can be
							used
							to prevent reuse of the token.
						</t>

						<t hangText="exp, iat, nbf">REQUIRED. The "expiration", "issued at", and "not
							before"
							timestamps for the token are dates (integer number of
							seconds
							since from 1970-01-01T00:00:00Z UTC) within acceptable
							ranges.
						</t>
					</list>
				</t>

				<t>This example ID token has been signed using the server's RSA
					key:
				</t>

				<figure>
					<artwork><![CDATA[eyJhbGciOiJSUzI1NiJ9.eyJhdXRoX3RpbWUiOjE0
        MTg2OTg3ODIsImV4cCI6MTQxODY5OTQxMiwic3ViI
        joiNldaUVBwblF4ViIsIm5vbmNlIjoiMTg4NjM3Yj
        NhZjE0YSIsImF1ZCI6WyJjMWJjODRlNC00N2VlLTR
        iNjQtYmI1Mi01Y2RhNmM4MWY3ODgiXSwiaXNzIjoi
        aHR0cHM6XC9cL2lkcC1wLmV4YW1wbGUuY29tXC8iL
        CJpYXQiOjE0MTg2OTg4MTJ9mQc0rtL56dnJ7_zO_f
        x8-qObsQhXcn-qN-FC3JIDBuNmP8i11LRA_sgh_om
        RRfQAUhZD5qTRPAKbLuCD451lf7ALAUwoGg8zAASI
        5QNGXoBVVn7buxPd2SElbSnHxu0o8ZsUZZwNpircW
        NUlYLje6APJf0kre9ztTj-5J1hRKFbbHodR2I1m5q
        8zQR0ql-FoFlOfPhvfurXxCRGqP1xpvLLBUi0JAw3
        F8hZt_i1RUYWMqLQZV4VU3eVNeIPAD38qD1fxTXGV
        Ed2XDJpmlcxjrWxzJ8fGfJrbsiHCzmCjflhv34O22
        zb0lJpC0d0VScqxXjNTa2-ULyCoehLcezmssg]]></artwork>
				</figure>

				<t>Its claims are as follows:</t>

				<figure>
					<artwork><![CDATA[ {
        "auth_time": 1418698782,
        "exp": 1418699412,
        "sub": "6WZQPpnQxV",
        "nonce": "188637b3af14a",
        "aud": [
          "c1bc84e4-47ee-4b64-bb52-5cda6c81f788"
        ],
        "iss": "https:\\/\\/idp-p.example.com\\/",
        "acr":"LOA1",
        "vot":"",
        "iat": 1418698812
        }
        ]]></artwork>
				</figure>
			</section>

			<section anchor="UserInfoEndpoint" title="UserInfo Endpoint">
				<t>
					Servers MUST support the UserInfo Endpoint and, at a minimum, the
					<spanx style="verb">sub</spanx>
					(subject) claim. It is expected that the
					<spanx style="verb">sub</spanx>
					claim will remain pseudonymous in use cases where
					obtaining personal
					information is not needed.
				</t>

				<t>Support for a UserInfo Endpoint is important for maximum client
					implementation interoperability even if no additional user
					information is returned.
					Clients are not required to call the
					UserInfo Endpoint, but should not
					receive an error if they do.
				</t>

				<t>In an example transaction, the client sends a request to the
					UserInfo
					Endpoint like the following:
				</t>

				<figure>
					<artwork><![CDATA[GET /userinfo HTTP/1.1
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MTg3MDI0MTIsIm
F1ZCI6WyJjMWJjODRlNC00N2VlLTRiNjQtYmI1Mi01Y2RhNmM4MWY3ODgiXSwiaXNzIjo
iaHR0cHM6XC9cL2lkcC1wLmV4YW1wbGUuY29tXC8iLCJqdGkiOiJkM2Y3YjQ4Zi1iYzgx
LTQwZWMtYTE0MC05NzRhZjc0YzRkZTMiLCJpYXQiOjE0MTg2OTg4MTJ9i.HMz_tzZ90_b
0QZS-AXtQtvclZ7M4uDAs1WxCFxpgBfBanolW37X8h1ECrUJexbXMD6rrj_uuWEqPD738
oWRo0rOnoKJAgbF1GhXPAYnN5pZRygWSD1a6RcmN85SxUig0H0e7drmdmRkPQgbl2wMhu
-6h2Oqw-ize4dKmykN9UX_2drXrooSxpRZqFVYX8PkCvCCBuFy2O-HPRov_SwtJMk5qjU
WMyn2I4Nu2s-R20aCA-7T5dunr0iWCkLQnVnaXMfA22RlRiU87nl21zappYb1_EHF9ePy
q3Q353cDUY7vje8m2kKXYTgc_bUAYuW-W3SMSw5UlKaHtSZ6PQICoA
Accept: text/plain, application/json, application/*+json, */*
Host: idp-p.example.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.2.3 (java 1.5)
]]></artwork>
				</figure>

				<t>And receives a document in response like the following:</t>

				<figure>
					<artwork><![CDATA[HTTP/1.1 200 OK
Date: Tue, 16 Dec 2014 03:00:12 GMT
Access-Control-Allow-Origin: *
Content-Type: application/json;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 333
Connection: close

{
   "sub": "6WZQPpnQxV",
   "iss": "https://idp-p.example.com"
   "given_name": "Stephen",
   "family_name": "Emeritus",
}
]]></artwork>
				</figure>

				<t>
					Servers MUST support the generation of
					<xref target="RFC7519">JWT</xref>
					encoded responses from the UserInfo Endpoint
					in addition to
					unsigned
					JSON objects. Signed responses MUST be
					signed
					by
					the OpenID
					Provider's
					key, and encrypted responses MUST be encrypted
					with the
					authorized
					client's public key. The OpenID Provider MUST support
					the
					RS256
					signature
					method (the Rivest, Shamir, and Adleman (RSA) signature
					algorithm
					with a 256-bit hash) and MAY use other asymmetric
					signature
					and
					encryption methods listed in the JSON Web Algorithms
					(
					<xref target="RFC7518">JWA</xref>
					) specification.
				</t>
			</section>

			<section anchor="RequestObjects" title="Request Objects">
				<t>
					Authorization servers MUST accept requests containing a request
					object
					signed by
					the client's private key. Servers MUST validate the
					signature
					on
					such requests against the client's registered public
					key.
					Servers MUST
					accept request objects encrypted with the
					server's
					public key.
				</t>

				<t>
					Servers MAY accept request objects by reference using the
					<spanx style="verb">request_uri</spanx>
					parameter.
				</t>

				<t>Both of these methods allow for clients to create a request that
					is
					protected from tampering through the browser, allowing for a
					higher
					security mode of operation for clients and applications that
					require
					it. Clients are not required to use request objects, but
					authorization
					servers are required to support requests using them.
				</t>


			</section>


			<section anchor="vot" title="Vectors of Trust">
				<t>
					Servers MUST check for the presence of the <spanx style="verb">vtr</spanx>
					parameter before <spanx style="verb">acr</spanx> in Requests. If both parameters are present
					the server will default to <spanx style="verb">vtr</spanx> as the request
					to respond to.  <spanx style="verb">acr</spanx> MUST then be ignored.
				</t>

				<t>
					OpenID Providers MAY provide the
					<spanx style="verb">vot</spanx>
					and contain valid values from the
					<xref target="I-D.richer-vectors-of-trust">Vectors of Trust</xref>
					standard.
				</t>

				<t>
					The
					<spanx style="verb">vtr</spanx>
					and contain valid values from the
					<xref target="I-D.richer-vectors-of-trust">Vectors of Trust</xref>
					standard.
				</t>

				<t>It is out of scope of this document to determine how an
					organization maps their digital identity practices
					to valid VOT
					component values.
				</t>
			</section>

			<section anchor="AuthenticationContext" title="Authentication Context">
				<t>
					OpenID Providers MAY provide
					<spanx style="verb">acr</spanx>
					(authentication context class reference, equivalent to the
					Security
					Assertion Markup Language (SAML) element of the same name)
					and
					<spanx style="verb">amr</spanx>
					(authentication methods reference) values in ID
					tokens if vtr is not used.
				</t>

			</section>



			<section anchor="Discovery" title="Discovery">
				<t>
					 <xref target="OpenID.Discovery">OpenID Connect Discovery standard</xref>
					 provides a standard, programatic way for Clients to obtain configuration
					 details for communicating with Providers. Discovery is an important part of
					 building scalable federation ecosystsems.
				</t>
				<t>
					Exposing a Discovery endpoint does
					 NOT inherently put the Provider at risk to attack. Endpoints and parameters
					 specified in the Discovery document SHOULD be considered public information
					 regardless of the existence of the Doscovery document.
				</t>
				<t>
					 Access to the Discovery document MAY be protected with existing web
					 authentication methods
					 if required by the Provider. Credentials for the Discovery document are then
					 managed by the Provider. Support for these authentication methods is
					 outside the scope of this specification.
				</t>
				<t>
					 Endpoints described in the Discovery document MUST be secured in accordance
					 with this specification and MAY have additonal controls the Provider wishes to
					 support.
				</t>

				<t>
					All OpenID Connect servers are uniquely identified by a URL known
					as the 	<spanx style="verb">issuer</spanx>. This URL serves as the prefix of
					a service discovery endpoint as	specified in the
					<xref target="OpenID.Discovery">OpenID Connect Discovery standard</xref>
					. The discovery document MUST contain at minimum the following
					fields:
				</t>

				<t>
					<list style="hanging">
						<t hangText="issuer">The fully qualified issuer URL of the
							server
						</t>

						<t hangText="authorization_endpoint">
							The fully qualified URL of the
							server's authorization endpoint
							defined by
							<xref target="RFC6749" />
						</t>

						<t hangText="token_endpoint">
							The fully qualified URL of the server's
							token endpoint defined by
							<xref target="RFC6749" />
						</t>

						<t hangText="introspection_endpoint">
							The fully qualified URL of the
							server's introspection endpoint
							defined by
							<xref target="RFC7662">OAuth Token Introspection</xref>
						</t>

						<t hangText="revocation_endpoint">
							The fully qualified URL of the
							server's revocation endpoint
							defined by
							<xref target="RFC7009">OAuth
								Token Revocation</xref>
						</t>

						<t hangText="jwks_uri">
							The fully qualified URI of the server's
							public key in
							<xref target="RFC7517">JWK Set</xref>
							format
						</t>

						<t hangText="scopes_supported">The list of iGov scopes the server
							supports
						</t>

						<t hangText="claims_supported">The list of claims available in the
							supported
							scopes.
							See below
						</t>

						<t hangText="vot">The vectors supported.
						</t>



					</list>
				</t>

				<t>The following example shows the JSON document found at a
					discovery
					endpoint for an authorization server:
				</t>

				<figure>
					<artwork><![CDATA[{
  "request_parameter_supported": true,
  "id_token_encryption_alg_values_supported": [
    "RSA-OAEP", "RSA1_5", "RSA-OAEP-256"
  ],
  "registration_endpoint": "https://idp-p.example.com/register",
  "userinfo_signing_alg_values_supported": [
    "HS256", "HS384", "HS512", "RS256", "RS384", "RS512"
  ],
  "token_endpoint": "https://idp-p.example.com/token",
  "request_uri_parameter_supported": false,
  "request_object_encryption_enc_values_supported": [
    "A192CBC-HS384", "A192GCM", "A256CBC+HS512",
    "A128CBC+HS256", "A256CBC-HS512",
    "A128CBC-HS256", "A128GCM", "A256GCM"
  ],
  "token_endpoint_auth_methods_supported": [
    "private_key_jwt",
  ],
  "userinfo_encryption_alg_values_supported": [
    "RSA-OAEP", "RSA1_5",
    "RSA-OAEP-256"
  ],
  "subject_types_supported": [
    "public", "pairwise"
  ],
  "id_token_encryption_enc_values_supported": [
    "A192CBC-HS384", "A192GCM", "A256CBC+HS512",
    "A128CBC+HS256", "A256CBC-HS512", "A128CBC-HS256",
    "A128GCM", "A256GCM"
  ],
  "claims_parameter_supported": false,
  "jwks_uri": "https://idp-p.example.com/jwk",
  "id_token_signing_alg_values_supported": [
    "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "none"
  ],
  "authorization_endpoint": "https://idp-p.example.com/authorize",
  "require_request_uri_registration": false,
  "introspection_endpoint": "https://idp-p.example.com/introspect",
  "request_object_encryption_alg_values_supported": [
    "RSA-OAEP", ?RSA1_5", "RSA-OAEP-256"
  ],
  "service_documentation": "https://idp-p.example.com/about",
  "response_types_supported": [
    "code", "token"
  ],
  "token_endpoint_auth_signing_alg_values_supported": [
    "HS256", "HS384", "HS512", "RS256", "RS384", "RS512"
  ],
  "revocation_endpoint": "https://idp-p.example.com/revoke",
  "request_object_signing_alg_values_supported": [
    "HS256", "HS384", "HS512", "RS256", "RS384", "RS512"
  ],
  "claim_types_supported": [
    "normal"
  ],
  "grant_types_supported": [
    "authorization_code",
  ],
  "scopes_supported": [
    "profile", "openid"
  ],
  "userinfo_endpoint": "https://idp-p.example.com/userinfo",
  "userinfo_encryption_enc_values_supported": [
    "A192CBC-HS384", "A192GCM", "A256CBC+HS512","A128CBC+HS256",
    "A256CBC-HS512", "A128CBC-HS256", "A128GCM", "A256GCM"
  ],
  "op_tos_uri": "https://idp-p.example.com/about",
  "issuer": "https://idp-p.example.com/",
  "op_policy_uri": "https://idp-p.example.com/about",
  "claims_supported": [
    "sub", "name", "vot", "acr"
  ]
}
]]></artwork>
				</figure>

				<t>It is RECOMMENDED that servers provide cache information
					through
					HTTP headers and make the cache valid for at least one
					week.
				</t>

				<t>
					The server MUST provide its public key in
					<xref target="RFC7517">JWK Set</xref>
					format, such as the following 2048-bit
					RSA key:
				</t>

				<figure>
					<artwork><![CDATA[{
  "keys": [
    {
      "alg": "RS256",
      "e": "AQAB",
      "n": "o80vbR0ZfMhjZWfqwPUGNkcIeUcweFyzB2S2T-hje83IOVct8gVg9Fx
            vHPK1ReEW3-p7-A8GNcLAuFP_8jPhiL6LyJC3F10aV9KPQFF-w6Eq6V
            tpEgYSfzvFegNiPtpMWd7C43EDwjQ-GrXMVCLrBYxZC-P1ShyxVBOze
            R_5MTC0JGiDTecr_2YT6o_3aE2SIJu4iNPgGh9MnyxdBo0Uf0TmrqEI
            abquXA1-V8iUihwfI8qjf3EujkYi7gXXelIo4_gipQYNjr4DBNl
            E0__RI0kDU-27mb6esswnP2WgHZQPsk779fTcNDBIcYgyLujlcUATEq
            fCaPDNp00J6AbY6w",
      "kty": "RSA",
      "kid": "rsa1"
    }
  ]
}
]]></artwork>
				</figure>

			</section>
			<section anchor="DynamicRegistration" title="Dynamic Registration">
				<t> If the OP is acting as an iGov OAuth Authorization Server
					(<xref target="iGov.OAuth2">iGov OAuth2 profile</xref>), then
					Dynamic Registration MUST be supported in accordance with that
					specification (see section 3.13).
				</t>
			</section>

		</section>

		<section anchor="UserInfo" title="User Info">
			<t>The availability, quality, and reliability of an individual's
				identity attributes will vary greatly across jurisdictions and
				Provider
				systems. The following recommendations ensure maximum
				cross-jurisdictional interoperability, while setting Client
				expectations on the type of data they may acquire.
			</t>

			<section anchor="ClaimsSupported" title="Claims Supported">

				<t>
					Discovery mandates the inclusion of the
					<spanx style="verb">claims_supported</spanx>
					field that defines the
					claims a client MAY expect to receive for
					the
					supported scopes.
					Servers MUST return claims on a best effort
					basis.
					However, a
					server asserting it can provide a user claim does
					not
					imply that
					this data is available for all its users: clients
					MUST be
					prepared to receive partial data. Servers MAY return claims
					outside
					of
					the
					<spanx style="verb">claims_supported</spanx>
					list, but they MUST
					still ensure that the extra claims to not
					violate the privacy
					policies set out by the federation.
				</t>

			</section>

			<section anchor="ScopeProfiles" title="Scope Profiles">
				<t>In the interests of data minimization balanced with the
					requirement to
					successfully identify the individual signing in to a
					service, the
					default OpenID Connect profiles may not be appropriate.
				</t>

				<t>Matching of the identity assertion based on claims to a local
					identifier or &lsquo;account&rsquo; related to the individual
					identity
					at a level of assurance is a requirement where the
					government in
					question is not able to provide a single identifier
					for all
					citizens
					based on an authoritative register of citizens.
				</t>

				<t>The requirement for matching is also of importance where a
					cross-border or cross-jurisdiction authentication is required and
					therefore the availability of a single identifier (e.g. social
					security number) cannot be guaranteed for the individual wishing
					to
					authenticate.
				</t>

				<t>
					This standard defines a set of common
					<spanx style="verb">scope</spanx>
					values that aim to provide maximum
					cross-jurisdictional identity
					matching while not being perscriptive on
					the exact attributes
					shared, as every jurisdiction will likely have
					varius levels of
					information available, and different policies for
					sharing personal
					data even if it is on file.
				</t>

				<t>
					<list style="hanging">
						<t hangText="profile">
							The
							<xref target="OpenID.Core">OpenID Connect Core</xref>
							defined profile provides baseline identity information. It is
							HIGHLY RECOMMENDED that the attributes for
							<spanx style="verb">given_name, family_name, address, birthdate</spanx>
							be supported by iGov Providers if possible, unless data quality
							requirements or privacy considerations prevent it.
							It is left to the Provider and the federation to set any further
							limitations on this profile data - see Privacy Considerations below.
						</t>

						<t hangText="doc">
							The identity document type(s) and associated "number" the
							Provider is
							capable of providing. Mutliple document types MAY be
							returned. This
							could be passport, driver's license, national ID
							card, health
							insurance no., and so on. The response should
							include:
							<list style="hanging">
								<t hangText="type"> The document type.
								</t>
								<t hangText="num"> The value of the document identifier. Note that not all
									values are technically numeric.
								</t>
							</list>
						</t>

						<t hangText="bio">Biometric data related to the subject for
							physical verification at the Client side. This can include simple
							descriptions for eye and hair color, height, or may include a
							photograph: <spanx style="verb">picture</spanx> from  <xref target="OpenID.Core">OpenID Connect Core</xref>.
						</t>

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

			<section anchor="ClaimsMetadata" title="Claims Metadata">


				<t>To support maximum interoperability and trust across
					(potentially)
					unassociated jurisdictions, the information regarding
					the claim type
					MUST be communicated within the protocol, so clients
					may properly
					interpret the claims they have been given. This is
					referred to as
					Claims Metadata.
				</t>

				<t> Claims Metadata is captured in a <spanx style="verb">_claims_metadata</spanx>
				    member of the JSON object containing the Claims.
					<list style="hanging">
						<t hangText="_claim_names"> As defined in
							<xref target="OpenID.Core">OpenID Connect Core</xref>
							section 5.6.2. The list of claims that have metadata.
						</t>
						<t hangText="_claims_metadata"> A JSON Object containing the associated
							metadata for the claims listed in <spanx style="verb">_claim_names</spanx>.
							Metadata fields are defined below.
						</t>
					</list>
				</t>
				<t>
					The following defines the types of claims metadata that iGov
					supports:
					<list style="hanging">

						<t hangText="locale">The locale format of the claim, indicating
							where the
							attribute originates from, represented as a
							space-separated list
							of BCP47 [RFC5646] language tag values: for
							example "en-US" or
							"ja" or "fr-CA" and so on.
						</t>

						<t hangText="encoding">
							How the claim is encoded:
							<spanx style="verb">raw, jwt</spanx>.
						</t>
					</list>
				</t>

				<section anchor="CLOA" title="Claim Level of Assurance">
					<t>
						In addition to the
						<spanx style="verb">scope</spanx>
						of the data
						provided, the UserInfo data must return some concept
						of
						the
						quality level of the attribute. This quality level is
						referred to
						as
						attribute meta data, and follows the guidelines in
						<xref target="I-D.richer-vectors-of-trust">Vectors of Trust</xref>
						.
					</t>
					<t>The following must be considered when evaluating the quality of
						an
						attribute:
					</t>
					<t>
						<list style="hanging">
							<t hangText="vot"> The attribute Vector of Trust.</t>

							<t hangText="vtm">
								The Trustmark Provider URL for the
								<spanx style="verb">vot</spanx>
								claim.
							</t>
						</list>
					</t>
				</section>

			</section>
			<section title="Example UserInfo with Metadata">
				<t>
					This example represents a request to a Department of Motor Vehicles
					(DMV) OP that is returning driver's license related information. The
					requested scope was <spanx style="verb">profile, doc, bio</spanx>. Only
					the driver's license related information is subject to this metadata: the
					<spanx style="verb">email_address</spanx> does not meet the same level of
					assurance.
				</t>
				<figure>
					<artwork><![CDATA[{
   "sub": "6WZQPpnQxV",
   "iss": "https://dmv.a-nice-place.gov"
   "name": "Jane Doe",
   "given_name": "Jane",
   "family_name": "Doe",
   "birthdate": "0000-03-22",
   "email": "janedoe@example.com",
   "eye_color": "blue",
   "document" : {
       "type" : "driver's license",
       "num"  : "V5648-746280-0ZTX"
   }

   "_claim_names": {
     "name": "src1",
     "given_name": "src1",
     "family_name": "src1",
     "birthdate": "src1",
     "eye_color" : "src1",
     "document" : "src1"
   },
   "_claim_metadata": {
     "src1": {
        "locale" : "en-US",
        "encoding" : "raw",
        "vot" : "P2.Cc",
        "vtm": "https://dmv.a-nice-place.gov"
     }
   }

}
  ]]></artwork>
				</figure>
			</section>
		</section>

		<section anchor="PrivacyConsiderations" title="Privacy Considerations">
			<t>This section covers recommendations and guidelines for protecting
				a
				user's right to privacy in circumstances where this is required.
			</t>

			<t>Government policies that protect an individual's right to privacy
				across jurisdictional boundires vary from geography to geography.
				Some
				geographies are looking to establish a global registry of basic
				citizen
				identity for digital use cases, and other geographies aim
				to
				supply only the bare minimum of an authentication assurances,
				ensuring participant systems cannot link or trace a citizen's
				actions
				across the federation. Most will fall somewhere in between
				these two
				extremes.
			</t>

			<t>This specification supports this wide range of scenarios
				and
				therefore the following are NOT REQUIRED by Providers to
				implement,
				but HIGHLY
				RECOMMENDED for Providers that implement some level of
				user privacy.
			</t>

			<t>
				<list style="symbols">
					<t>
						<spanx style="verb">sub</spanx>
						fields MUST be "pairwise" as
						defined in
						<xref target="OpenID.Core">OpenID Connect
							Core</xref>
						section 8.
					</t>
				</list>
			</t>

		</section>

		<section title="Security Considerations">
			<t>
				All transactions MUST be protected in transit by TLS as described
				in
				<xref target="BCP195">BCP195</xref>
				.
			</t>

			<t>
				All clients MUST conform to applicable recommendations found in the
				Security Considerations sections of
				<xref target="RFC6749" />
				and those
				found in the
				<xref target="RFC6819">OAuth 2.0 Threat Model and Security
					Considerations
					document</xref>
				.
			</t>
		</section>

	</middle>

	<back>
		<references title="Normative References">
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2246"?>

      <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986'?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5246"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5322"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5646"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5785"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6125"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6749"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6750"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6819"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7033"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7515"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7516"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7517"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7519"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7518"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7009"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7636"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7662"?>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7800"?>

      <?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-oauth-pop-architecture.xml"?>

      <?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.richer-vectors-of-trust.xml"?>

			<reference anchor="BCP195" target="http://www.rfc-editor.org/info/bcp195">
				<front>
					<title>Recommendations for Secure Use of Transport Layer Security
						(TLS) and Datagram Transport Layer Security (DTLS)</title>

					<author fullname="Y. Sheffer" initials="Y." surname="Sheffer">
						<organization />
					</author>

					<author fullname="R. Holz" initials="R." surname="Holz">
						<organization />
					</author>

					<author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
						<organization />
					</author>

					<date month="May" year="2015" />

					<abstract>
						<t>Transport Layer Security (TLS) and Datagram Transport Layer
							Security (DTLS) are widely used to protect data exchanged over
							application protocols such as HTTP, SMTP, IMAP, POP, SIP, and
							XMPP. Over the last few years, several serious attacks on TLS
							have
							emerged, including attacks on its most commonly used cipher
							suites
							and their modes of operation. This document provides
							recommendations for improving the security of deployed services
							that use TLS and DTLS. The recommendations are applicable to the
							majority of use cases.
						</t>
					</abstract>
				</front>

				<seriesInfo name="BCP" value="195" />

				<seriesInfo name="RFC" value="7525" />

				<seriesInfo name="DOI" value="10.17487/RFC7525" />

				<format octets="60283" type="ASCII" />
			</reference>

			<reference anchor="OpenID.Core"
				target="http://openid.net/specs/openid-connect-core-1_0.html">
				<front>
					<title>OpenID Connect Core 1.0</title>

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

					<author fullname="John Bradley" initials="J." surname="Bradley">
						<organization abbrev="Ping Identity">Ping Identity</organization>
					</author>

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

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

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

					<date day="3" month="August" year="2015" />
				</front>
			</reference>

			<reference anchor="OpenID.Discovery"
				target="http://openid.net/specs/openid-connect-discovery-1_0.html">
				<front>
					<title>OpenID Connect Discovery 1.0</title>

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

					<author fullname="John Bradley" initials="J." surname="Bradley">
						<organization abbrev="Ping Identity">Ping Identity</organization>
					</author>

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

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

					<date day="3" month="August" year="2015" />
				</front>
			</reference>

			<reference anchor="HEART.OAuth2"
				target="http://openid.net/specs/openid-heart-oauth2-1_0.html">
				<front>
					<title>Health Relationship Trust Profile for OAuth 2.0</title>

					<author fullname="Justin Richer" initials="J." role="editor"
						surname="Richer">
						<address>
							<email>openid@justin.richer.org</email>

							<uri>http://justin.richer.org/</uri>
						</address>
					</author>

					<date day="15" month="February" year="2016" />
				</front>
			</reference>

      <reference anchor="iGov.OAuth2" target="http://openid.net/specs/openid-igov-oauth2-1_0.html">
				<front>
					<title>iGov Profile for OAuth 2.0</title>

					<author fullname="Justin Richer" initials="J." role="editor"
						surname="Richer">
						<address>
							<email>openid@justin.richer.org</email>

							<uri>http://justin.richer.org/</uri>
						</address>
					</author>

          <author fullname="Paul Grassi" initials="P." role="editor"
      			surname="Grassi">
      			<address>
      				<email>pag3@nist.gov</email>

      			</address>
      		</author>
          
      		<author fullname="Michael Varley" initials="M.V." role="editor"
      			surname="Varley">
      			<address>
      				<email>mike.varley@securekey.com</email>
      			</address>
      		</author>

					<date day="7" month="July" year="2017" />
				</front>
			</reference>


		</references>




		<section anchor="Acknowledgements" title="Acknowledgements">
			<t>The OpenID Community would like to thank the following people for
				their contributions to this specification: Justin Ritcher, Paul
				Grassi,
				John Bradley, Adam Cooper, ...
			</t>
		</section>

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

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

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

		<section anchor="History" title="Document History">
			<t>-2017-05-29</t>

			<t>
				-02
				<list style="symbols">
					<t>Removed Verifiable Claims definition (will go in another spec).
					</t>
					<t>Clarified Scope and Metadata.
					</t>
				</list>
			</t>
			<t>-2016-07-25</t>

			<t>
				-01
				<list style="symbols">
					<t>Imported content from OpenID HEART 1.0 profile and Connect.Gov
						integration guide v 1.4
					</t>
				</list>
			</t>
		</section>
	</back>
</rfc>
