<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<?rfc comments="yes"?>
<?rfc docmapping="yes"?>
<?rfc inline="yes"?>
<?rfc rfcedstyle="yes"?>
<?rfc strict="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc tocindent="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-rfc8725bis-02" category="bcp" consensus="true" submissionType="IETF" obsoletes="8725" updates="7519" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="JWT BCP">JSON Web Token Best Current Practices</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-rfc8725bis-02"/>
    <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/>
      <address>
        <email>dick.hardt@gmail.com</email>
      </address>
    </author>
    <author initials="M." surname="Jones" fullname="Michael B. Jones">
      <organization>Self-Issued Consulting</organization>
      <address>
        <email>michael_b_jones@hotmail.com</email>
        <uri>https://self-issued.info/</uri>
      </address>
    </author>
    <date year="2025" month="November" day="07"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>JSON Web Token</keyword>
    <keyword>JWT</keyword>
    <keyword>JSON Object Signing and Encryption</keyword>
    <keyword>JOSE</keyword>
    <keyword>JSON Web Signature</keyword>
    <keyword>JWS</keyword>
    <keyword>JSON Web Encryption</keyword>
    <keyword>JWE</keyword>
    <keyword>attacks</keyword>
    <keyword>Claims</keyword>
    <keyword>Security</keyword>
    <keyword>Cryptography</keyword>
    <abstract>
      <?line 174?>

<t>JSON Web Tokens, also known as JWTs, 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.  This Best Current
 Practices (BCP) specification updates RFC 7519 to provide actionable guidance
 leading to secure implementation and deployment of JWTs.</t>
      <t>This BCP specification furthermore replaces the existing JWT BCP
 specification RFC 8725 to provide additional actionable guidance
 covering threats and attacks that have been discovered
 since RFC 8725 was published.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-oauth-rfc8725bis/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/oauth-wg/draft-ietf-oauth-rfc8725bis"/>.</t>
    </note>
  </front>
  <middle>
    <?line 191?>

<section anchor="introduction">
      <name>Introduction</name>
      <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 authorization information, such as OAuth 2.0 access tokens <xref target="RFC9068"/>,
and identity information, such as OpenID Connect ID Tokens <xref target="OpenID.Core"/>.
The details of these uses are application- and 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 are 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 are 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">
        <name>Target Audience</name>
        <t>The intended audiences of this document are:</t>
        <ul spacing="normal">
          <li>
            <t>Implementers of JWT libraries (and the JWS and JWE libraries
 used by those libraries),</t>
          </li>
          <li>
            <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>
          </li>
          <li>
            <t>Developers of specifications that rely on JWTs, both inside and
 outside the IETF.</t>
          </li>
        </ul>
      </section>
      <section anchor="conventions-used-in-this-document">
        <name>Conventions Used in this Document</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="threats-and-vulnerabilities">
      <name>Threats and Vulnerabilities</name>
      <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">
        <name>Weak Signatures and Insufficient Signature Validation</name>
        <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,
 has led to several attacks:</t>
        <ul spacing="normal">
          <li>
            <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>
          </li>
          <li>
            <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 (see  <xref target="McLean"/> and
  <xref target="CVE-2015-9235"/>).</t>
          </li>
        </ul>
        <t>For mitigations, see <xref target="algorithm-verification"/> and <xref target="appropriate-algorithms"/>.</t>
      </section>
      <section anchor="weak-symmetric-keys">
        <name>Weak Symmetric Keys</name>
        <t>In addition, some applications use a keyed Message Authentication
 Code (MAC) algorithm, such as
"HS256", to sign tokens but supply a weak symmetric key with
insufficient entropy (such as a human-memorable password). Such keys
are vulnerable to offline brute-force or dictionary attacks once an
attacker gets hold of such a token  <xref target="Langkemper"/><xref target="JWT-Cracker"/>.</t>
        <t>For mitigations, see  <xref target="key-entropy"/>.</t>
      </section>
      <section anchor="incorrect-composition-of-encryption-and-signature">
        <name>Incorrect Use and Composition of Encryption and Signature</name>
        <t>Most authentication use cases only require a simple signed JWT as their token. However verifiers don't always check that the received JWT is a JWS (a signed JWT) as opposed to a JWE (a JWT with encrypted structure). This can result in vulnerabilities when the verifier's library does not distinguish between successful decryption and successful signature validation <xref target="CVE-2023-51774"/>.</t>
        <t>In the more complicated use cases where confidentiality is required, 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="plaintext-leakage-through-analysis-of-ciphertext-length">
        <name>Plaintext Leakage through Analysis of Ciphertext Length</name>
        <t>Many encryption algorithms leak information about the length of the
 plaintext, with a varying amount of
leakage depending on the algorithm and mode of operation. JWEs are vulnerable to this leakage. This problem is exacerbated
when the plaintext is initially compressed, because the length of the
compressed plaintext and, thus,
the ciphertext
depends not only on the length of the original plaintext but also
on its content.
Compression attacks are particularly
powerful when there is attacker-controlled data in the same compression
space as secret data, which is the case for some attacks on HTTPS.</t>
        <t>See  <xref target="Kelsey"/> for general background
on compression and encryption and  <xref target="Alawatugoda"/> for a specific example of attacks on HTTP cookies.</t>
        <t>For mitigations, see  <xref target="no-compression"/>.</t>
      </section>
      <section anchor="insecure-use-of-elliptic-curve-encryption">
        <name>Insecure Use of Elliptic Curve Encryption</name>
        <t>Per  <xref target="Sanso"/>, several Javascript
 Object Signing and Encryption (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="multiplicity-of-json-encodings">
        <name>Multiplicity of JSON Encodings</name>
        <t>Previous versions of the JSON format, such as the obsoleted  <xref target="RFC7159"/>,
allowed several different character
encodings: UTF-8, UTF-16, and UTF-32. This is not the case anymore, with the latest
standard  <xref target="RFC8259"/> only allowing UTF-8 except
for internal use within a "closed ecosystem".
This ambiguity, where older implementations and those used within closed environments may generate
non-standard encodings, may result in the JWT being
misinterpreted by its recipient. This, in turn, could be used by a malicious sender to bypass
the recipient's validation checks.</t>
        <t>For mitigations, see  <xref target="use-utf8"/>.</t>
      </section>
      <section anchor="substitution">
        <name>Substitution Attacks</name>
        <t>There are attacks in which one recipient will be given a JWT that was intended for it
and will attempt to use it at a different recipient for which that JWT was not intended.
For instance, if an OAuth 2.0  <xref target="RFC6749"/> access
token is legitimately presented to an
OAuth 2.0 protected resource for which it is intended, that protected resource might then present
that same access token to a different protected resource for which the access token is not intended,
in an attempt to gain access. If such situations are not caught, this can result in
the attacker gaining access to resources that it is not entitled to access.</t>
        <t>For mitigations, see Sections  <xref format="counter" target="validate-iss-sub"/> and  <xref format="counter" target="use-aud"/>.</t>
      </section>
      <section anchor="cross-jwt-confusion">
        <name>Cross-JWT Confusion</name>
        <t>As JWTs are used by more protocols in diverse ways, it becomes increasingly
important to prevent JWT tokens that have been issued for one purpose
being used for another.
Note that this is a specific type of substitution attack.
If the JWT could be used in an application context in which it could be
confused with other kinds of JWTs,
then mitigations  <bcp14>MUST</bcp14> be employed to prevent these substitution attacks.</t>
        <t>For mitigations, see Sections  <xref format="counter" target="validate-iss-sub"/>,  <xref format="counter" target="use-aud"/>,  <xref format="counter" target="use-typ"/>, and  <xref format="counter" target="preventing-confusion"/>.</t>
      </section>
      <section anchor="indirect-attacks-on-the-server">
        <name>Indirect Attacks on the Server</name>
        <t>Various JWT claims are used by the recipient to perform lookup operations,
such as database and Lightweight Directory Access Protocol (LDAP) searches.
Others include URLs that are similarly looked up by the server. Any of these claims can be used by
an attacker as vectors for injection attacks or server-side request forgery (SSRF) attacks.</t>
        <t>For mitigations, see  <xref target="do-not-trust-claims"/>.</t>
      </section>
      <section anchor="unreasonable-iterations">
        <name>Computation Cost of Unreasonable Number of Hash Iterations</name>
        <t>The <tt>p2c</tt> (PBES2 Count) header parameter for the PBES2 encryption algorithms
specifies the number of iterative hash computations to be performed.
Attackers can use a very large count,
thereby imposing an unreasonable computational burden on recipients.</t>
        <t>For mitigations, see <xref target="limit-iterations"/>.</t>
      </section>
      <section anchor="autogen-algorithm-verification-code-not-defensively-written">
        <name>Algorithm Verification Code Not Defensively Written</name>
        <t>Some JWT implementations included a list of disallowed algorithm names,
e.g., do not use "none".
These same applications misinterpreted
the JOSE specifications when parsing the token, reading algorithm values
as if they were case-insensitive. The end result was that an attacker
could change the "alg" value to "noNE" and bypass the security check.</t>
        <t>For mitigations, see <xref target="algorithm-verification"/>.</t>
      </section>
      <section anchor="autogen-jwe-decompression-bomb-attack">
        <name>JWE Decompression Bomb Attack</name>
        <t>JWE supports the optional compression of the plaintext prior to encryption via the "zip" header parameter as defined in <xref target="RFC7516"/> Section 4.1.3. Upon decryption, recipients are expected to decompress the payload before further processing. However, if the recipient does not enforce limits on the size of the decompressed output, an attacker can craft a malicious JWE with a highly compressed, arbitrarily large payload. This can cause excessive resource consumption (CPU, memory), resulting in Denial of Service (DoS).</t>
        <t>For mitigation, see <xref target="limit-decompression"/>.</t>
      </section>
      <section anchor="autogen-jwt-format-confusion">
        <name>JWT Format Confusion</name>
        <t>Some JWS implementations support both the Compact and JSON Serializations. While JWTs <bcp14>MUST</bcp14> use the Compact Serialization, if an application by mistake verifies a JWT using the JSON Serialization but extracts claims by parsing it as a JWT using the Compact Serialization (e.g., via string splitting), an attacker can craft a valid JSON JWS with a forged payload. This mismatch in format handling can lead to authentication bypass or impersonation.</t>
        <t>For mitigations, see <xref target="token-format"/>.</t>
      </section>
    </section>
    <section anchor="BP">
      <name>Best Practices</name>
      <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">
        <name>Perform Algorithm Verification</name>
        <t>Libraries  <bcp14>MUST</bcp14> enable the caller to specify a
 supported set of algorithms and  <bcp14>MUST NOT</bcp14> use any other algorithms when performing cryptographic operations.
The library  <bcp14>MUST</bcp14> ensure that the "alg" or "enc" header specifies the same algorithm
that is used for the cryptographic operation.
Moreover, each key  <bcp14>MUST</bcp14> be used with exactly one algorithm,
and this  <bcp14>MUST</bcp14> be checked when the cryptographic operation is performed.</t>
        <t>Libraries <bcp14>SHOULD</bcp14> opt for defensive security policies to cope
with potential issues in the underlying infrastructure, such
as the JSON parser. In particular, libraries <bcp14>SHOULD</bcp14> use allowlists for critical
parameters such as "alg" instead of blocklists.</t>
      </section>
      <section anchor="appropriate-algorithms">
        <name>Use Appropriate Algorithms</name>
        <t>As  Section 5.2 of <xref target="RFC7515"/> 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  <bcp14>SHOULD</bcp14> consider the JWS to be invalid."</t>
        <t>Therefore, applications  <bcp14>MUST</bcp14> 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  <bcp14>MUST</bcp14> therefore be designed to enable cryptographic agility.</t>
        <t>The "none" algorithm should only be used when the JWT is cryptographically protected by other means.
JWTs using "none" are often used in application contexts in which the content is optionally signed.
The URL-safe claims representation and processing in this context can be the same in both
the signed and unsigned cases.
JWT libraries  <bcp14>SHOULD NOT</bcp14> generate JWTs using "none" unless
explicitly requested to do so by the caller.
Similarly, JWT libraries  <bcp14>SHOULD NOT</bcp14> consume JWTs using "none"
 unless explicitly requested by the caller.</t>
        <t>Applications  <bcp14>SHOULD</bcp14> follow these algorithm-specific recommendations:</t>
        <ul spacing="normal">
          <li>
            <t>Avoid all RSA-PKCS1 v1.5 encryption algorithms (<xref target="RFC8017"/>, Section 7.2), preferring
 RSAES-OAEP
 (<xref target="RFC8017"/>, Section 7.1).</t>
          </li>
          <li>
            <t>Elliptic Curve Digital Signature Algorithm (ECDSA) signatures  <xref target="ANSI-X962-2005"/> require a unique random value for
every message
 that is signed.
If even just a few bits of the random value are predictable across multiple messages, then
the security of the signature scheme may be compromised. In the worst case,
the private key may be recoverable by an attacker. To counter these attacks,
JWT libraries  <bcp14>SHOULD</bcp14> implement ECDSA using the deterministic
approach defined in  <xref target="RFC6979"/>.
This approach is completely compatible with existing ECDSA verifiers and so can be implemented
without new algorithm identifiers being required.</t>
          </li>
        </ul>
      </section>
      <section anchor="validate-crypto">
        <name>Validate All Cryptographic Operations</name>
        <t>All cryptographic operations used in the JWT <bcp14>MUST</bcp14> be validated and the entire JWT <bcp14>MUST</bcp14> 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, as defined in <xref section="2" sectionFormat="of" target="RFC7519"/>,
in which both outer and inner operations <bcp14>MUST</bcp14> be validated
using the keys and algorithms supplied by the application.</t>
        <t>Libraries <bcp14>MUST</bcp14> allow the verifier to distinguish between signed JWTs (JWSes) and encrypted JWTs (JWEs).
This allows verifiers to easily establish a policy of only accepting signed JWTs.</t>
      </section>
      <section anchor="validate-inputs">
        <name>Validate Cryptographic Inputs</name>
        <t>Some cryptographic operations, such as Elliptic Curve Diffie-Hellman key agreement
("ECDH-ES"), take inputs that may contain invalid values. This includes points not on
the specified elliptic curve
or other invalid points (e.g.,  <xref target="Valenta"/>, Section 7.1).
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>
        <t>Elliptic Curve Diffie-Hellman Ephemeral Static (ECDH-ES) ephemeral
 public key (epk) inputs should be validated
 according to the recipient's
chosen elliptic curve. For the NIST prime-order curves P-256, P-384, and P-521,
validation  <bcp14>MUST</bcp14>
be performed according to Section 5.6.2.3.4 (ECC Partial Public-Key Validation
Routine) of "Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography"
<xref target="nist-sp-800-56a-r3"/>.
If the "X25519" or "X448"  <xref target="RFC8037"/> algorithms are used,
then the security considerations in  <xref target="RFC8037"/> apply.</t>
      </section>
      <section anchor="key-entropy">
        <name>Ensure Cryptographic Keys Have Sufficient Entropy</name>
        <t>The Key Entropy and Random Values advice in  Section 10.1 of <xref target="RFC7515"/> and the
 Password Considerations in  Section 8.8 of <xref target="RFC7518"/>
          <bcp14>MUST</bcp14> be followed.
In particular, human-memorizable passwords  <bcp14>MUST NOT</bcp14> be directly used
as the key to a keyed-MAC algorithm such as "HS256".
Moreover, passwords should only be used to perform key encryption, rather
than content encryption,
as described in  Section 4.8 of <xref target="RFC7518"/>.
Note that even when used for key encryption, password-based encryption is
 still subject to brute-force attacks.</t>
      </section>
      <section anchor="no-compression">
        <name>Avoid Compression of Encryption Inputs</name>
        <t>Compression of data <bcp14>SHOULD NOT</bcp14> be used when creating a JWE, because
such compressed data often reveals information about the plaintext.</t>
      </section>
      <section anchor="use-utf8">
        <name>Use UTF-8</name>
        <t><xref target="RFC7515"/>,  <xref target="RFC7516"/>, and  <xref target="RFC7519"/> all
 specify that UTF-8 be used for encoding and decoding JSON
used in Header Parameters and JWT Claims Sets. This is also in line with the
latest JSON specification  <xref target="RFC8259"/>.
Implementations and applications <bcp14>MUST</bcp14> do this and not use or allow the use of
other Unicode encodings for these purposes.</t>
      </section>
      <section anchor="validate-iss-sub">
        <name>Validate Issuer and Subject</name>
        <t>When a JWT contains an "iss" (issuer) claim, the application
  <bcp14>MUST</bcp14> validate that the cryptographic keys
used for the cryptographic operations in the JWT belong to the issuer.
If they do not, the application  <bcp14>MUST</bcp14> reject the JWT.</t>
        <t>The means of determining the keys owned by an issuer is application-specific.
As one example, OAuth 2.0 authorization server "issuer" values <xref target="RFC8414"/>
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 OpenID Connect <xref target="OpenID.Core"/>.
Other applications may use different means of binding keys to issuers.</t>
        <t>Similarly, when the JWT contains a "sub" (subject) claim, the
 application  <bcp14>MUST</bcp14> 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.
In the OAuth context, <xref section="4.15" sectionFormat="of" target="RFC9700"/> discusses the possibility of
confusing user identifier and client ID values.
If the issuer, subject, or the pair are invalid, the application
  <bcp14>MUST</bcp14> reject the JWT.</t>
      </section>
      <section anchor="use-aud">
        <name>Use and Validate Audience</name>
        <t>If the same issuer can issue JWTs that are intended for use by more
 than one relying party or application, or may do so in the future,
the JWT  <bcp14>MUST</bcp14> 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.</t>
        <t>In such cases, the relying party or application <bcp14>MUST</bcp14> validate the audience value, and if no audience
value is present or none of the values are associated with the recipient, it <bcp14>MUST</bcp14> reject the JWT.</t>
      </section>
      <section anchor="do-not-trust-claims">
        <name>Do Not Trust Received Claims</name>
        <t>The "kid" (key ID) header is used by the relying application to
 perform key lookup. Applications
should ensure that this does not create SQL or LDAP injection vulnerabilities by validating
and/or sanitizing the received value.</t>
        <t>Similarly, blindly following a "jku" (JWK set URL) or "x5u" (X.509 URL) header,
which may contain an arbitrary URL,
could result in server-side request forgery (SSRF) attacks. Applications <bcp14>SHOULD</bcp14> protect against such
attacks, e.g., by matching the URL to an allowlist of permitted locations
and ensuring no cookies are sent in the GET request.</t>
        <t>When such an allowlist is not available, the authorization server <bcp14>SHOULD</bcp14> check what a hostname resolves to
and avoid making a request if it resolves to a loopback or local IP address.
An example of this is when "attacker.example.com/etc/passwd" is used
as the "jwks_uri" value and there is a DNS entry for "attacker.example.com"
that resolves to "127.0.0.1" or other local IP address values.</t>
      </section>
      <section anchor="use-typ">
        <name>Use Explicit Typing</name>
        <t>When two different uses of JWTs share a common set of claims,
one kind of JWT can be confused for another.
If a particular
kind of JWT is subject to such confusion, that JWT can include an explicit
JWT type value, and the validation rules can specify checking the type.
This mechanism can prevent such confusion.
Explicit JWT typing is accomplished by using the "typ" Header Parameter.
For instance, the  <xref target="RFC8417"/> specification uses
the "application/secevent+jwt" media type
to perform explicit typing of Security Event Tokens (SETs).</t>
        <t>An example of an ad-hoc means of preventing confusion
between different kinds of JWTs is the requirement in
Logout Tokens <xref target="OpenID.Backchannel"/> prohibiting the inclusion of a "nonce" claim
so that Logout Tokens will fail the validation rules for ID Tokens <xref target="OpenID.Core"/>.
The use of explicit typing avoids the need for employing such ad-hoc mechanisms
when the validation rules for both kinds of JWTs include validating the "typ" values
and the acceptable "typ" values for the two kinds of JWTs are distinct.</t>
        <t>Per the definition of "typ" in Section 4.1.9 of <xref target="RFC7515"/>, it is <bcp14>RECOMMENDED</bcp14> that the "application/" prefix
be omitted from the "typ" Header Parameter value, compared to the associated media type.
Therefore, for example, the "typ" value used to explicitly include a type for a SET <bcp14>SHOULD</bcp14> be "secevent+jwt".</t>
        <t>When explicit typing is employed for a JWT, it is <bcp14>RECOMMENDED</bcp14> that a media type name of the
format "application/example+jwt" be used, where "example" is replaced by the identifier for the
specific kind of JWT. Therefore, for example, the media type name for a SET <bcp14>SHOULD</bcp14> be "application/secevent+jwt".</t>
        <t>When applying explicit typing to a Nested JWT, the "typ" Header
 Parameter containing the explicit type value  <bcp14>MUST</bcp14> be present in the inner JWT of the Nested JWT (the JWT
whose payload is the JWT Claims Set).
In some cases, the same "typ" Header Parameter value will be present in the outer JWT as well,
to explicitly type the entire Nested JWT.</t>
        <t>Note that the use of explicit typing may not achieve disambiguation
 from existing kinds of JWTs,
as the validation rules for existing kinds of JWTs often do not use the "typ" Header Parameter value.
Explicit typing is  <bcp14>RECOMMENDED</bcp14> for new uses of JWTs.</t>
      </section>
      <section anchor="preventing-confusion">
        <name>Use Mutually Exclusive Validation Rules for Different Kinds of JWTs</name>
        <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  <bcp14>MUST</bcp14> be written such that
they are mutually exclusive,
rejecting JWTs of the wrong kind.</t>
        <t>To prevent substitution of JWTs from one context into another,
application developers may employ a number of strategies:</t>
        <ul spacing="normal">
          <li>
            <t>Use explicit typing for different kinds of JWTs.
Then the distinct "typ" values can be used to differentiate between the
 different kinds of JWTs.</t>
          </li>
          <li>
            <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>
          </li>
          <li>
            <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>
          </li>
          <li>
            <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>
          </li>
          <li>
            <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>
          </li>
          <li>
            <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>
          </li>
        </ul>
        <t>Given the broad diversity of JWT usage and applications,
the best combination of types, required claims, values, Header Parameters, key usages, and issuers
to differentiate among different kinds of JWTs
will, in general, be application-specific.
As discussed in  <xref target="use-typ"/>, for new JWT
 applications, the use of explicit typing is
  <bcp14>RECOMMENDED</bcp14>.</t>
      </section>
      <section anchor="limit-iterations">
        <name>Limit Hash Iteration Count</name>
        <t>Implementations are <bcp14>RECOMMENDED</bcp14> to set a reasonable upper limit on
the number of hash iterations that can be performed
when validating encrypted content using PBES2 encryption algorithms,
so as to prevent attackers from imposing
an unreasonable computational burden on recipients.
<xref target="OWASP-Password-Storage"/> states a specific iteration count (600,000 at time of publishing)
is required when using HMAC-SHA-256 to achieve FIPS-140 compliance. Rejecting inputs with a <tt>p2c</tt>
(PBES2 Count) value larger than double the recommended OWASP value is <bcp14>RECOMMENDED</bcp14>.</t>
      </section>
      <section anchor="token-format">
        <name>Check JWT Format Type</name>
        <t>Implementations <bcp14>MUST</bcp14> confirm the JWT is in a legal format while parsing it. Legal JWTs,
being dot-concatenated base64url strings, contain only the ASCII characters for letters, numbers, dash,
underscore, and period.  Content with any other characters - especially braces and quotation
marks - is not a JWT and <bcp14>MUST</bcp14> be rejected.</t>
      </section>
      <section anchor="limit-decompression">
        <name>Limit JWE Decompression Size</name>
        <t>Implementations are <bcp14>RECOMMENDED</bcp14> to set a reasonable upper limit on the decompressed size of a JWE such as 250 KB.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This entire document is about security considerations when
 implementing and deploying JSON Web Tokens.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <section anchor="autogen-acknowledgements-for-rfc-8725">
        <name>Acknowledgements for RFC 8725</name>
        <t>The following acknowledgements from <xref target="RFC8725"/>,
the text of which is incorporated into this specification, are retained.</t>
        <t>Thanks to  Antonio Sanso for bringing the
 "ECDH-ES" invalid point attack to the attention
of JWE and JWT implementers.  Tim McLean published the
RSA/HMAC confusion attack  <xref target="McLean"/>.
Thanks to  Nat Sakimura for advocating the use of
explicit typing. Thanks to  Neil Madden for his
numerous comments, and to Carsten Bormann, Brian Campbell, Brian Carpenter, Alissa Cooper, Roman Danyliw, Ben Kaduk,
Mirja Kühlewind, Barry Leiba,
Dan Moore,
Eric Rescorla, Adam Roach, Martin Vigoureux,
and Éric Vyncke
for their reviews.</t>
      </section>
      <section anchor="autogen-acknowledgements-for-this-specification-">
        <name>Acknowledgements for [[ this specification ]]</name>
        <t>We would like to thank
Brian Campbell,
Jianjun Chen,
Dan Moore,
Aaron Parecki,
Filip Skokan,
Tom Tervoort,
Enze Wang,
and
Jesse Yang
for their contributions to the new content in this specification.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6979">
          <front>
            <title>Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author fullname="T. Pornin" initials="T." surname="Pornin"/>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document defines a deterministic digital signature generation procedure. Such signatures are compatible with standard Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) digital signatures and can be processed with unmodified verifiers, which need not be aware of the procedure described therein. Deterministic signatures retain the cryptographic security features associated with digital signatures but can be more easily implemented in various environments, since they do not need access to a source of high-quality randomness.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6979"/>
          <seriesInfo name="DOI" value="10.17487/RFC6979"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <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">
          <front>
            <title>JSON Web Encryption (JWE)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
            <date month="May" year="2015"/>
            <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">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <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">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <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>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8037">
          <front>
            <title>CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)</title>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document defines how to use the Diffie-Hellman algorithms "X25519" and "X448" as well as the signature algorithms "Ed25519" and "Ed448" from the IRTF CFRG elliptic curves work in JSON Object Signing and Encryption (JOSE).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8037"/>
          <seriesInfo name="DOI" value="10.17487/RFC8037"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <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="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="nist-sp-800-56a-r3">
          <front>
            <title>Recommendation for pair-wise key-establishment schemes using discrete logarithm cryptography</title>
            <author fullname="Elaine Barker" initials="E." surname="Barker">
              <organization/>
            </author>
            <author fullname="Lily Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <author fullname="Allen Roginsky" initials="A." surname="Roginsky">
              <organization/>
            </author>
            <author fullname="Apostol Vassilev" initials="A." surname="Vassilev">
              <organization/>
            </author>
            <author fullname="Richard Davis" initials="R." surname="Davis">
              <organization/>
            </author>
            <date month="April" year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.sp.800-56ar3"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ANSI-X962-2005">
          <front>
            <title>Public Key Cryptography for the Financial Services Industry: the Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author>
              <organization>American National Standards Institute</organization>
            </author>
            <date year="2005" month="November"/>
          </front>
        </reference>
        <reference anchor="Alawatugoda">
          <front>
            <title>Protecting Encrypted Cookies from Compression Side-Channel Attacks</title>
            <author fullname="Janaka Alawatugoda" initials="J." surname="Alawatugoda">
              <organization/>
            </author>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization/>
            </author>
            <author fullname="Colin Boyd" initials="C." surname="Boyd">
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="Lecture Notes in Computer Science" value="pp. 86-106"/>
          <seriesInfo name="DOI" value="10.1007/978-3-662-47854-7_6"/>
          <seriesInfo name="ISBN" value="[&quot;9783662478530&quot;, &quot;9783662478547&quot;]"/>
          <refcontent>Springer Berlin Heidelberg</refcontent>
        </reference>
        <reference anchor="CVE-2015-9235" target="https://nvd.nist.gov/vuln/detail/CVE-2015-9235">
          <front>
            <title>CVE-2015-9235 Detail</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="2018" month="May"/>
          </front>
          <refcontent>National Vulnerability Database</refcontent>
        </reference>
        <reference anchor="CVE-2023-51774" target="https://nvd.nist.gov/vuln/detail/CVE-2023-51774">
          <front>
            <title>CVE-2023-51774 Detail</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="2024" month="February"/>
          </front>
          <refcontent>National Vulnerability Database</refcontent>
        </reference>
        <reference anchor="JWT-Cracker" target="https://github.com/brendan-rius/c-jwt-cracker">
          <front>
            <title>JWT Cracker</title>
            <author initials="B." surname="Rius" fullname="Brendan Rius">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Kelsey">
          <front>
            <title>Compression and Information Leakage of Plaintext</title>
            <author fullname="John Kelsey" initials="J." surname="Kelsey">
              <organization/>
            </author>
            <date year="2002"/>
          </front>
          <seriesInfo name="Lecture Notes in Computer Science" value="pp. 263-276"/>
          <seriesInfo name="DOI" value="10.1007/3-540-45661-9_21"/>
          <seriesInfo name="ISBN" value="[&quot;9783540440093&quot;, &quot;9783540456612&quot;]"/>
          <refcontent>Springer Berlin Heidelberg</refcontent>
        </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/>
            </author>
            <date year="2016" month="September"/>
          </front>
        </reference>
        <reference anchor="McLean" target="https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/">
          <front>
            <title>Critical vulnerabilities in JSON Web Token libraries</title>
            <author initials="T." surname="McLean" fullname="Tim McLean">
              <organization/>
            </author>
            <date year="2015" month="March"/>
          </front>
        </reference>
        <reference anchor="OpenID.Core" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 2</title>
            <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
              <organization/>
            </author>
            <author initials="J." surname="Bradley" fullname="John Bradley">
              <organization/>
            </author>
            <author initials="M." surname="Jones" fullname="Michael B. Jones">
              <organization/>
            </author>
            <author initials="B." surname="de Medeiros" fullname="Breno de Medeiros">
              <organization/>
            </author>
            <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
              <organization/>
            </author>
            <date year="2023" month="December"/>
          </front>
        </reference>
        <reference anchor="OpenID.Backchannel" target="https://openid.net/specs/openid-connect-backchannel-1_0.html">
          <front>
            <title>OpenID Connect Back-Channel Logout 1.0 incorporating errata set 1</title>
            <author initials="M." surname="Jones" fullname="Michael B. Jones">
              <organization/>
            </author>
            <author initials="J." surname="Bradley" fullname="John Bradley">
              <organization/>
            </author>
            <date year="2023" month="December"/>
          </front>
        </reference>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <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="RFC7159">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2014"/>
            <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="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <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="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <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>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="RFC8417">
          <front>
            <title>Security Event Token (SET)</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="M. Ansari" initials="M." surname="Ansari"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This specification defines the Security Event Token (SET) data structure. A SET describes statements of fact from the perspective of an issuer about a subject. These statements of fact represent an event that occurred directly to or about a security subject, for example, a statement about the issuance or revocation of a token on behalf of a subject. This specification is intended to enable representing security- and identity-related events. A SET is a JSON Web Token (JWT), which can be optionally signed and/or encrypted. SETs can be distributed via protocols such as HTTP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8417"/>
          <seriesInfo name="DOI" value="10.17487/RFC8417"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, 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. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC9068">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <date month="October" year="2021"/>
            <abstract>
              <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9068"/>
          <seriesInfo name="DOI" value="10.17487/RFC9068"/>
        </reference>
        <reference anchor="RFC9700">
          <front>
            <title>Best Current Practice for OAuth 2.0 Security</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="A. Labunets" initials="A." surname="Labunets"/>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <date month="January" year="2025"/>
            <abstract>
              <t>This document describes best current security practice for OAuth 2.0. It updates and extends the threat model and security advice given in RFCs 6749, 6750, and 6819 to incorporate practical experiences gathered since OAuth 2.0 was published and covers new threats relevant due to the broader application of OAuth 2.0. Further, it deprecates some modes of operation that are deemed less secure or even insecure.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="240"/>
          <seriesInfo name="RFC" value="9700"/>
          <seriesInfo name="DOI" value="10.17487/RFC9700"/>
        </reference>
        <reference anchor="Sanso" target="https://auth0.com/blog/critical-vulnerability-in-json-web-encryption/">
          <front>
            <title>Critical Vulnerability in JSON Web Encryption</title>
            <author initials="A." surname="Sanso" fullname="Antonio Sanso">
              <organization/>
            </author>
            <date year="2017" month="March"/>
          </front>
        </reference>
        <reference anchor="Valenta" target="https://ia.cr/2018/298">
          <front>
            <title>In search of CurveSwap: Measuring elliptic curve implementations in the wild</title>
            <author initials="L." surname="Valenta" fullname="Luke Valenta">
              <organization/>
            </author>
            <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <author initials="A." surname="Sanso" fullname="Antonio Sanso">
              <organization/>
            </author>
            <author initials="N." surname="Heninger" fullname="Nadia Heninger">
              <organization/>
            </author>
            <date year="2018" month="March"/>
          </front>
        </reference>
        <reference anchor="OWASP-Password-Storage" target="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html">
          <front>
            <title>Password Storage Cheat Sheet</title>
            <author>
              <organization>OWASP</organization>
            </author>
            <date year="2025"/>
          </front>
          <seriesInfo name="OWASP Cheat Sheet Series" value=""/>
        </reference>
      </references>
    </references>
    <?line 843?>

<section anchor="changes-from-rfc8725">
      <name>Changes from RFC 8725</name>
      <t>This document obsoletes RFC 8725 and provides several significant improvements and additions:</t>
      <ol spacing="normal" type="1"><li>
          <t>Algorithm Verification: Added defensive checking to address incorrect reading of <tt>alg</tt> values as being case-insensitive (<xref target="algorithm-verification"/>).</t>
        </li>
        <li>
          <t>Encryption-Signature Confusion: Added mitigation for attacks where verifiers don't distinguish between successful decryption and successful signature validation (<xref target="preventing-confusion"/>).</t>
        </li>
        <li>
          <t>PBES2 Count Limits: Added requirements to reject unreasonably large <tt>p2c</tt> (PBES2 Count) values to prevent DoS attacks (<xref target="limit-iterations"/>).</t>
        </li>
        <li>
          <t>JWT Format Confusion: Added mitigation for JWT serialization format confusion attacks (<xref target="token-format"/>).</t>
        </li>
        <li>
          <t>Compression DoS: Added mitigation for DoS attacks resulting from abuse of compression in JWE (<xref target="limit-decompression"/>).</t>
        </li>
      </ol>
    </section>
    <section anchor="autogen-document-history">
      <name>Document History</name>
      <t>[[Note to RFC Editor: please remove before publication.]]</t>
      <section anchor="autogen-draft-ietf-oauth-rfc8725bis-02">
        <name>draft-ietf-oauth-rfc8725bis-02</name>
        <ul spacing="normal">
          <li>
            <t>Incorporated Aaron Parecki's review suggestions.</t>
          </li>
          <li>
            <t>Acknowledged contributors to the new content in this specification.</t>
          </li>
        </ul>
      </section>
      <section anchor="autogen-draft-ietf-oauth-rfc8725bis-01">
        <name>draft-ietf-oauth-rfc8725bis-01</name>
        <ul spacing="normal">
          <li>
            <t>Applied editorial suggestions by Dan Moore.</t>
          </li>
          <li>
            <t>Described changes relative to RFC 8725.</t>
          </li>
        </ul>
      </section>
      <section anchor="autogen-draft-ietf-oauth-rfc8725bis-00">
        <name>draft-ietf-oauth-rfc8725bis-00</name>
        <ul spacing="normal">
          <li>
            <t>Draft adopted, no textual changes</t>
          </li>
        </ul>
      </section>
      <section anchor="autogen-draft-sheffer-oauth-rfc8725bis-02">
        <name>draft-sheffer-oauth-rfc8725bis-02</name>
        <ul spacing="normal">
          <li>
            <t>Obsoletes RFC 8725 and updates RFC 7519.</t>
          </li>
        </ul>
      </section>
      <section anchor="autogen-draft-sheffer-oauth-rfc8725bis-01">
        <name>draft-sheffer-oauth-rfc8725bis-01</name>
        <ul spacing="normal">
          <li>
            <t>Mitigate encryption-signature confusion.</t>
          </li>
          <li>
            <t>Reject unreasonably large <tt>p2c</tt> (PBES2 Count) values.</t>
          </li>
          <li>
            <t>Defensive checking to address incorrect reading of <tt>alg</tt> values as being case-insensitive.</t>
          </li>
          <li>
            <t>Mitigate DoS attacks resulting from abuse of compression.</t>
          </li>
          <li>
            <t>Mitigate JWT serialization format confusion.</t>
          </li>
        </ul>
      </section>
      <section anchor="autogen-draft-sheffer-oauth-rfc8725bis-00">
        <name>draft-sheffer-oauth-rfc8725bis-00</name>
        <ul spacing="normal">
          <li>
            <t>Initial version, text is identical to RFC 8725.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
wSLvEtH/B7HZVWPRgwAA

-->

</rfc>
