<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.1.2 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>

<rfc ipr="trust200902" docName="draft-sheffer-oauth-jwt-bcp-00" category="bcp">

  <front>
    <title abbrev="JWT BCP">JSON Web Token Best Current Practices</title>

    <author initials="Y." surname="Sheffer" fullname="Yaron Sheffer">
      <organization>Intuit</organization>
      <address>
        <email>yaronf.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Hardt" fullname="Dick Hardt">
      <organization>Amazon</organization>
      <address>
        <email>dick@amazon.com</email>
      </address>
    </author>
    <author initials="M.B." surname="Jones" fullname="Michael B. Jones">
      <organization>Microsoft</organization>
      <address>
        <email>mbj@microsoft.com</email>
        <uri>http://self-issued.info/</uri>
      </address>
    </author>

    <date year="2017" month="June" day="04"/>

    <area>Security</area>
    <workgroup>OAuth Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>JSON Web Tokens, also known as JWTs <xref target="RFC7519"/>, are URL-safe JSON-based security tokens
that contain a set of claims that can be signed and/or encrypted.
JWTs are being widely used and deployed as a simple security token format
in numerous protocols and applications, both in the area of digital identity,
and in other application areas.
The goal of this Best Current Practices document is to provide actionable guidance
leading to secure implementation and deployment of JWTs.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>JSON Web Tokens, also known as JWTs <xref target="RFC7519"/>, are URL-safe JSON-based security tokens
that contain a set of claims that can be signed and/or encrypted.
The JWT specification has seen rapid adoption because it encapsulates
security-relevant information in one, easy to protect location, and because
it is easy to implement using widely-available tools.
One application area in which JWTs are commonly used is representing digital identity information,
such as OpenID Connect ID Tokens <xref target="OpenID.Core"/>
and OAuth 2.0 <xref target="RFC6749"/> access tokens and refresh tokens, the details of which are deployment-specific.</t>

<t>Since the JWT specification was published, there have been several widely published
attacks on implementations and deployments.
Such attacks are the result of under-specified security mechanisms, as well as incomplete
implementations and incorrect usage by applications.</t>

<t>The goal of this document is to facilitate secure implementation and deployment of JWTs.
Many of the recommendations in this document will actually be about
implementation and use of the cryptographic mechanisms underlying JWTs that are defined by
JSON Web Signature (JWS) <xref target="RFC7515"/>,
JSON Web Encryption (JWE) <xref target="RFC7516"/>, and
JSON Web Algorithms (JWA) <xref target="RFC7518"/>.
Others will be about use of the JWT claims themselves.</t>

<t>These are intended to be minimum recommendations for the use of JWTs in the vast majority of implementation
and deployment scenarios.  Other specifications that reference this document can have
stricter requirements related to one or more aspects of the format, based on their
particular circumstances; when that is the case, implementers are advised to adhere
to those stricter requirements.  Furthermore, this document provides a floor, not a ceiling,
so stronger options are always allowed (e.g., depending on differing evaluations of the
importance of cryptographic strength vs. computational load).</t>

<t>Community knowledge about the strength of various algorithms and feasible attacks can
change quickly, and experience shows that a Best Current Practice (BCP) document about
security is a point-in-time statement. Readers are advised to seek out any errata or
updates that apply to this document.</t>

<section anchor="target-audience" title="Target Audience">

<t>The targets of this document are:</t>

<t><list style="symbols">
  <t>Implementers of JWT libraries (and the JWS and JWE libraries used by them),</t>
  <t>Implementers of code that uses such libraries (to the extent that some mechanisms may
not be provided by libraries, or until they are), and</t>
  <t>Developers of specifications that rely on JWTs, both inside and outside the IETF.</t>
</list></t>

</section>
<section anchor="conventions-used-in-this-document" title="Conventions used in this document">

<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"/>.</t>

</section>
</section>
<section anchor="threats-and-vulnerabilities" title="Threats and Vulnerabilities">

<t>This section lists some known and possible problems with JWT implementations and deployments.
Each problem description is followed by references to one or more mitigations to those problems.</t>

<section anchor="weak-signatures-and-insufficient-signature-validation" title="Weak Signatures and Insufficient Signature Validation">

<t>Signed JSON Web Tokens carry an explicit indication of the signing algorithm,
in the form of the “alg” header parameter, to facilitate cryptographic agility.
This, in conjunction with design flaws in some libraries and applications, have led to several attacks:</t>

<t><list style="symbols">
  <t>The algorithm can be changed to “none” by an attacker, and some libraries would trust
this value and “validate” the JWT without checking any signature.</t>
  <t>An “RS256” (RSA, 2048 bit) parameter value can be changed into
“HS256” (HMAC, SHA-256), and some libraries
would try to validate the signature using HMAC-SHA256 and using the RSA public key as the
HMAC shared secret.</t>
</list></t>

<t>For mitigations, see <xref target="algorithm-verification" /> and <xref target="appropriate-algorithms" />.</t>

</section>
<section anchor="weak-symmetric-keys" title="Weak symmetric keys">

<t>In addition, some applications sign tokens using a weak symmetric key and a keyed
MAC algorithm such as “HS256”. In most cases, these keys are human memorable passwords
that are vulnerable to dictionary attacks <xref target="Langkemper"></xref>.</t>

<t>For mitigations, see <xref target="key-entropy" />.</t>

</section>
<section anchor="multiplicity-of-json-encodings" title="Multiplicity of JSON encodings">

<t>Many practitioners are not aware that JSON <xref target="RFC7159"/> allows several different character
encodings: UTF-8, UTF-16 and UTF-32. As a result, the JWT might be
misinterpreted by its recipient.</t>

<t>For mitigations, see <xref target="use-utf8" />.</t>

</section>
<section anchor="incorrect-composition-of-encryption-and-signature" title="Incorrect Composition of Encryption and Signature">

<t>Some libraries that decrypt a JWE-encrypted JWT to obtain a JWS-signed object
do not always validate the internal signature.</t>

<t>For mitigations, see <xref target="validate-crypto" />.</t>

</section>
<section anchor="insecure-use-of-elliptic-curve-encryption" title="Insecure Use of Elliptic Curve Encryption">

<t>Per <xref target="Sanso"></xref>, several JOSE libraries fail to validate their inputs correctly
when performing elliptic curve key agreement (the “ECDH-ES” algorithm).
An attacker that is able to send JWEs of its choosing that use invalid curve points and
observe the cleartext outputs resulting from decryption with the invalid curve points
can use this vulnerability to recover the recipient’s private key.</t>

<t>For mitigations, see <xref target="validate-inputs" />.</t>

</section>
<section anchor="substitution" title="Substitution Attacks">

<t>There are attacks in which one recipient will have a JWT intended for it
and attempt to use it at a different recipient that it was not intended for.
If not caught, these attacks can result in the attacker gaining access to resources
that it is not entitled to access.</t>

<t>For mitigations, see <xref target="validate-iss-sub" /> and <xref target="use-aud" />.</t>

</section>
<section anchor="cross-jwt-confusion" title="Cross-JWT Confusion">

<t>As JWTs are being used by more and more different protocols, it becomes increasingly
important to prevent cases of JWT tokens that have been issued for one purpose
being subverted and used for another.
Note that this is a specific type of substitution attacks.</t>

<!-- I don't think this text really adds value.  I've left it in a comment for now.
     It is actually describing possible mitigations, not problems, but mitigations that don't work.
     That's why I think we should delete it.
Unfortunately the JWT specification does not include one standardized attribute
that can be used to distinguish between different applications. The "critical"
attribute of [RFC7515] only points to critical headers (attributes), and therefore cannot
be used as a distinguishing value.
Neither can the "typ" attribute be used, since it is defined as
a Media Type, and in fact the highly generic values "JOSE" [RFC7515] or "JWT" [RFC7519]
are valid. 
-->

<t>For mitigations, see <xref target="validate-iss-sub" />, <xref target="use-aud" />, and
<xref target="preventing-confusion" />.</t>

</section>
</section>
<section anchor="BP" title="Best Practices">

<t>The best practices listed below should be applied by practitioners
to mitigate the threats listed in the preceding section.</t>

<section anchor="algorithm-verification" title="Perform Algorithm Verification">

<t>Libraries MUST enable the caller to specify a supported set of algorithms and
MUST NOT use any other algorithms when performing cryptographic operations.
The library MUST ensure that the “alg” or “enc” header specifies the same algorithm
that is used for the cryptographic operation.
Moreover, each key MUST be used with exactly one algorithm,
and this MUST be checked when the cryptographic operation is performed.</t>

</section>
<section anchor="appropriate-algorithms" title="Use Appropriate Algorithms">

<t>As Section 5.2 of <xref target="RFC7515"></xref> says, “it is an application decision which algorithms may
be used in a given context.  Even if a JWS can be successfully
validated, unless the algorithm(s) used in the JWS are acceptable to
the application, it SHOULD consider the JWS to be invalid.”</t>

<t>Therefore, applications MUST only allow the use of cryptographically current algorithms
that meet the security requirements of the application.
This set will vary over time as new algorithms are introduced
and existing algorithms are deprecated due to discovered cryptographic weaknesses.
Applications must therefore be designed to enable cryptographic agility.</t>

<t>That said, if a JWT is cryptographically protected by a transport layer, such as TLS
using cryptographically current algorithms, there may be no need to apply another layer of
cryptographic protections to the JWT.
In such cases, the use of the “none” algorithm can be perfectly acceptable.
JWTs using “none” are often used in application contexts in which the content is optionally signed;
then the URL-safe claims representation and processing can be the same in both the signed and unsigned cases.</t>

</section>
<section anchor="validate-crypto" title="Validate All Cryptographic Operations">

<t>All cryptographic operations used in the JWT MUST be validated and the entire JWT MUST be rejected
if any of them fail to validate.
This is true not only of JWTs with a single set of Header Parameters
but also for Nested JWTs, in which both outer and inner operations MUST be validated
using the keys and algorithms supplied by the application.</t>

<!-- See draft-ietf-oauth-jwsreq-13, sec. 6.1 and 6.2. -->

</section>
<section anchor="validate-inputs" title="Validate Cryptographic Inputs">

<t>Some cryptographic operations, such as Elliptic Curve Diffie-Hellman key agreement
(“ECDH-ES”) take inputs that may contain invalid values, such as points not on the specified elliptic curve
or other invalid points.
Either the JWS/JWE library itself must validate these inputs before using them
or it must use underlying cryptographic libraries that do so (or both!).</t>

</section>
<section anchor="key-entropy" title="Ensure Cryptographic Keys have Sufficient Entropy">

<t>The Key Entropy and Random Values advice in Section 10.1 of <xref target="RFC7515"></xref> and
the Password Considerations in Section 8.8 of <xref target="RFC7518"></xref>
MUST be followed.
In particular, human-memorizable passwords MUST NOT be directly used
as the key to a keyed-MAC algorithm such as “HS256”.</t>

</section>
<section anchor="use-utf8" title="Use UTF-8">

<t><xref target="RFC7515"></xref>, <xref target="RFC7516"></xref>, and <xref target="RFC7519"></xref> all specify that UTF-8 be used for encoding and decoding JSON
used in Header Parameters and JWT Claims Sets.
Implementations and applications MUST do this, and not use other Unicode encodings for these purposes.</t>

</section>
<section anchor="validate-iss-sub" title="Validate Issuer and Subject">

<t>When a JWT contains an “iss” (issuer) claim, the application MUST validate that the cryptographic keys
used for the cryptographic operations in the JWT belong to the issuer.
If they do not, the application MUST reject the JWT.</t>

<t>The means of determining the keys owned by an issuer is application-specific.
As one example, OpenID Connect <xref target="OpenID.Core"/> issuer values are “https” URLs
that reference a JSON metadata document that contains a “jwks_uri” value that is
an “https” URL from which the issuer’s keys are retrieved as a JWK Set <xref target="RFC7517"/>.
This same mechanism is used by <xref target="OAuth.Metadata"/>.
Other applications may use different means of binding keys to issuers.</t>

<t>Similarly, when the JWT contains a “sub” (subject) claim, the application MUST validate that
the subject value corresponds to a valid subject and/or issuer/subject pair at the application.
This may include confirming that the issuer is trusted by the application.
If the issuer, subject, or the pair are invalid, the application MUST reject the JWT.</t>

</section>
<section anchor="use-aud" title="Use and Validate Audience">

<t>If the same issuer can issue JWTs that are intended for use by more than one relying party or application,
the JWT MUST contain an “aud” (audience) claim that can be used to determine whether the JWT
is being used by an intended party or was substituted by an attacker at an unintended party.
Furthermore, the relying party or application MUST validate the audience value
and if the audience value is not associated with the recipient, it MUST reject the JWT.</t>

</section>
<section anchor="preventing-confusion" title="Use Mutually Exclusive Validation Rules for Different Kinds of JWTs">

<t>NOTE:  A goal of this BCP is to recommend specific best practices for applications of JWTs to apply.
The strategies listed below are some of the options available to these applications.
The authors request input from the OAuth working group and other interested parties
on which of these strategies or which combinations should be considered to be best practices in which contexts.
Descriptions of other practical strategies not listed below are also solicited.</t>

<!-- I disagree with this text for several reasons.  For one, this probably won't work for existing applications.
     It requires inventing a multiplicity of new MIME types that make semantic distinctions
     when there are no actual syntactic distinctions (what MIME types are meant for).
     And there are existing mechanisms described below that will already achieve this goal,
     without inventing a new one in this BCP.
Libraries MUST allow callers to specify the "typ" header parameter of each JWT, both when
creating a JWT and when parsing and validating it.
Applications SHOULD use this value to distinguish between different uses, to
ensure that a signed statement cannot be misinterpreted. For example, a single organization
may sign JWTs with different "typ" values:

* "JWT+id" for identity tokens.
* "JWT+set+risc" for RISC events.
* "JWT+set+oidc-logout" for OID Connect Logout events.

Specifications that define JWT applications SHOULD define a unique "typ" value.
-->

<t>Each application of JWTs defines a profile specifying the required and optional JWT claims
and the validation rules associated with them.
If more than one kind of JWT can be issued by the same issuer,
the validation rules for those JWTs MUST be written such that they are mutually exclusive,
rejecting JWTs of the wrong kind.
To prevent substitution of JWTs from one context into another, a number of strategies may be employed:</t>

<t><list style="symbols">
  <t>Use different sets of required claims or different required claim values.
Then the validation rules for one kind of JWT will reject those with different claims or values.</t>
  <t>Use different sets of required header parameters or different required header parameter values.
Then the validation rules for one kind of JWT will reject those with different header parameters or values.</t>
  <t>Use different keys for different kinds of JWTs.
Then the keys used to validate one kind of JWT will fail to validate other kinds of JWTs.</t>
  <t>Use different “aud” values for different uses of JWTs from the same issuer.
Then audience validation will reject JWTs substituted into inappropriate contexts.</t>
  <t>Use different issuers for different kinds of JWTs.
Then the distinct “iss” values can be used to segregate the different kinds of JWTs.</t>
</list></t>

<t>Given the broad diversity of JWT usage and applications,
the best combination of required claims, values, header parameters, key usages, and issuers
to differentiate among different kinds of JWTs
will, in general, be application specific.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document requires no IANA actions.</t>

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

<t>Thanks to Antonio Sanso for bringing the “ECDH-ES” invalid point attack to the attention
of JWE and JWT implementers.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC7159" target='http://www.rfc-editor.org/info/rfc7159'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organization /></author>
<date year='2014' month='March' />
<abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t><t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t></abstract>
</front>
<seriesInfo name='RFC' value='7159'/>
<seriesInfo name='DOI' value='10.17487/RFC7159'/>
</reference>



<reference  anchor="RFC7515" target='http://www.rfc-editor.org/info/rfc7515'>
<front>
<title>JSON Web Signature (JWS)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification.  Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7515'/>
<seriesInfo name='DOI' value='10.17487/RFC7515'/>
</reference>



<reference  anchor="RFC7516" target='http://www.rfc-editor.org/info/rfc7516'>
<front>
<title>JSON Web Encryption (JWE)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Hildebrand' fullname='J. Hildebrand'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification.  Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7516'/>
<seriesInfo name='DOI' value='10.17487/RFC7516'/>
</reference>



<reference  anchor="RFC7518" target='http://www.rfc-editor.org/info/rfc7518'>
<front>
<title>JSON Web Algorithms (JWA)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications.  It defines several IANA registries for these identifiers.</t></abstract>
</front>
<seriesInfo name='RFC' value='7518'/>
<seriesInfo name='DOI' value='10.17487/RFC7518'/>
</reference>



<reference  anchor="RFC7519" target='http://www.rfc-editor.org/info/rfc7519'>
<front>
<title>JSON Web Token (JWT)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t></abstract>
</front>
<seriesInfo name='RFC' value='7519'/>
<seriesInfo name='DOI' value='10.17487/RFC7519'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC6749" target='http://www.rfc-editor.org/info/rfc6749'>
<front>
<title>The OAuth 2.0 Authorization Framework</title>
<author initials='D.' surname='Hardt' fullname='D. Hardt' role='editor'><organization /></author>
<date year='2012' month='October' />
<abstract><t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.  This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6749'/>
<seriesInfo name='DOI' value='10.17487/RFC6749'/>
</reference>



<reference  anchor="RFC7517" target='http://www.rfc-editor.org/info/rfc7517'>
<front>
<title>JSON Web Key (JWK)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2015' month='May' />
<abstract><t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key.  This specification also defines a JWK Set JSON data structure that represents a set of JWKs.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7517'/>
<seriesInfo name='DOI' value='10.17487/RFC7517'/>
</reference>


<reference anchor="Langkemper" target="https://www.sjoerdlangkemper.nl/2016/09/28/attacking-jwt-authentication/">
  <front>
    <title>Attacking JWT Authentication</title>
    <author initials="S." surname="Langkemper" fullname="Sjoerd Langkemper">
      <organization></organization>
    </author>
    <date year="2016" month="September"/>
  </front>
</reference>
<reference anchor="Sanso" target="https://blogs.adobe.com/security/2017/03/critical-vulnerability-uncovered-in-json-encryption.html">
  <front>
    <title>Critical Vulnerability Uncovered in JSON Encryption</title>
    <author initials="A." surname="Sanso" fullname="Antonio Sanso">
      <organization></organization>
    </author>
    <date year="2017" month="March"/>
  </front>
</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 initials="N." surname="Sakimura" fullname="Nat Sakimura">
      <organization></organization>
    </author>
    <author initials="J." surname="Bradley" fullname="John Bradley">
      <organization></organization>
    </author>
    <author initials="M.B." surname="Jones" fullname="Michael B. Jones">
      <organization></organization>
    </author>
    <author initials="B.d." surname="Medeiros" fullname="Breno de Medeiros">
      <organization></organization>
    </author>
    <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
      <organization></organization>
    </author>
    <date year="2014" month="November"/>
  </front>
</reference>
<reference anchor="OAuth.Metadata" target="http://tools.ietf.org/html/draft-ietf-oauth-discovery-06">
  <front>
    <title>OAuth 2.0 Authorization Server Metadata</title>
    <author initials="M.B." surname="Jones" fullname="Michael B. Jones">
      <organization></organization>
    </author>
    <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
      <organization></organization>
    </author>
    <author initials="J." surname="Bradley" fullname="John Bradley">
      <organization></organization>
    </author>
    <date year="2017" month="March"/>
  </front>
</reference>


    </references>


<section anchor="document-history" title="Document History">

<t>[[ to be removed by the RFC editor before publication as an RFC ]]</t>

<section anchor="draft-sheffer-oauth-jwt-bcp-00" title="draft-sheffer-oauth-jwt-bcp-00">

<t><list style="symbols">
  <t>Initial version.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIACMkM1kAA81cbZPbtrX+jl+BKh+ybiXt2qkdx+3tdLNe15t4bV9rHU8n
4+lAJCTBS5EqQa6iZPzf73POAUBSkmvnztyZ+6GxVgSBg/P6nAdQJ5OJalxT
2Cf6h9mrl/qdneub6taW+nvrG33R1rUtG/26NlnjMuuVmc9re4fR72709xev
VV5lpVnj9bw2i2biV3axsPWkMm2zmnzYNpN5tpmcnanMNHZZ1bsnGl+odpPj
b/9EVXNfFZY/Krepn+imbn3z4Ozsu7MHytTWPNEzm7W1a3ZqW9W3y7pqN0/0
q3NMr9/hC1cu9T/oS3VrdxiRP9FXZWPr0jaTpySSUr4xZf4vU1QlxNxhDxv3
RGldLzKb+2ZXhG+1bqqs99GVObYev/BV3dR24dPfu/Xgz6Z2WRqcVes13k1P
XVm4slvG/tJMCuehrd16XhUYNqn++CelSGdVTbJN8D96DY/+OdUzUSp/J8r+
p6mrcvB9VS9N6X41jatKVkHrGn5g18YVT/RoR68sps42i78v6bsppBwN13o6
1c9NnTe9lZ667Lb35XCZ87X5tSoHy+QY/3fD3x9Z4Hr6/VT/AEP43hLXLlsZ
W+jBo+FCGFJXvloMt7Sef/j7Oj6Jq2kNb8HDVdNsnpyeelssJs771uZTVy6q
05FSZVWvMfGdJVW/eXbx4P7978LHb+8/TB8f3n/YfXzUfXzcffyO3BazDud7
9O2fe5N8Sx9fmHJ5a9cby+bVujN11E/UxuxDZeu89wI/DTE6Om8ak7HTUwBS
FMDPXMZqkt1TYFHQbBq7nttaP3g81g/O7j+SaUy9tHBTUo6Hdrbb7dTzgkVa
b1oWp/TC6dl3pw8en5q4IkezGax4qjDrzJS++tyuzsumKl0lgwc7ukBsY7pC
/9QWpa3N3BUIdv22zKo7W9scjiOp6bLM6t1mf6PXps5W+v43vMlvj25yXlRL
PzV5NbfkJHAJSSi0y29Pz745zYIIk7u+CJM2ijBx5eSDr8qJTSJMV826oN2/
2tjy6un0oqrt53Tw0jTY/61bt7U58viHaoWsW5u8sLsjj49GyXDI98jVlc6t
vra5dQiLI2MuVi0C+hrZzK0h88AUshd9UZWlzZD88Vzfn5711f0SGmG3Eq/6
84HCoe8K07h8igx86jc28+GLSSbz4t/aTu7/66zTIfnx9No2BouYz6nxCxTx
ezWdFMBl5cH0jCOrqkP+QTTVcAQdJTzif2ef8D+oo6mQ4jnvTpHUTmnTp1Is
6btQKXPn2dl2k7NHSk0mE23mqCmoukoNC7Mfa1P4St+W1bbUxlMi8Pq330JC
+vgRz2G3t29eTLxZWI6dydx4RFJ0fFQ3mkg1K+gJVmkMYszgcaOrhc4K49Ze
y0NT6rnV3i1LvI8yelrVOkQBEqritWm5uaWctHW5LXa69TIYrrgpqh394Wl+
t94Udk8KLckTWVSX7dqiknu9qSvUX2iNJzGbTRHyDfY+r2AhDEYaooUNSZy7
pWuQQRwVbMw8VvQeBmEszNabgF/xU3WDt5cVXsHbzcr5T6AdDXTTUiXXGNJU
JNgdFtH0uCrNHLtZti43ZWZVYU1OOsAw3qHVvF16OyydFMIzYmXS3lSsvXY5
vFGpr6h011Xe8gr/r21POqQiRDHuFlHBK0jlLexam43Da3nF+RIzZQZ+oV1D
c5iNbwtCgCrKNaltYe8MqTrWU7xFNiztWMNou2CAhlJTUclyY9ZqmFs5tlMc
m9QPf+ycc2LuAB7YdBKY6lVpD1yEFt6ukGh08nDCdFUZvRvr1HZTW08eh8n3
XbC/i7HyLWaCYvYSLD6KWWHCXh35+JH9t0tGbGACFR8/wvXglz5YkXcPGAo5
VuGrMUdGjkzlED8wqWyDdtA53yTaDN43c/BefunQmFvIvGnnwKorm/PMmGZl
7ijeYWJvkbGw6RD2aaQSzIDly70g8HtRAPXPWDfhBRKTRMGG2oI9sgUKr6O8
fT9eW5SB0vk1BYXXW1sU9C92U9GSDdzhyNL0GEGekVOYJfaxG+QX6OMgNezl
gIXJCB7AeX9nnF+bcieT0v6kRciDaJzQ+mttHW0na1pTQLMIQzOv2kYdWYqC
KszKoVktEXmweU9BosRiF2BjiG9xiYWj6J7vukwzQ8CbhjZ28sO72b2UXh4i
vXSjOjRGwy67YY84C5V5N/S8QOPnmhUEwdDzbujjjx8RfuRVXjYc99nfFHll
Skt2DTx/Z4OdPJcAKK+BJrELWAczrF2Jwr8+0DHikScMc7MiQiG5M8j+a/Oh
Ys/Cw6Ge1Z5JfWZLU7vKT4FduMQMwiboF3GJcJHg6puW8irFkJKeEW/X9t+t
q3k9SiuUGHkzSH3ogzThNLg2lmh81IokF5RDTu4Vb8PVamOA6zKk1lpnrsaC
1PsiYfwFacCWIpfz4ix4c9xtlGxAyjT5nfOyvMkp3hU+AQtBaUflhQqetTUp
gcQc7+01FEyq/ouiquqxLit4ns4sYqhcIjNWNG1VLjGtVIogRrE1O3wsimoL
aU7sdDkdkw1gT3Jj7Dh31PzSH6gbRRtUL/qhQAHEpb1zWRsEBha05RK59Q7S
U7ZoxcyI+aIy+T041wU8py3JGajUFjZfRs8k1aUJMPUdOUJLkiYnJ29ZoAo5
KjIxs8HqiuIRE0F52W2xk9plf0HL5dhN/Kraxtg8Dkj0yfcXr+916pWkkFKi
Iz1vKsQDdSwA+CQqnInGTvUbAJQjVkaxvtW0M0pPtq6Bb+F0kaEJ4iBFck0d
WBd6+uorfcNoF4A5511IAhUI7A9zqKE2Sf1RX/X9TqJRF25eQ5tY9IQ0I8E/
Yy0hw/QecwVG5qZ8cG98ZLasyq1IjqHAI1RierPzRixU35BIPM5XUFYvY67N
TpGrIp8EH+YV0yRjCswWpb6gqXa0r3uS9v6on6IsFuh5RJbjqQHqhAtTDkqQ
1jOyxGZhDP5MMl5d3jwTPQM03BG2oEkEguzVDNH8LYQhGszr0fXb2c1oLP/q
l6/485vL/3579ebyKX2ePT9/8SJ9iCNmz1+9fYHnKnzq3rx4dX19+fKpvIxv
9d5X1+f/HIlTj169vrl69fL8xeiwsnGJp0StKG/XwFCNNAhIE2jE57IzLhHE
y1CJACq+WQGVNRJbfaIApqB9OwKdDJk1EWte7BlgMl7ZVF7CEcbEP2uqNw2D
u88DlEsD7wnvBSGl7jmqKSFBwTdSvvf7uXsNOZfR/jGbRknEuu+sue0qr0hx
Vfp2Ac9xpLauKv9kCic1jcAbg/O9LgHJpq7hkyVlF2AbwsVImwHUhQpCuJ6S
Z0pcYxWqIdWWOGqExyO94tShUV3QP8No4z0gNMyvZsn8yZTtMiZros/40JZi
H1Y81IjlURPMloswm6uL0MO2j0FnETOWwM6QWjmfkOunncTWRfItvzMqYZAR
w70yvEjboIX21t5WbZELDa3Yc6m4SGCO7kT1mCgiE9oNJc9sZYWWoyzqo62m
kOy8ROzMHjx8NNInb2bnxBP8+bGeu+Zep8+wxp7YiI9KjZ6Hd59fn1+MNUJ1
gr/vHRNdRdE5VUdZk7HFe6QXoskmmAtTBRDJrStGQkQB8hmnEsNgQdF41CdT
CwJHzMJtn5F/d649plKi//oL4iDk//8aJZNMYLKUBUenf+NV98ZuEBKb2kHm
SVdNMbYXIX4HREcwhIRD5F/BmHnupBVkbfTdhrcdWyXZokGjsD+PuBt9QutC
G+0cKTZuwQpTxCRC2jeMnqTX8pxzpayu2jVMuLaIeu4wN8Z7TsYqIe5IMXL/
CQwjTAJFawAKP3fM7/svUzKWn1hiDTa7pK1rtE9OYp8BLWcIJKeK0BMUx83I
hmEFzRtxAaOzrXRhEJjfErR+/yF3n5TufIpAgWAMauEbhsChSos80W9vnk0e
j/mf++Jn9PGbB1N9TkhFmrxxiqW1W66o4qq18/3agKB1DIwzt3GCO75AK6iR
k7ZZPE4quUqtH9AdCoKL2bDXypCMKdMivQ5TA+sktzwa8gOUTBIfwjugvD8P
jAqgyyRwJ9X8A5ZVeSX6FWg7iE/eLgHQXur4kk3GSSaSgXt7Db3pW2l2LouC
ilZGiBKJtNuxUq+Rfn5mWv79OBn2h1ezPuBaGMI5w5ziakgN6IxqI2otdoqb
DDguVRAG5nHZjJflWFvWVliZE64vlxdPn08uZ6Mu6IC/z7scnXqWGDLeCh5k
cEV+ka2qKqQvAXyQiwUNqzIg5ppCp43E5Er/U1g0S8CAhLd4H+KPNNOirtbR
0KlmiZ0OZ1aUtmlZqRaDUwzIS23ona1j2y8u/DWRnO6OVAml/E5bi9qTrWft
3COKW5b0PGQRfP/bV7735CPDw1o65phrEstFaCUJJ704V1wjECk22NRCu4bb
YUyBHNXQDgOtx21LlxG66cSCDbNJFAD96abqasFfZqZF9MeM2uuaIhcUOd/o
F0uEGWf0SIjRwKqt6ZA6ruhkQabkAniQ4b9X495PoMzjdYsSjWnzZI+LGmBz
QnoDZF+g7FCUnXu9x5XHJka6e8zKHzr9JRJ8TDuZE5lhmd4iBhsTINxik9sI
NWrvhF6glie0VKH2sT463k6OQ9maZPhNWyMdWiVyYZ9w1yYw+CwlDTQlk+lT
9bJqQnVgf+eeM/Y4utltON/0PS8aE9r56x8mE32FXqD8ml8vb2USDkPsi7gu
1POAuaZaX33NsG8h1qS0Go7WWSbA+6kc7FxJioh8WWglaDsJ+Q9sTV4RATga
MAC4AUbnPM9C0p2DsMYNvkXcblc7bEGE33LTTqArt0Q5QsqpekvMb9MijVOX
d5xYzSsbYyErWvR6ZAe+p2Dq3P1qOb6wg7axqk/Gt6Fpz9HkYHet8yt83WzJ
qp3rDBhNhsajeMQ5UmlistPPgdp7r5naDqkSC8TxAfpTSx7f8wF8Mhu8IKeF
cNiLivLxYU9PQjKDGFS9tI75MtoOp384zKjba9wigpFZaQnhSFIarwwdbTqj
b+Bn40DoUiMivMwKAAK7WFpkYDgjrwnsRsVs1N9qje/e3aSvvnuvGJlRtE+1
mkz+9r/NDuNPpgbhBoZPQ8TS0XoWM0XIIkL/dOdQlM2/fy05HEryTcBu9Iwa
XkolFtAsuuM8AGFJMQOcR3xe2JkUwia01mGekGchXGaZaguNtSS311LcO05X
/9QD9lJ2joN+CP8iAQqmJKycoAkZWRRUI6sQJztKKu2G0ht3HEyjDyk2FWkN
rj/MrctpXzdqH44M21RiaCLrT2oVuLOLsvm2Tnku9sHkOUB8qSGOxxLCqHqz
7jWhKgKXlEIPKfokwlRdI5AIJ9BZFwoyQSUWJAYVQxD7iyGcxdmi17dLNDqf
3uBulF4S0veTy5J4QT90okcGJsB43nViffJejHu0S/vIFW4WKJiH0wfD5OIB
eMd6JOFMDXjvuA0wy3kGWXJQ1a1HHFzcPuf+pUO88KEl6gWqwyX96RYCttN5
ZcsVftGiEKgYo8gobVkwTugTBSf+Xo9LC3QjlWNMsWkC4lT8Sicx1+PAjUEW
ourq9LYcQQSYOB0F0LVganzQmrKpOOlyT9U/mRgYi+tZFnjgTjniXWtrAyMd
KeDBUULgcHrrTiNXFkDeHTm8wFNiiwmg2e0g0OR8hU+k6WCPGWtJ7fvDcjoP
zfjsIm9Dd+vjJZ6hA1IPXsIadJBz3tfKuvVNr7DMbWCKpOqFhPEJtkndMJFr
HIwdnOKG/O1QneEUWZKj0U2N7odSjS7MjiIwdv03L2ZKaIMvMUk8H4XbkuAl
uj0bMCfT5wFBySKwjRruIwjVkYSMG6ZEcbA8HePQPx0LvNYB9UVRzT1Zz5fD
dQ3ZUXyxpqmAx7sw68VmCLVeo8DJhL6V81A5smGFiJn+QtEiwZRuIYTTu3Re
3p1dYs8Uq6xhkTvlUazIvHhkryIeLcMfrA5JWT/FrvQcHn0xUOqrlOMle+31
y5S28M6n6sJebrhJ+TWllQiEuMWoh4Nq+4GdTJEzpqPf9UEzHWKSYHDdCgXD
eSGeUXLmp9szwPw21sLnUoBeRwbRKwKxfDmESs1L6wMnIQSsGI8Vim6XqiRD
p5JP3dJ2D7anOl5QOC5q/LqopwodMcZBohGwPwNsOrjs9GHrkacmdGkPiWuq
H03v89SPpg+mmuFX36pDi14J5zC0pnTEHwNh8ylzdoG9R4c8BXJ2dvLcFgXx
dwOaQp0kiuIekNutjayHJGDEerxEE7kBgZ3dYgFUi13Fn9NthiFBoqgh4xwR
55J3p+pSYHOoMqfdcRhTY7ZYSObs8zM+STqXZJpsuVbcxssrlEt61wOGutun
vgDPKn2Ct8mT/nBPwu9SoNLQTD+Su3DHOevOMC6FpITlepRlALV4IT0nX3iD
/1Rr8gLC8HRemXFSiBjj/hmcZgAyCBOSgl4H0pXaby7O3R2L+PLj6ePeu4/f
q+j58TyH0253mD4WZnfCzK77dcjt6gREqVw5ocI4dShhz9mhqAwIxTz5zxRz
QmHMnoqjRy4Tukr7HUfxH72XTih1M4QoEo5mw8lUEUst5B4Xs7ThuCv8QXyv
iknvIMWEk9gbfSEJfWbJNa+OnJ8dIp1czo5FUgoFrmHs1G9Lx+e1iTiOYNkn
amI/0V8RgSFJbNYyubqfEKQlg77eUTkSLBAClRHoCCNG+oSZkPqelKjxfhIT
0XtBFZqBYZDwScSXgHzfLyXUrsltQeYVWQ4mw/g4WajiTwgkhaVDCBw/a2vk
9kNOtloLN5YSd7UtA9oJ7E/NSLybuXcj7Nxzf4Fegyw73r+0tndVLU4Xmm3C
E3z1HtoFAAg4tbsKY+RMYR1u0nbHwv37iMQfjD5sb/2/AGpH4XAstFOKjNct
IFRth01Emq99dyZT0zkPGu3AS/zw7kdy3HQH6Vs6YBZQbPpXAFLnBqVhy4Mb
yuna0tDRqRiQW3dETDLK3Mm1FZaK7iaymJ6v360dMgxdB0nd2tBZ9YjIBX3i
xdN/h7NyOgyvxSNG4uoBdsvcS0qSOhMHhVueIt5p/HZjXK2D7x82E7TtSGMR
j+Gk2U7R0vkbH6p+Ai6I54fB4ygQX7NgOoJFqFNr9aWhEXIpXxtIMDFcVely
q2lzpIoggsBPETqL8bJ3b27AiJPNI5GLEWVg06WgUhHZ0S76HaQaAMp0Cxee
TWyRPjFBwmBrfZQCDHFuyW966OBGOb9HMdMmosBJHmLjE02bxiV6nTaKpqAc
vjhVe5e9/vNGD3wSlojKZ3+Ui9qLI08id48qW2WOsXY6hUlHC9yK/0fDX7eB
Er78BR7q3V3//oR+0xZWys3TFLM/OoqNCL7ZRY4RdfAXlPzLJ1qf790kv3gd
boqmC4gdP75H3S2qvRQSl41NozBT9EOAxi7dPtlHnsiH3qEZTBfoelec44HK
4JIr35bgXzh4ZgxIKgaLkk5pLrl9vA2/sOOf3cnlpIBP4XzSYzBKsl4lBkeE
8QOxyd/4ITSCXBiP5xNZGXmUdIlzT1GphYkd6VQ97W7isN5EsPAKnaR2q5Mf
HSiOeyVf8RE5k1/xcMJ5Bv/R3eLxBNkqHo/SEQxz6/qZnKGEe490pAC90w2s
eHggaCtRJgMzxKOLQNrQNoOfITGv907wiZi5vrq+5DOW1H7cUkcIaEo9hFDu
QiHI3LGihGO/sgpHJNrvkHKy/Zf0yZZm7a1Cb1ER4+3fCxKfR/KfH6e99W7P
dVe5RN8srFxpLqC7nFiJFRVlURvFzzhIHO7T9DVBO6eUGq+SIcKm+1yykGhC
I/s+j9ydMuxfYiKlMteKiAuX8Ehfig7YwsqUosnphUg2tY+IOaQ0+pOOfAYc
VqAGuxNhgS+fO7Rphd6pVJ96NpH7SPc4w2GLXHTuX5OYsi8m1JYIg/4PKRXV
ar4U0zELnQSiJgFyfKmKTkn+5FCQ+Nw3/rJBzhSn8bm3zZ9q5zMZ9eZqdqE5
Ww5HVC7PJkW1hG1l4KsepHzB36fX1OzIlUk5BBKLHNF2eGyoYiGf9fcylRMd
vsbXr00x18qrfHW2rhauiP35LiLoEJ5C9kTGq3cvXUUS6K6rLDVXliPFa81Q
Z4gVkGLzeGIbqnw4og1IqQdJBDscrCStB90r5D3FfnaLHpPIPW4yIyLbSVjH
ymhjZRwrqaLpZwKhrGzpfjYLicrRHTQPznijMrl+0J5CouZLbJH6JK8sW/75
IJ0Rdwk6UKZ2LT8XY+d7O0DSPtwmTrYIpCK23b9y0H8YPJmrXXncPvEEvG8A
TlMJTpBG98KkWzku8Flh91PPp+Q+SFH/R1s4Ks+ndsM9y2Ig8G0fI/Wk46ER
oCbYd1S8gytFUr/3Zt6XRfBx6DWHMrXdtQffwZhe5AQ5+zAzqrKvMH6/D4zZ
g4FZeodiHQrZFzA0dl+or1h8Ax0R9rUH9L0FHEmntZ+cVP2DT8dozLyuTI6R
ACs+3v97dxN+8XRwt5YTCuOtHjg7EmvjxGweuM+YKS6eP1A8QQ+Ky16QmFVn
1hX/XO7oLhQZgglrPsMHKkgn2SFp93649pW+On95vsfyhcvgiVZI0ArYh4fL
TzeZUNLnWfp1Bx+Y8RFSecv4YfCDdTbnnH5rEmtCd29tQNWG/inSOnRJiq/s
K97gZWLQ+j+7Cb8AneM9EuppFP05nKOqd0r9/HMAxbVdV3ddVXjzDKU2dw3J
JhSvXNwN5yvMc9GY9++5HfrM/0GHAvgtHYxUaPYbasr/B/Hgs6QeRAAA

-->

</rfc>

