<?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">

<rfc category="std" docName="draft-ietf-oauth-discovery-04" ipr="trust200902">

  <?rfc toc="yes" ?>
  <?rfc tocdepth="5" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc strict="yes" ?>
  <?rfc compact='yes' ?>
  <?rfc subcompact='no' ?>

  <front>
    <title abbrev="OAuth 2.0 Authorization Server Metadata">OAuth 2.0 Authorization Server Metadata</title>

    <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
      <organization abbrev="Microsoft">Microsoft</organization>
      <address>
        <email>mbj@microsoft.com</email>
	<uri>http://self-issued.info/</uri>
      </address>
    </author>

    <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
      <organization abbrev="NRI">Nomura Research Institute, Ltd.</organization>
      <address>
        <email>n-sakimura@nri.co.jp</email>
	<uri>http://nat.sakimura.org/</uri>
      </address>
    </author>

    <author fullname="John Bradley" initials="J." surname="Bradley">
      <organization abbrev="Ping Identity">Ping Identity</organization>
      <address>
        <email>ve7jtb@ve7jtb.com</email>
	<uri>http://www.thread-safe.com/</uri>
      </address>
    </author>

    <date day="3" month="August" year="2016" />

    <area>Security</area>
    <workgroup>OAuth Working Group</workgroup>

    <keyword>OAuth</keyword>
    <keyword>Discovery</keyword>
    <keyword>Metadata</keyword>
    <keyword>Discovery Metadata</keyword>
    <keyword>Configuration Information</keyword>
    <keyword>Authorization Server</keyword>
    <keyword>WebFinger</keyword>
    <keyword>JavaScript Object Notation</keyword>
    <keyword>JSON</keyword>
    <keyword>JSON Web Token</keyword>
    <keyword>JWT</keyword>

    <abstract>
      <t>
	This specification defines a metadata format that
	an OAuth 2.0 client can use to obtain
	the information needed to interact with
	an OAuth 2.0 authorization server,
	including its endpoint locations and authorization server capabilities.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>
	This specification generalizes the metadata format defined by
	<xref target="OpenID.Discovery">"OpenID Connect Discovery 1.0"</xref>
	in a way that is compatible with OpenID Connect Discovery,
	while being applicable to a wider set of OAuth 2.0 use cases.
	This is intentionally parallel to the way that the
	<xref target="RFC7591">"OAuth 2.0 Dynamic Client Registration Protocol"</xref>
	specification generalized the dynamic client registration mechanisms defined by
	<xref target="OpenID.Registration">"OpenID Connect Dynamic Client Registration 1.0"</xref>
	in a way that was compatible with it.
      </t>
      <t>
	The metadata for an authorization server
	is retrieved from a well-known location as a JSON <xref target="RFC7159"/> document,
	which declares its endpoint locations and authorization server capabilities.
	This process is described in <xref target="ASConfig"/>.
      </t>
      <t>
	This metadata can either be communicated in a self-asserted fashion or as
	a set of signed metadata values represented as claims
	in a JSON Web Token (JWT) <xref target="JWT"/>.
	In the JWT case, the issuer is vouching for
	the validity of the data about the authorization server.
	This is analogous to the role that the Software Statement
	plays in OAuth Dynamic Client Registration <xref target="RFC7591"/>.
      </t>
      <t>
	The means by which the client obtains the location
	of the authorization server metadata document
	is out of scope.
	In some cases, the location may be manually configured into the client.
	In other cases, it may be dynamically discovered, for instance,
	through the use of <xref target="RFC7033">WebFinger</xref>,
	as described in Section 2 of
	<xref target="OpenID.Discovery">"OpenID Connect Discovery 1.0"</xref>.
      </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="JWS">JSON Web Signature (JWS)</xref>
	  and <xref target="JWE">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="JWT">JSON Web Token (JWT)</xref>,
	  <!--
	  the terms defined by
	  <xref target="OpenID.Core">OpenID Connect Core 1.0</xref>,
	  -->
	  and the term "Response Mode" defined by
	  <xref target="OAuth.Responses">OAuth 2.0 Multiple Response Type Encoding Practices</xref>.
	</t>
      </section>
    </section>

    <section anchor="ASMetadata" title="Authorization Server Metadata">
      <t>
	Authorization servers can have metadata describing their configuration.
	The following authorization server metadata values
	are used by this specification and are registered in the IANA
	"OAuth Authorization Server Metadata" registry
	established in <xref target="ASMetadataReg"/>:

	<list style="hanging">

	  <t hangText="issuer">
	    <vspace/>
	    REQUIRED.
	    The authorization server's issuer identifier, which is a URL that
	    uses the <spanx style="verb">https</spanx> scheme and has no query or fragment components.
	    This is the location where
	    <spanx style="verb">.well-known</spanx> <xref target="RFC5785">RFC 5785</xref> resources
	    containing information about the authorization server are published.
	    Using these well-known resources is described in <xref target="ASConfig"/>.
	    <!--
	    If WebFinger discovery is supported (see <xref target="WebFingerDiscovery"/>),
	    this value MUST be identical to the issuer identifier value returned by WebFinger.
	    This also MUST be identical to the <spanx style="verb">iss</spanx> Claim value
	    in ID Tokens issued from this Issuer.
	    -->
	    The issuer identifier is used to prevent authorization server mix-up attacks,
	    as described in
	    <xref target="I-D.ietf-oauth-mix-up-mitigation">"OAuth 2.0 Mix-Up Mitigation"</xref>.
	  </t>

	  <t hangText="authorization_endpoint">
	    <vspace/>
	    REQUIRED.
	    URL of the authorization server's authorization endpoint <xref target="RFC6749"/>.
	  </t>

	  <t hangText="token_endpoint">
	    <vspace/>
	    URL of the authorization server's token endpoint <xref target="RFC6749"/>.
	    This is REQUIRED unless only the implicit grant type is used.
	  </t>

	  <!--
	  <t hangText="userinfo_endpoint">
	    <vspace/>
	    RECOMMENDED.
	    URL of the authorization server's UserInfo Endpoint <xref target="OpenID.Core"/>.
	    This URL MUST use the <spanx style="verb">https</spanx> scheme and MAY contain
	    port, path, and query parameter components.
	  </t>
	  -->

	  <t hangText="jwks_uri">
	    <vspace/>
	    OPTIONAL.
	    URL of the authorization server's JWK Set <xref target="JWK"/> document.
	    This contains the signing key(s) the client uses to validate signatures from the authorization server.
	    The JWK Set MAY also contain the server's encryption key(s),
	    which are used by clients to encrypt requests to the server.
	    When both signing and encryption keys are made available,
	    a <spanx style="verb">use</spanx> (public key use) parameter
	    value is REQUIRED for all keys in the referenced JWK Set
	    to indicate each key's intended usage.
	  </t>

	  <t hangText="registration_endpoint">
	    <vspace/>
	    OPTIONAL.
	    URL of the authorization server's OAuth 2.0 Dynamic Client Registration endpoint <xref target="RFC7591"></xref>.
	  </t>

	  <t hangText="scopes_supported">
	    <vspace/>
	    RECOMMENDED.
	    JSON array containing a list of the <xref
	    target="RFC6749">OAuth 2.0</xref> <spanx style="verb">scope</spanx> values that this authorization server supports.
	    <!--
	    The server MUST support the <spanx style="verb">openid</spanx>
	    scope value.
	    -->
	    Servers MAY choose not to advertise some supported scope values
	    even when this parameter is used.
	    <!--
	    , although those defined in
	    <xref target="OpenID.Core"/> SHOULD be listed, if supported.
	    -->
	  </t>

	  <t hangText="response_types_supported">
	    <vspace/>
	    REQUIRED.
	    JSON array containing a list of the OAuth 2.0
	    <spanx style="verb">response_type</spanx> values that this
	    authorization server supports.
	    The array values used are the same as those used with the
	    <spanx style="verb">response_types</spanx> parameter defined by
	    <xref target="RFC7591">"OAuth 2.0 Dynamic Client Registration Protocol"</xref>.
	  </t>

	  <t hangText="response_modes_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the OAuth 2.0
	    <spanx style="verb">response_mode</spanx> values that this
	    authorization server supports, as specified in
	    <xref target="OAuth.Responses">OAuth 2.0 Multiple Response Type Encoding Practices</xref>.
	    If omitted, the default is
	    <spanx style="verb">["query", "fragment"]</spanx>.
	    The response mode value <spanx style="verb">form_post</spanx> is also defined in
	    <xref target="OAuth.Post">OAuth 2.0 Form Post Response Mode</xref>.
	  </t>

	  <t hangText="grant_types_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the OAuth 2.0
	    grant type values that this
	    authorization server supports.
	    The array values used are the same as those used with the
	    <spanx style="verb">grant_types</spanx> parameter defined by
	    <xref target="RFC7591">"OAuth 2.0 Dynamic Client Registration Protocol"</xref>.
	    If omitted, the default value is
	    <spanx style="verb">["authorization_code", "implicit"]</spanx>.
	  </t>

	  <!--
	  <t hangText="acr_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the Authentication Context Class References
	    that this authorization server supports.
	  </t>

	  <t hangText="subject_types_supported">
	    <vspace/>
	    REQUIRED.
	    JSON array containing a list of the Subject Identifier types that
	    this authorization server supports. Valid types include
	    <spanx style="verb">pairwise</spanx> and
	    <spanx style="verb">public</spanx>.
	  </t>

	  <t hangText="id_token_signing_alg_values_supported">
	    <vspace/>
	    REQUIRED.
	    JSON array containing a list of the JWS signing algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the authorization server for the ID Token
	    to encode the claims in a JWT <xref target="JWT" />.
	    The algorithm <spanx style="verb">RS256</spanx> MUST be included.
	    The value <spanx style="verb">none</spanx> MAY be supported,
	    but MUST NOT be used
	    unless the response type used returns no ID Token from the
	    authorization endpoint
	    (such as when using the Authorization Code Flow).
	  </t>

	  <t hangText="id_token_encryption_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWE encryption algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the authorization server for the ID Token
	    to encode the claims in a JWT <xref target="JWT" />.
	  </t>

	  <t hangText="id_token_encryption_enc_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWE encryption algorithms
	    (<spanx style="verb">enc</spanx> values)
	    supported by the authorization server for the ID Token
	    to encode the claims in a JWT <xref target="JWT" />.
	  </t>

	  <t hangText="userinfo_signing_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWS <xref target="JWS" /> signing algorithms
	    (<spanx style="verb">alg</spanx> values) <xref target="JWA" />
	    supported by the UserInfo Endpoint
	    to encode the claims in a JWT <xref target="JWT" />.
	    The value <spanx style="verb">none</spanx> MAY be included.
	  </t>

	  <t hangText="userinfo_encryption_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWE <xref target="JWE" /> encryption algorithms
	    (<spanx style="verb">alg</spanx> values) <xref target="JWA" />
	    supported by the UserInfo Endpoint
	    to encode the claims in a JWT <xref target="JWT" />.
	  </t>

	  <t hangText="userinfo_encryption_enc_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWE encryption algorithms
	    (<spanx style="verb">enc</spanx> values) <xref target="JWA" />
	    supported by the UserInfo Endpoint
	    to encode the claims in a JWT <xref target="JWT" />.
	  </t>

	  <t hangText="request_object_signing_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWS signing algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the authorization server for Request Objects.
	    <!==
	    , which are described in
	    Section 6.1 of <xref target="OpenID.Core">OpenID Connect Core 1.0</xref>.
	    ==>
	    These algorithms are used both when the Request Object is passed by value
	    (using the <spanx style="verb">request</spanx> parameter)
	    and when it is passed by reference
	    (using the <spanx style="verb">request_uri</spanx> parameter).
	    Servers SHOULD support <spanx style="verb">none</spanx> and <spanx style="verb">RS256</spanx>.
	  </t>

	  <t hangText="request_object_encryption_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWE encryption algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the authorization server for Request Objects.
	    These algorithms are used both when the Request Object is passed by value
	    and when it is passed by reference.
	  </t>

	  <t hangText="request_object_encryption_enc_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWE encryption algorithms
	    (<spanx style="verb">enc</spanx> values)
	    supported by the authorization server for Request Objects.
	    These algorithms are used both when the Request Object is passed by value
	    and when it is passed by reference.
	  </t>
	  -->

	  <t hangText="token_endpoint_auth_methods_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of client authentication methods
	    supported by this token endpoint.
	    Client authentication method values are used in the
	    <spanx style="verb">token_endpoint_auth_method</spanx>
	    parameter defined in Section 2 of <xref target="RFC7591"/>.
	    If omitted, the default is <spanx style="verb">client_secret_basic</spanx> --
	    the HTTP Basic Authentication Scheme specified in
	    Section 2.3.1 of <xref target="RFC6749">OAuth 2.0</xref>.
	  </t>

	  <t hangText="token_endpoint_auth_signing_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWS signing algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the token endpoint for the signature on
	    the JWT <xref target="JWT" /> used to authenticate the client
	    at the token endpoint for the <spanx style="verb">private_key_jwt</spanx>
	    and <spanx style="verb">client_secret_jwt</spanx> authentication methods.
	    Servers SHOULD support <spanx style="verb">RS256</spanx>.
	    The value <spanx style="verb">none</spanx> MUST NOT be used.
	  </t>

	  <!--
	  <t hangText="display_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the <spanx style="verb">display</spanx>
	    parameter values that the authorization server supports.
	    These values are described in
	    Section 3.1.2.1 of <xref target="OpenID.Core">OpenID Connect Core 1.0</xref>.
	  </t>

	  <t hangText="claim_types_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the Claim Types
	    that the authorization server supports.
	    These Claim Types are described in
	    Section 5.6 of <xref target="OpenID.Core">OpenID Connect Core 1.0</xref>.
	    Values defined by this specification are <spanx style="verb">normal</spanx>,
	    <spanx style="verb">aggregated</spanx>, and <spanx style="verb">distributed</spanx>.
	    If omitted, the implementation supports
	    only <spanx style="verb">normal</spanx> claims.
	  </t>

	  <t hangText="claims_supported">
	    <vspace/>
	    RECOMMENDED.
	    JSON array containing a list of the Claim Names of the Claims
	    that the authorization server MAY be able to supply values for.
	    Note that for privacy or other reasons, this might not be an exhaustive list.
	  </t>
	  -->

	  <t hangText="service_documentation">
	    <vspace/>
	    OPTIONAL.
	    URL of a page containing human-readable information that
	    developers might want or need to know when using the authorization server.
	    In particular, if the authorization server does not support Dynamic Client Registration,
	    then information on how to register clients needs to be provided in this documentation.
	  </t>

	  <!--
	  <t hangText="claims_locales_supported">
	    <vspace/>
	    OPTIONAL.
	    Languages and scripts supported for values in claims being returned,
	    represented as a JSON array of
	    <xref target="RFC5646">BCP47</xref> language tag values.
	    Not all languages and scripts are necessarily supported for all claim values.
	  </t>
	  -->

	  <t hangText="ui_locales_supported">
	    <vspace/>
	    OPTIONAL.
	    Languages and scripts supported for the user interface,
	    represented as a JSON array of
	    <xref target="RFC5646">BCP47</xref> language tag values.
	  </t>

	  <!--
	  <t hangText="claims_parameter_supported">
	    <vspace/>
	    OPTIONAL.
	    Boolean value specifying whether the authorization server supports use of the
	    <spanx style="verb">claims</spanx> parameter,
	    with <spanx style="verb">true</spanx> indicating support.
	    If omitted, the default value is <spanx style="verb">false</spanx>.
	  </t>

	  <t hangText="request_parameter_supported">
	    <vspace/>
	    OPTIONAL.
	    Boolean value specifying whether the authorization server supports use of the
	    <spanx style="verb">request</spanx> parameter,
	    with <spanx style="verb">true</spanx> indicating support.
	    If omitted, the default value is <spanx style="verb">false</spanx>.
	  </t>

	  <t hangText="request_uri_parameter_supported">
	    <vspace/>
	    OPTIONAL.
	    Boolean value specifying whether the authorization server supports use of the
	    <spanx style="verb">request_uri</spanx> parameter,
	    with <spanx style="verb">true</spanx> indicating support.
	    If omitted, the default value is <spanx style="verb">true</spanx>.
	  </t>

	  <t hangText="require_request_uri_registration">
	    <vspace/>
	    OPTIONAL.
	    Boolean value specifying whether the authorization server requires any
	    <spanx style="verb">request_uri</spanx> values used to be pre-registered
	    using the <spanx style="verb">request_uris</spanx> registration parameter.
	    Pre-registration is REQUIRED when the value is <spanx style="verb">true</spanx>.
	    If omitted, the default value is <spanx style="verb">false</spanx>.
	  </t>
	  -->

	  <t hangText="op_policy_uri">
	    <vspace/>
	    OPTIONAL.
	    URL that the authorization server provides to the person registering
	    the client to read about the authorization server's requirements on how
	    the client can use the data provided by the authorization server.
	    The registration process SHOULD display this
	    URL to the person registering the client if it is given.
	    As described in <xref target="CompatibilityNotes"/>, despite the identifier
	    <spanx style="verb">op_policy_uri</spanx>,
	    appearing to be OpenID-specific,
	    its usage in this specification is actually referring to
	    a general OAuth 2.0 feature that is not specific to OpenID Connect.
	  </t>

	  <t hangText="op_tos_uri">
	    <vspace/>
	    OPTIONAL.
	    URL that the authorization server provides to the person registering
	    the client to read about the authorization server's terms of service.
	    The registration process SHOULD display this
	    URL to the person registering the client if it is given.
	    As described in <xref target="CompatibilityNotes"/>, despite the identifier
	    <spanx style="verb">op_tos_uri</spanx>,
	    appearing to be OpenID-specific,
	    its usage in this specification is actually referring to
	    a general OAuth 2.0 feature that is not specific to OpenID Connect.
	  </t>

	  <t hangText="revocation_endpoint">
	    <vspace/>
	    OPTIONAL.
	    URL of the authorization server's OAuth 2.0 revocation endpoint <xref target="RFC7009"></xref>.
	  </t>

	  <t hangText="revocation_endpoint_auth_methods_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of client authentication methods
	    supported by this revocation endpoint.
	    The valid client authentication method values are those registered
	    in the IANA "OAuth Token Endpoint Authentication Methods" registry
	    <xref target="IANA.OAuth.Parameters"/>.
	  </t>

	  <t hangText="revocation_endpoint_auth_signing_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWS signing algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the revocation endpoint for the signature on
	    the JWT <xref target="JWT" /> used to authenticate the client
	    at the revocation endpoint for the <spanx style="verb">private_key_jwt</spanx>
	    and <spanx style="verb">client_secret_jwt</spanx> authentication methods.
	    The value <spanx style="verb">none</spanx> MUST NOT be used.
	  </t>

	  <t hangText="introspection_endpoint">
	    <vspace/>
	    OPTIONAL.
	    URL of the authorization server's OAuth 2.0 introspection endpoint <xref target="RFC7662"></xref>.
	  </t>

	  <t hangText="introspection_endpoint_auth_methods_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of client authentication methods
	    supported by this introspection endpoint.
	    The valid client authentication method values are those registered
	    in the IANA "OAuth Token Endpoint Authentication Methods" registry
	    <xref target="IANA.OAuth.Parameters"/>
	    or those registered
	    in the IANA "OAuth Access Token Types" registry
	    <xref target="IANA.OAuth.Parameters"/>.
	    (These values are and will remain distinct,
	    due to <xref target="UpdatedInstructions"/>.)
	  </t>

	  <t hangText="introspection_endpoint_auth_signing_alg_values_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of the JWS signing algorithms
	    (<spanx style="verb">alg</spanx> values)
	    supported by the introspection endpoint for the signature on
	    the JWT <xref target="JWT" /> used to authenticate the client
	    at the introspection endpoint for the <spanx style="verb">private_key_jwt</spanx>
	    and <spanx style="verb">client_secret_jwt</spanx> authentication methods.
	    The value <spanx style="verb">none</spanx> MUST NOT be used.
	  </t>

	  <t hangText="code_challenge_methods_supported">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of PKCE <xref target="RFC7636"/>
	    code challenge methods supported by this authorization server.
	    Code challenge method values are used in the
	    <spanx style="verb">code_challenge_method</spanx>
	    parameter defined in Section 4.3 of <xref target="RFC7636"/>.
	    The valid code challenge method values are those registered
	    in the IANA "PKCE Code Challenge Methods" registry
	    <xref target="IANA.OAuth.Parameters"/>.
	  </t>

	  <t hangText="protected_resources">
	    <vspace/>
	    OPTIONAL.
	    JSON array containing a list of resource identifiers for OAuth protected resources,
	    as defined in <xref target="OAuth.ResourceMetadata"/>,
	    for protected resources that can be used with this authorization server.
	    Authorization servers MAY choose not to advertise some supported protected resources
	    even when this parameter is used.
	    In some use cases, the set of protected resources will not be enumerable,
	    in which case this metadata parameter would not be used.
	  </t>

	</list>
      </t>
      <t>
	Additional authorization server metadata parameters MAY also be used.
	Some are defined by other specifications,
	such as
	<xref target="OpenID.Discovery">OpenID Connect Discovery 1.0</xref>.
      </t>

      <section anchor="SignedMetadata" title="Signed Authorization Server Metadata">
	<t>
	  In addition to JSON elements, metadata values MAY also be provided
	  as a <spanx style="verb">signed_metadata</spanx> value,
	  which is a JSON Web Token (JWT) <xref target="JWT"/>
	  that asserts metadata values about the authorization server as a bundle.
	  A set of claims that can be used in signed metadata
	  are defined in <xref target="ASMetadata"/>.
	  The signed metadata MUST be digitally signed or MACed
	  using <xref target="JWS">JSON Web Signature (JWS)</xref>
	  and MUST contain an <spanx style="verb">iss</spanx> (issuer) claim
	  denoting the party attesting to the claims in the signed metadata.
	  Consumers of the metadata MAY ignore the signed metadata
	  if they do not support this feature.
	  If the consumer of the metadata supports signed metadata,
	  metadata values conveyed in the signed metadata
	  MUST take precedence over those conveyed using plain JSON elements.
	</t>
	<t>
	  Signed metadata is included in the authorization server metadata JSON object
	  using this OPTIONAL member:
	  <list style="hanging">

	    <t hangText="signed_metadata">
	      <vspace/>
	      A JWT containing metadata values about the authorization server as claims.
	      This is a string value consisting of the entire signed JWT.
	      A <spanx style="verb">signed_metadata</spanx>
	      metadata value SHOULD NOT appear as a claim in the JWT.
	    </t>

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

    </section>

    <section anchor="ASConfig"
             title="Obtaining Authorization Server Metadata">

      <t>
	Authorization servers supporting metadata
	MUST make a JSON document containing metadata as specified in <xref target="ASMetadata"/>
	available at a path formed by
	concatenating a well-known URI string such as
	<spanx style="verb">/.well-known/oauth-authorization-server</spanx> to the
	authorization server's issuer identifier.
	The syntax and semantics of <spanx style="verb">.well-known</spanx>
	are defined in <xref target="RFC5785">RFC 5785</xref>.
	The well-known URI path suffix used MUST be registered in the IANA
	"Well-Known URIs" registry <xref target="IANA.well-known"/>.
      </t>
      <t>
	Different applications utilizing OAuth authorization servers in application-specific ways
	may define and register different well-known URI path suffixes
	used to publish authorization server metadata as used by those applications.
	For instance, if the Example application uses an OAuth authorization server in an Example-specific way,
	and there are Example-specific metadata values that it needs to publish,
	then it might register and use the
	<spanx style="verb">example-configuration</spanx> URI path suffix and publish
	the metadata document at the path formed by concatenating
	<spanx style="verb">/.well-known/example-configuration</spanx> to the
	authorization server's issuer identifier.
      </t>
      <t>
	An OAuth 2.0 application using this specification MUST specify
	what well-known URI string it will use for this purpose.
	The same authorization server MAY choose to publish its metadata at multiple
	well-known locations relative to its issuer identifier,
	for example, publishing metadata at both
	<spanx style="verb">/.well-known/example-configuration</spanx> and
	<spanx style="verb">/.well-known/oauth-authorization-server</spanx>.
      </t>
      <t>
	Some OAuth applications will choose to use
	the well-known URI path suffix
	<spanx style="verb">openid-configuration</spanx> and publish
	the metadata document at the path formed by concatenating
	<spanx style="verb">/.well-known/openid-configuration</spanx> to the
	authorization server's issuer identifier.
	As described in <xref target="CompatibilityNotes"/>, despite the identifier
	<spanx style="verb">/.well-known/openid-configuration</spanx>,
	appearing to be OpenID-specific,
	its usage in this specification is actually referring to
	a general OAuth 2.0 feature that is not specific to OpenID Connect.
      </t>

      <section anchor="ASConfigurationRequest"
	       title="Authorization Server Metadata Request">
        <t>
	  An authorization server metadata document MUST be queried using an HTTP
	  <spanx style="verb">GET</spanx> request at the previously specified path.
	</t>
        <t>
	  The client would make the following request when the
	  issuer identifier is <spanx style="verb">https://example.com</spanx>
	  and the well-known URI path suffix is <spanx style="verb">oauth-authorization-server</spanx>
	  to obtain the metadata,
	  since the issuer identifier contains no path component:
	</t>
        <t>
	  <figure>
            <artwork><![CDATA[
  GET /.well-known/oauth-authorization-server HTTP/1.1
  Host: example.com
]]></artwork>
          </figure>
	</t>

	<t>
	  If the
	  issuer identifier value contains a path component, any terminating
	  <spanx style="verb">/</spanx> MUST be removed before appending
	  <spanx style="verb">/.well-known/</spanx> and the well-known URI path suffix.
	  The client would make the following request when the
	  issuer identifier is <spanx style="verb">https://example.com/issuer1</spanx>
	  and the well-known URI path suffix is <spanx style="verb">oauth-authorization-server</spanx>
	  to obtain the metadata,
	  since the issuer identifier contains a path component:
	</t>
        <t>
	  <figure>
            <artwork><![CDATA[
  GET /issuer1/.well-known/oauth-authorization-server HTTP/1.1
  Host: example.com
]]></artwork>
          </figure>
	</t>

	<t>
	  Using path components enables supporting multiple issuers per host.
	  This is required in some multi-tenant hosting configurations.
	  This use of <spanx style="verb">.well-known</spanx> is for supporting
	  multiple issuers per host; unlike its use in
	  <xref target="RFC5785">RFC 5785</xref>, it does not provide
	  general information about the host.
	</t>

      </section>

      <section anchor="ASConfigurationResponse"
	       title="Authorization Server Metadata Response">
        <t>
	  The response is a set of claims about the authorization server's
	  configuration, including all necessary endpoints and
	  public key location information.
	  A successful response MUST use the 200 OK HTTP status code and return
	  a JSON object using the <spanx style="verb">application/json</spanx> content type
	  that contains a set of claims as its members
	  that are a subset of the metadata values defined in
	  <xref target="ASMetadata"/>.
	  Other claims MAY also be returned.
	</t>
        <t>
	  Claims that return multiple values are represented as JSON arrays.
	  Claims with zero elements MUST be omitted from the response.
	</t>
	<t>
	  An error response uses the applicable HTTP status code value.
	</t>
        <t>
	  <figure>
	    <preamble>The following is a non-normative example response:</preamble>

            <artwork><![CDATA[
  HTTP/1.1 200 OK
  Content-Type: application/json

  {
   "issuer":
     "https://server.example.com",
   "authorization_endpoint":
     "https://server.example.com/authorize",
   "token_endpoint":
     "https://server.example.com/token",
   "token_endpoint_auth_methods_supported":
     ["client_secret_basic", "private_key_jwt"],
   "token_endpoint_auth_signing_alg_values_supported":
     ["RS256", "ES256"],
   "userinfo_endpoint":
     "https://server.example.com/userinfo",
   "jwks_uri":
     "https://server.example.com/jwks.json",
   "registration_endpoint":
     "https://server.example.com/register",
   "scopes_supported":
     ["openid", "profile", "email", "address",
      "phone", "offline_access"],
   "response_types_supported":
     ["code", "code token"],
   "service_documentation":
     "http://server.example.com/service_documentation.html",
   "ui_locales_supported":
     ["en-US", "en-GB", "en-CA", "fr-FR", "fr-CA"]
  }
]]></artwork>
          </figure>
	</t>
      </section>

      <section anchor="ASConfigurationValidation"
	       title="Authorization Server Metadata Validation">

        <t>
	  The <spanx style="verb">issuer</spanx> value returned MUST be identical to
	  the authorization server's issuer identifier value that was
	  concatenated with the well-known URI path suffix to create the URL
	  used to retrieve the metadata.
	  <!--
	  This MUST also be identical to the <spanx style="verb">iss</spanx> claim value
	  in ID Tokens issued from this Issuer.
	  -->
	  If these values are not identical, the data contained in the response MUST NOT be used.
	</t>
      </section>
    </section>

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

      <t>
	Processing some OAuth 2.0 messages requires comparing
	values in the messages to known values. For example, the
	member names in the metadata response might be
	compared to specific member names such as <spanx
	style="verb">issuer</spanx>.  Comparing Unicode <xref target="UNICODE"/> strings,
	however, has significant security implications.
      </t>
      <t>
	Therefore, comparisons between JSON strings and other Unicode
	strings MUST be performed as specified below:

	<list style="numbers">

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

        </list>
      </t>

    </section>

    <section anchor="CompatibilityNotes" title="Compatibility Notes">

      <t>
	The identifiers
	<spanx style="verb">/.well-known/openid-configuration</spanx>,
	<spanx style="verb">op_policy_uri</spanx>,
	and <spanx style="verb">op_tos_uri</spanx>
	contain strings referring to the
	OpenID Connect <xref target="OpenID.Core"/> family of specifications
	that were originally defined by
	<xref target="OpenID.Discovery">"OpenID Connect Discovery 1.0"</xref>.
	Despite the reuse of these identifiers that appear to be OpenID-specific,
	their usage in this specification is actually referring to
	general OAuth 2.0 features that are not specific to OpenID Connect.
      </t>

    </section>

    <section anchor="Security" title="Security Considerations">

      <section anchor="TLSRequirements" title="TLS Requirements">
	<t>
	  Implementations MUST support TLS.
	  Which version(s) ought to be implemented will vary over
	  time, and depend on the widespread deployment and known
	  security vulnerabilities at the time of implementation.
	  The authorization server MUST support
	  TLS version 1.2 <xref target='RFC5246' />
	  and MAY support additional transport-layer security mechanisms meeting its security requirements.
	  When using TLS, the client MUST perform a TLS/SSL server certificate check,
	  per <xref target="RFC6125">RFC 6125</xref>.
	  Implementation security considerations can be found in
	  <xref target="BCP195">Recommendations for Secure Use of TLS and DTLS</xref>.
	</t>
	<t>
	  To protect against information disclosure and tampering,
	  confidentiality protection MUST be applied using TLS
	  with a ciphersuite that provides confidentiality and
	  integrity protection.
	</t>
      </section>

      <section anchor="Impersonation" title="Impersonation Attacks">
	<t>
	  TLS certificate checking MUST be performed by the client,
	  as described in <xref target="TLSRequirements"/>,
	  when making an authorization server metadata request.
	  Checking that the server certificate is valid for the issuer identifier URL
	  prevents man-in-middle and DNS-based attacks.
	  These attacks could cause a client to be tricked into using an attacker's
	  keys and endpoints, which would enable impersonation of the legitimate authorization server.
	  If an attacker can accomplish this, they can access the resources
	  that the affected client has access to
	  using the authorization server that they are impersonating.
	</t>
	<t>
	  An attacker may also attempt to impersonate an authorization server by publishing
	  a metadata document that contains an <spanx style="verb">issuer</spanx> claim
	  using the issuer identifier URL of the authorization server being impersonated,
	  but with its own endpoints and signing keys.
	  This would enable it to impersonate that authorization server, if accepted by the client.
	  To prevent this, the client MUST ensure that the issuer identifier URL it is using
	  as the prefix for the metadata request exactly matches the value of
	  the <spanx style="verb">issuer</spanx> metadata value
	  in the authorization server metadata document received by the client.
	  <!--
	  and that this also exactly matches the <spanx style="verb">iss</spanx> claim
	  value in ID Tokens that are supposed to be from that Issuer.
	  -->
	</t>
      </section>

      <section anchor="StandardFormat" title="Publishing Metadata in a Standard Format">
	<t>
	  Publishing information about the authorization server in a standard format
	  makes it easier for both legitimate clients and attackers
	  to use the authorization server.
	  Whether an authorization server publishes its metadata in an ad-hoc manner
	  or in the standard format defined by this specification,
	  the same defenses against attacks that might be mounted
	  that use this information should be applied.
	</t>
      </section>

      <section anchor="ProtectedResources" title="Protected Resources">
	<t>
	  Secure determination of appropriate protected resources
	  to use with an authorization server for all use cases
	  is out of scope of this specification.
	  This specification assumes that the client has a means of determining
	  appropriate protected resources to use with an authorization server
	  and that the client is using the correct metadata
	  for each authorization server.
	  Implementers need to be aware that if an inappropriate protected resource
	  is used by the client, that an attacker may be able to act as
	  a man-in-the-middle proxy to a valid protected resource without
	  it being detected by the authorization server or the client.
	</t>
	<t>
	  The ways to determine the appropriate protected resources to use
	  with an authorization server are in general, application-dependent.
	  For instance, some authorization servers are used with
	  a fixed protected resource or set of protected resources,
	  the locations of which may be well known,
	  or which could be published as metadata values by the authorization server.
	  In other cases, the set of resources that can be used with
	  an authorization server can by dynamically changed
	  by administrative actions.
	  Many other means of determining appropriate associations between
	  authorization servers and protected resources are also possible.
	</t>
	<t>
	  To support use cases in which the set of legitimate protected resources
	  to use with the authorization server is fixed and enumerable,
	  this specification defines the <spanx style="verb">protected_resources</spanx>
	  metadata value, which enables explicitly listing them.
	  Note that if the set of legitimate authorization servers
	  to use with a protected resource is also fixed and enumerable,
	  lists in the authorization server metadata and protected resource metadata
	  should be cross-checked against one another for consistency
	  when these lists are used by the application profile.
	</t>
      </section>

    </section>

    <section anchor="IANA" title="IANA Considerations">

      <t>
	The following registration procedure is used for the
	registry established by this specification.
      </t>
      <t>
	Values are registered on a Specification Required <xref target="RFC5226"/>
	basis after a two-week review period on the oauth-ext-review@ietf.org
	mailing list, on the advice of one or more Designated Experts.
	However, to allow for the allocation of values prior to publication,
	the Designated Experts may approve registration once they are satisfied
	that such a specification will be published.
       </t>
       <t>
	Registration requests sent to the mailing list for review should use
	an appropriate subject
	(e.g., "Request to register OAuth Authorization Server Metadata: example").
       </t>
      <t>
	Within the review period, the Designated Experts will either approve or
	deny the registration request, communicating this decision to the review list and IANA.
	Denials should include an explanation and, if applicable, suggestions as to how to make
	the request successful.
	Registration requests that are undetermined for
	a period longer than 21 days can be brought to the IESG's attention
	(using the iesg@ietf.org mailing list) for resolution.
      </t>
      <t>
	Criteria that should be applied by the Designated Experts includes
	determining whether the proposed registration duplicates existing functionality,
	determining whether it is likely to be of general applicability
	or whether it is useful only for a single application,
	and whether the registration makes sense.
      </t>
      <t>
	IANA must only accept registry updates from the Designated Experts and should direct
	all requests for registration to the review mailing list.
      </t>
      <t>
	It is suggested that multiple Designated Experts be appointed who are able to
	represent the perspectives of different applications using this specification,
	in order to enable broadly-informed review of registration decisions.
	In cases where a registration decision could be perceived as
	creating a conflict of interest for a particular Expert,
	that Expert should defer to the judgment of the other Experts.
      </t>

      <section title="OAuth Authorization Server Metadata Registry" anchor="ASMetadataReg">
	<t>
	  This specification establishes the
	  IANA "OAuth Authorization Server Metadata" registry
	  for OAuth 2.0 authorization server metadata names.
	  The registry records the authorization server metadata member
	  and a reference to the specification that defines it.
	</t>

        <section title="Registration Template" anchor="ASMetadataTemplate">
          <t>
            <list style='hanging'>
              <t hangText='Metadata Name:'>
                <vspace/>
                The name requested (e.g., "issuer").
		This name is case-sensitive.
		Names may not match other registered names in a case-insensitive manner
		unless the Designated Experts state that there is a compelling reason
		to allow an exception.
              </t>
              <t hangText='Metadata Description:'>
                <vspace/>
                Brief description of the metadata (e.g., "Issuer identifier URL").
              </t>
              <t hangText='Change Controller:'>
                <vspace/>
                For Standards Track RFCs, list the "IESG".
		For others, give the name of the responsible party.
		Other details (e.g., postal address, email address, home page URI) may also be included.
              </t>
              <t hangText='Specification Document(s):'>
                <vspace/>
                Reference to the document or documents that specify the parameter,
		preferably including URIs that
                can be used to retrieve copies of the documents.
		An indication of the relevant
                sections may also be included but is not required.
              </t>
            </list>
          </t>
        </section>

        <section title="Initial Registry Contents" anchor="ASMetadataContents">
          <t> <?rfc subcompact="yes"?>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">issuer</spanx>
              </t>
              <t>
                Metadata Description:
		Authorization server's issuer identifier URL
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">authorization_endpoint</spanx>
              </t>
              <t>
                Metadata Description:
		URL of the authorization server's authorization endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">token_endpoint</spanx>
              </t>
              <t>
                Metadata Description:
		URL of the authorization server's token endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">jwks_uri</spanx>
              </t>
              <t>
                Metadata Description:
		URL of the authorization server's JWK Set document
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">registration_endpoint</spanx>
              </t>
              <t>
                Metadata Description:
		URL of the authorization server's OAuth 2.0 Dynamic Client Registration Endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">scopes_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the OAuth 2.0
		<spanx style="verb">scope</spanx> values that this authorization server supports
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">response_types_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the OAuth 2.0
		<spanx style="verb">response_type</spanx> values that this
		authorization server supports
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">response_modes_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the OAuth 2.0
		<spanx style="verb">response_mode</spanx> values that this
		authorization server supports
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">grant_types_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the OAuth 2.0
		grant type values that this
		authorization server supports
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">token_endpoint_auth_methods_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of client authentication methods
		supported by this token endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">token_endpoint_auth_signing_alg_values_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the JWS signing algorithms
		supported by the token endpoint for the signature on
		the JWT used to authenticate the client
		at the token endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">service_documentation</spanx>
              </t>
              <t>
                Metadata Description:
		URL of a page containing human-readable information that
		developers might want or need to know when using the authorization server
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">ui_locales_supported</spanx>
              </t>
              <t>
                Metadata Description:
		Languages and scripts supported for the user interface,
		represented as a JSON array of
		BCP47 language tag values
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">op_policy_uri</spanx>
              </t>
              <t>
                Metadata Description:
		URL that the authorization server provides to the person registering
		the client to read about the authorization server's requirements on how
		the client can use the data provided by the authorization server
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">op_tos_uri</spanx>
              </t>
              <t>
                Metadata Description:
		URL that the authorization server provides to the person registering
		the client to read about the authorization server's terms of service
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">revocation_endpoint</spanx>
              </t>
              <t>
                Metadata Description:
		URL of the authorization server's OAuth 2.0 revocation endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">revocation_endpoint_auth_methods_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of client authentication methods
		supported by this revocation endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">revocation_endpoint_auth_signing_alg_values_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the JWS signing algorithms
		supported by the revocation endpoint for the signature on
		the JWT used to authenticate the client
		at the revocation endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">introspection_endpoint</spanx>
              </t>
              <t>
                Metadata Description:
		URL of the authorization server's OAuth 2.0 introspection endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">introspection_endpoint_auth_methods_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of client authentication methods
		supported by this introspection endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">introspection_endpoint_auth_signing_alg_values_supported</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of the JWS signing algorithms
		supported by the introspection endpoint for the signature on
		the JWT used to authenticate the client
		at the introspection endpoint
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">code_challenge_methods_supported</spanx>
              </t>
              <t>
                Metadata Description:
		PKCE code challenge methods supported by this authorization server
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
          <t>
            <list style='symbols'>
              <t>
                Metadata Name: <spanx style="verb">protected_resources</spanx>
              </t>
              <t>
                Metadata Description:
		JSON array containing a list of resource identifiers for OAuth protected resources
              </t>
              <t>
                Change Controller: IESG
              </t>
              <t>
                Specification Document(s): <xref target="ASMetadata"/> of [[ this specification ]]
              </t>
            </list>
          </t>
	</section>
	<?rfc subcompact="no"?>
      </section>

      <section anchor="UpdatedInstructions" title="Updated Registration Instructions">
	<t>
	  This specification adds to the instructions for the Designated Experts
	  of the following IANA registries, both of which are in the
	  "OAuth Parameters" registry
	  <xref target="IANA.OAuth.Parameters"/>:
	  <?rfc subcompact="yes"?>
	  <list style="symbols">
	    <t>
	      OAuth Access Token Types
	    </t>
	    <t>
	      OAuth Token Endpoint Authentication Methods
	    </t>
	  </list>
	  <?rfc subcompact="no"?>
	</t>
	<t>
	  IANA has added a link to this specification in the Reference sections
	  of these registries.
	  [[ RFC Editor:  The above sentence is written in the past tense
	  as it would appear in the final specification, even though these
	  links won't actually be created until after the IESG has requested
	  publication of the specification.
	  Please delete this note after the links are in place. ]]
	</t>
	<t>
	  For these registries, the designated experts must reject
	  registration requests in one registry
	  for values already occurring in the other registry.
	  This is necessary because the
	  <spanx style="verb">introspection_endpoint_auth_methods_supported</spanx>
	  parameter allows for the use of values from either registry.
	  That way, because the values in the two registries will continue to be
	  mutually exclusive, no ambiguities will arise.
	</t>
      </section>

      <section anchor="WellKnownRegistry" title="Well-Known URI Registry">
	<t>
	  This specification registers the well-known URI defined in
	  <xref target="ASConfig"/> in the IANA
	  "Well-Known URIs" registry <xref target="IANA.well-known"/>
	  established by <xref target="RFC5785">RFC 5785</xref>.
	</t>

	<section anchor='WellKnownContents' title='Registry Contents'>
	  <t> <?rfc subcompact="yes"?>
            <list style='symbols'>
	      <t>
		URI suffix: <spanx style="verb">oauth-authorization-server</spanx>
	      </t>
	      <t>
		Change controller: IESG
	      </t>
	      <t>
		Specification document: <xref target="ASConfig"/> of [[ this specification ]]
	      </t>
	      <t>
		Related information: (none)
	      </t>
	    </list>
	  </t>
	</section>
	<?rfc subcompact="no"?>

      </section>

    </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.5226"?>
      <?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.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.7009"?>
      <?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.7159"?>
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7565"?>
      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7591"?>
      <?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"?>

      <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 initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></author>
	  <author initials='R.' surname='Holz' fullname='R. Holz'><organization /></author>
	  <author initials='P.' surname='Saint-Andre' fullname='P. Saint-Andre'><organization /></author>
	  <date year='2015' month='May' />
	  <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 type='ASCII' octets='60283'/>
      </reference>

      <reference anchor="USA15" target="http://www.unicode.org/reports/tr15/">
	<front>
	  <title>Unicode Normalization Forms</title>

	  <author fullname="Mark Davis" initials="M." surname="Davis">
	  </author>

	  <author fullname="Ken Whistler" initials="K." surname="Whistler">
	  </author>

	  <date day="1" month="June" year="2015" />
	</front>

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

      <reference anchor="JWT" target="http://tools.ietf.org/html/rfc7519">
        <front>
          <title>JSON Web Token (JWT)</title>

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

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

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

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

	<seriesInfo name="RFC" value="7519"/>
	<seriesInfo name="DOI" value="10.17487/RFC7519"/>
      </reference>

      <reference anchor="JWS" target="http://tools.ietf.org/html/rfc7515">
        <front>
          <title>JSON Web Signature (JWS)</title>

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

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

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

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

	<seriesInfo name="RFC" value="7515"/>
	<seriesInfo name="DOI" value="10.17487/RFC7515"/>
      </reference>

      <reference anchor="JWE" target="http://tools.ietf.org/html/rfc7516">
        <front>
          <title>JSON Web Encryption (JWE)</title>

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

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

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

	<seriesInfo name="RFC" value="7516"/>
	<seriesInfo name="DOI" value="10.17487/RFC7516"/>
      </reference>

      <reference anchor="JWA" target="http://tools.ietf.org/html/rfc7518">
        <front>
          <title>JSON Web Algorithms (JWA)</title>

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

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

	<seriesInfo name="RFC" value="7518"/>
	<seriesInfo name="DOI" value="10.17487/RFC7518"/>
      </reference>

      <reference anchor="JWK" target="http://tools.ietf.org/html/rfc7517">
        <front>
	  <title>JSON Web Key (JWK)</title>

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

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

	<seriesInfo name="RFC" value="7517"/>
	<seriesInfo name="DOI" value="10.17487/RFC7517"/>
      </reference>

      <reference anchor="OAuth.Responses" target="http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html">
        <front>
	  <title>OAuth 2.0 Multiple Response Type Encoding Practices</title>

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

	  <author fullname="Marius Scurtescu" initials="M." surname="Scurtescu">
	    <organization abbrev="Google">Google</organization>
	  </author>

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

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

	  <date day="25" month="February" year="2014" />
        </front>
      </reference>

      <reference anchor="OAuth.Post" target="http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html">
        <front>
	  <title>OAuth 2.0 Form Post Response Mode</title>

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

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

	  <date day="27" month="April" year="2015" />
        </front>
      </reference>

      <reference anchor="IANA.OAuth.Parameters" target="http://www.iana.org/assignments/oauth-parameters">
        <front>
          <title>OAuth Parameters</title>
          <author>
            <organization>IANA</organization>
          </author>
	  <date/>
        </front>
      </reference>

      <reference anchor="UNICODE" target="http://www.unicode.org/versions/latest/">
	<front>
	  <title abbrev="Unicode">The Unicode Standard</title>
	  <author>
	    <organization>The Unicode Consortium</organization>
	    <address />
	  </author>
	  <date />
	</front>
	<!--
	  Note that this reference is to the latest version of Unicode,
	  rather than to a specific release.  It is not expected that future changes in
	  the UNICODE specification will impact the syntax of JSON or the UTF-8 encoding.
	-->
      </reference>

      <reference anchor="OAuth.ResourceMetadata" target="http://tools.ietf.org/html/draft-jones-oauth-resource-metadata-00">
        <front>
	  <title abbrev="OAuth 2.0 Protected Resource Metadata">OAuth 2.0 Protected Resource Metadata</title>

	  <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
	    <organization abbrev="Microsoft">Microsoft</organization>
	    <address>
	      <email>mbj@microsoft.com</email>
	      <uri>http://self-issued.info/</uri>
	    </address>
	  </author>

	  <author fullname="Phil Hunt" initials="P." surname="Hunt">
	    <organization>Oracle</organization>
	    <address>
	      <email>phil.hunt@yahoo.com</email>
	    </address>
	  </author>

	  <date day="3" month="August" year="2016" />
        </front>
	<seriesInfo name="Internet-Draft" value="draft-jones-oauth-resource-metadata-00"/>
      </reference>

    </references>

    <references title="Informative References">

      <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="8" month="November" year="2014"/>
        </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>Illumila</organization>
          </author>

          <date day="8" month="November" year="2014"/>
        </front>

      </reference>

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

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

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

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

          <date day="8" month="November" year="2014"/>
        </front>
      </reference>

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

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

          <author fullname="John Bradley" initials="J." surname="Bradley">
            <organization 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="Naveen Agarwal" initials="N." surname="Agarwal">
            <organization abbrev="Google">Google</organization>
          </author>

          <date day="8" month="November" year="2014"/>
        </front>
      </reference>
      -->

      <reference anchor="IANA.well-known" target="http://www.iana.org/assignments/well-known-uris">
        <front>
          <title>Well-Known URIs</title>
          <author>
            <organization>IANA</organization>
          </author>
	  <date/>
        </front>
      </reference>

      <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-oauth-mix-up-mitigation-01.xml" ?>

    </references>

    <section anchor="Acknowledgements" title="Acknowledgements">

      <t>
	This specification is based on the OpenID Connect Discovery 1.0 specification,
	which was produced by the OpenID Connect working group of the OpenID Foundation.
      </t>
      <t>
	Review comments resulting in substantive edits to the specification
	were made by
	Brian Campbell,
	William Denniss,
	Vladimir Dzhuvinov,
	Samuel Erdtman,
	George Fletcher,
	Phil Hunt,
	Tony Nadalin,
	Justin Richer,
	and
	Hans Zandbelt.
      </t>
    </section>

    <section anchor="History" title="Document History">
      <t>[[ to be removed by the RFC Editor before publication as an RFC ]]</t>

      <t>
	-04
        <list style="symbols">
	  <t>
	    Added the ability to list protected resources with the
	    <spanx style="verb">protected_resources</spanx> element.
	  </t>
	  <t>
	    Added ability to provide signed metadata with the
	    <spanx style="verb">signed_metadata</spanx> element.
	  </t>
	  <t>
	    Removed "Discovery" from the name, since this is now just about authorization server metadata.
	  </t>
	</list>
      </t>

      <t>
	-03
        <list style="symbols">
	  <t>
	    Changed term "issuer URL" to "issuer identifier" for terminology consistency,
	    paralleling the same terminology consistency change in the mix-up mitigation spec.
	  </t>
	</list>
      </t>

      <t>
	-02
        <list style="symbols">
	  <t>
	    Changed the title to OAuth 2.0 Authorization Server Discovery Metadata.
	  </t>
	  <t>
	    Made <spanx style="verb">jwks_uri</spanx> and
	    <spanx style="verb">registration_endpoint</spanx> OPTIONAL.
	  </t>
	  <t>
	    Defined the well-known URI string
	    <spanx style="verb">/.well-known/oauth-authorization-server</spanx>.
	  </t>
	  <t>
	    Added security considerations about publishing
	    authorization server discovery metadata in a standard format.
	  </t>
	  <t>
	    Added security considerations about protected resources.
	  </t>
	  <t>
	    Added more information to the <spanx style="verb">grant_types_supported</spanx>
	    and <spanx style="verb">response_types_supported</spanx> definitions.
	  </t>
	  <t>
	    Referenced the working group Mix-Up Mitigation draft.
	  </t>
	  <t>
	    Changed some example metadata values.
	  </t>
	  <t>
	    Acknowledged individuals for their contributions to the specification.
	  </t>
	</list>
      </t>

      <t>
	-01
        <list style="symbols">
	  <t>
	    Removed WebFinger discovery.
	  </t>
	  <t>
	    Clarified the relationship between the issuer identifier URL and
	    the well-known URI path relative to it
	    at which the discovery metadata document is located.
	  </t>
	</list>
      </t>

      <t>
	-00
        <list style="symbols">
	  <t>
	    Created the initial working group version based on draft-jones-oauth-discovery-01,
	    with no normative changes.
	  </t>
	</list>
      </t>

    </section>

  </back>
</rfc>
