| rfc8725xml2.original.xml | rfc8725.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.12 --> | <rfc number="8725" consensus="true" xmlns:xi="http://www.w3.org/2001/XInclude" | |||
| ipr="trust200902" | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | docName="draft-ietf-oauth-jwt-bcp-07" category="bcp" updates="7519" | |||
| ]> | obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" | |||
| sortRefs="true" symRefs="true" version="3"> | ||||
| <?rfc rfcedstyle="yes"?> | <!-- xml2rfc v2v3 conversion 2.37.1 --> | |||
| <?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-ietf-oauth-jwt-bcp-07" category="bcp" upda | ||||
| tes="RFC 7519"> | ||||
| <front> | <front> | |||
| <title abbrev="JWT BCP">JSON Web Token Best Current Practices</title> | <title abbrev="JWT BCP">JSON Web Token Best Current Practices</title> | |||
| <seriesInfo name="RFC" value="8725"/> | ||||
| <seriesInfo name="BCP" value="225"/> | ||||
| <author initials="Y." surname="Sheffer" fullname="Yaron Sheffer"> | <author initials="Y." surname="Sheffer" fullname="Yaron Sheffer"> | |||
| <organization>Intuit</organization> | <organization>Intuit</organization> | |||
| <address> | <address> | |||
| <email>yaronf.ietf@gmail.com</email> | <email>yaronf.ietf@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="D." surname="Hardt" fullname="Dick Hardt"> | <author initials="D." surname="Hardt" fullname="Dick Hardt"> | |||
| <organization></organization> | <organization/> | |||
| <address> | <address> | |||
| <email>dick.hardt@gmail.com</email> | <email>dick.hardt@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="M.B." surname="Jones" fullname="Michael B. Jones"> | <author initials="M." surname="Jones" fullname="Michael B. Jones"> | |||
| <organization>Microsoft</organization> | <organization>Microsoft</organization> | |||
| <address> | <address> | |||
| <email>mbj@microsoft.com</email> | <email>mbj@microsoft.com</email> | |||
| <uri>http://self-issued.info/</uri> | <uri>https://self-issued.info/</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="February" year="2020" /> | ||||
| <date year="2019" month="October" day="13"/> | ||||
| <area>Security</area> | <area>Security</area> | |||
| <workgroup>OAuth Working Group</workgroup> | <workgroup>OAuth Working Group</workgroup> | |||
| <keyword>Internet-Draft</keyword> | ||||
| <abstract> | ||||
| <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens | <keyword>JSON Web Token</keyword> | |||
| that contain a set of claims that can be signed and/or encrypted. | <keyword>JWT</keyword> | |||
| JWTs are being widely used and deployed as a simple security token format | <keyword>JSON Object Signing and Encryption</keyword> | |||
| in numerous protocols and applications, both in the area of digital identity, | <keyword>JOSE</keyword> | |||
| and in other application areas. | <keyword>JSON Web Signature</keyword> | |||
| The goal of this Best Current Practices document is to provide actionable guidan | <keyword>JWS</keyword> | |||
| ce | <keyword>JSON Web Encryption</keyword> | |||
| leading to secure implementation and deployment of JWTs.</t> | <keyword>JWE</keyword> | |||
| <keyword>attacks</keyword> | ||||
| <keyword>Claims</keyword> | ||||
| <keyword>Security</keyword> | ||||
| <keyword>Cryptography</keyword> | ||||
| <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> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="introduction" numbered="true" toc="default"> | ||||
| <section anchor="introduction" title="Introduction"> | <name>Introduction</name> | |||
| <t>JSON Web Tokens, also known as JWTs <xref target="RFC7519" | ||||
| <t>JSON Web Tokens, also known as JWTs <xref target="RFC7519"/>, are URL-safe JS | format="default"/>, are URL-safe JSON-based security tokens | |||
| ON-based security tokens | ||||
| that contain a set of claims that can be signed and/or encrypted. | that contain a set of claims that can be signed and/or encrypted. | |||
| The JWT specification has seen rapid adoption because it encapsulates | The JWT specification has seen rapid adoption because it encapsulates | |||
| security-relevant information in one easy-to-protect location, and because | security-relevant information in one easy-to-protect location, and because | |||
| it is easy to implement using widely-available tools. | it is easy to implement using widely available tools. | |||
| One application area in which JWTs are commonly used is representing digital ide ntity information, | One application area in which JWTs are commonly used is representing digital ide ntity information, | |||
| such as OpenID Connect ID Tokens <xref target="OpenID.Core"/> | such as OpenID Connect ID Tokens <xref target="OpenID.Core" format="default"/> | |||
| and OAuth 2.0 <xref target="RFC6749"/> access tokens and refresh tokens, the det | and OAuth 2.0 <xref target="RFC6749" format="default"/> access tokens and | |||
| ails of which are deployment-specific.</t> | refresh tokens, the details of which are deployment-specific.</t> | |||
| <t>Since the JWT specification was published, there have been several wide | ||||
| <t>Since the JWT specification was published, there have been several widely pub | ly published | |||
| lished | ||||
| attacks on implementations and deployments. | attacks on implementations and deployments. | |||
| Such attacks are the result of under-specified security mechanisms, as well as i ncomplete | Such attacks are the result of under-specified security mechanisms, as well as i ncomplete | |||
| implementations and incorrect usage by applications.</t> | implementations and incorrect usage by applications.</t> | |||
| <t>The goal of this document is to facilitate secure implementation and de | ||||
| <t>The goal of this document is to facilitate secure implementation and deployme | ployment of JWTs. | |||
| nt of JWTs. | ||||
| Many of the recommendations in this document are about | Many of the recommendations in this document are about | |||
| implementation and use of the cryptographic mechanisms underlying JWTs that are defined by | implementation and use of the cryptographic mechanisms underlying JWTs that are defined by | |||
| JSON Web Signature (JWS) <xref target="RFC7515"/>, | JSON Web Signature (JWS) <xref target="RFC7515" format="default"/>, | |||
| JSON Web Encryption (JWE) <xref target="RFC7516"/>, and | JSON Web Encryption (JWE) <xref target="RFC7516" format="default"/>, and | |||
| JSON Web Algorithms (JWA) <xref target="RFC7518"/>. | JSON Web Algorithms (JWA) <xref target="RFC7518" format="default"/>. | |||
| Others are about use of the JWT claims themselves.</t> | Others are about use of the JWT claims themselves.</t> | |||
| <t>These are intended to be minimum recommendations for the use of JWTs | ||||
| <t>These are intended to be minimum recommendations for the use of JWTs | ||||
| in the vast majority of implementation | in the vast majority of implementation | |||
| and deployment scenarios. Other specifications that reference this document can have | and deployment scenarios. Other specifications that reference this document can have | |||
| stricter requirements related to one or more aspects of the format, based on the ir | stricter requirements related to one or more aspects of the format, based on the ir | |||
| particular circumstances; when that is the case, implementers are advised to adh ere | particular circumstances; when that is the case, implementers are advised to adh ere | |||
| to those stricter requirements. Furthermore, this document provides a floor, no t a ceiling, | 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 | so stronger options are always allowed (e.g., depending on differing evaluations of the | |||
| importance of cryptographic strength vs. computational load).</t> | importance of cryptographic strength vs. computational load).</t> | |||
| <t>Community knowledge about the strength of various algorithms and feasib | ||||
| <t>Community knowledge about the strength of various algorithms and feasible att | le attacks can | |||
| acks can | ||||
| change quickly, and experience shows that a Best Current Practice (BCP) document about | 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 errat a or | security is a point-in-time statement. Readers are advised to seek out any errat a or | |||
| updates that apply to this document.</t> | updates that apply to this document.</t> | |||
| <section anchor="target-audience" numbered="true" toc="default"> | ||||
| <section anchor="target-audience" title="Target Audience"> | <name>Target Audience</name> | |||
| <t>The intended audiences of this document are:</t> | ||||
| <t>The intended audience of this document is:</t> | <ul spacing="normal"> | |||
| <li>Implementers of JWT libraries (and the JWS and JWE libraries | ||||
| <t><list style="symbols"> | used by those libraries),</li> | |||
| <t>Implementers of JWT libraries (and the JWS and JWE libraries used by those | <li>Implementers of code that uses such libraries (to the extent that | |||
| libraries),</t> | some mechanisms may | |||
| <t>Implementers of code that uses such libraries (to the extent that some mech | not be provided by libraries, or until they are), and</li> | |||
| anisms may | <li>Developers of specifications that rely on JWTs, both inside and | |||
| not be provided by libraries, or until they are), and</t> | outside the IETF.</li> | |||
| <t>Developers of specifications that rely on JWTs, both inside and outside the | </ul> | |||
| IETF.</t> | </section> | |||
| </list></t> | <section anchor="conventions-used-in-this-document" numbered="true" toc="d | |||
| efault"> | ||||
| </section> | <name>Conventions Used in this Document</name> | |||
| <section anchor="conventions-used-in-this-document" title="Conventions used in t | <t> | |||
| his document"> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
| <t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| “MAY”, and “OPTIONAL” in this document are to be interpreted as | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and | to be interpreted as | |||
| only when, they | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
| appear in all capitals, as shown here.</t> | when, and only when, they appear in all capitals, as shown here. | |||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="threats-and-vulnerabilities" title="Threats and Vulnerabilities | <section anchor="threats-and-vulnerabilities" numbered="true" toc="default"> | |||
| "> | <name>Threats and Vulnerabilities</name> | |||
| <t>This section lists some known and possible problems with JWT | ||||
| <t>This section lists some known and possible problems with JWT implementations | implementations and deployments. | |||
| and deployments. | ||||
| Each problem description is followed by references to one or more mitigations to those problems.</t> | Each problem description is followed by references to one or more mitigations to those problems.</t> | |||
| <section anchor="weak-signatures-and-insufficient-signature-validation" | ||||
| <section anchor="weak-signatures-and-insufficient-signature-validation" title="W | numbered="true" toc="default"> | |||
| eak 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 al | ||||
| <t>Signed JSON Web Tokens carry an explicit indication of the signing algorithm, | gorithm, | |||
| in the form of the “alg” header parameter, to facilitate cryptographic agility. | in the form of the "alg" Header Parameter, to facilitate cryptographic agility. | |||
| This, in conjunction with design flaws in some libraries and applications, have | This, in conjunction with design flaws in some libraries and applications, | |||
| led to several attacks:</t> | has led to several attacks:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li>The algorithm can be changed to "none" by an attacker, and some li | |||
| <t>The algorithm can be changed to “none” by an attacker, and some libraries w | braries would trust | |||
| ould trust | this value and "validate" the JWT without checking any signature.</li> | |||
| this value and “validate” the JWT without checking any signature.</t> | <li>An "RS256" (RSA, 2048 bit) parameter value can be changed into | |||
| <t>An “RS256” (RSA, 2048 bit) parameter value can be changed into | "HS256" (HMAC, SHA-256), and some libraries | |||
| “HS256” (HMAC, SHA-256), and some libraries | ||||
| would try to validate the signature using HMAC-SHA256 and using the RSA public k ey as the | would try to validate the signature using HMAC-SHA256 and using the RSA public k ey as the | |||
| HMAC shared secret (see <xref target="McLean"/> and CVE-2015-9235).</t> | HMAC shared secret (see <xref target="McLean" format="default"/> and | |||
| </list></t> | <xref target="CVE-2015-9235"/>).</li> | |||
| </ul> | ||||
| <t>For mitigations, see <xref target="algorithm-verification" /> and <xref targe | <t>For mitigations, see Sections <xref target="algorithm-verification" | |||
| t="appropriate-algorithms" />.</t> | format="counter"/> and <xref target="appropriate-algorithms" | |||
| format="counter"/>.</t> | ||||
| </section> | </section> | |||
| <section anchor="weak-symmetric-keys" title="Weak Symmetric Keys"> | <section anchor="weak-symmetric-keys" numbered="true" toc="default"> | |||
| <name>Weak Symmetric Keys</name> | ||||
| <t>In addition, some applications use a keyed MAC algorithm such as | <t>In addition, some applications use a keyed Message Authentication | |||
| “HS256” to sign tokens, but supply a weak symmetric key with | Code (MAC) algorithm, such as | |||
| insufficient entropy (such as a human memorable password). Such keys | "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 | are vulnerable to offline brute-force or dictionary attacks once an | |||
| attacker gets hold of such a token <xref target="Langkemper"></xref>.</t> | attacker gets hold of such a token <xref target="Langkemper" format="default"/>. | |||
| </t> | ||||
| <t>For mitigations, see <xref target="key-entropy" />.</t> | <t>For mitigations, see <xref target="key-entropy" format="default"/>.</ | |||
| t> | ||||
| </section> | </section> | |||
| <section anchor="incorrect-composition-of-encryption-and-signature" title="Incor | <section anchor="incorrect-composition-of-encryption-and-signature" | |||
| rect Composition of Encryption and Signature"> | numbered="true" toc="default"> | |||
| <name>Incorrect Composition of Encryption and Signature</name> | ||||
| <t>Some libraries that decrypt a JWE-encrypted JWT to obtain a JWS-signed object | <t>Some libraries that decrypt a JWE-encrypted JWT to obtain a JWS-signe | |||
| d object | ||||
| do not always validate the internal signature.</t> | do not always validate the internal signature.</t> | |||
| <t>For mitigations, see <xref target="validate-crypto" format="default"/ | ||||
| <t>For mitigations, see <xref target="validate-crypto" />.</t> | >.</t> | |||
| </section> | ||||
| </section> | <section | |||
| <section anchor="plaintext-leakage-through-analysis-of-ciphertext-length" title= | anchor="plaintext-leakage-through-analysis-of-ciphertext-length" | |||
| "Plaintext Leakage through Analysis of Ciphertext Length"> | numbered="true" toc="default"> | |||
| <name>Plaintext Leakage through Analysis of Ciphertext Length</name> | ||||
| <t>Many encryption algorithms leak information about the length of the plaintext | <t>Many encryption algorithms leak information about the length of the | |||
| , with a varying amount of | plaintext, with a varying amount of | |||
| leakage depending on the algorithm and mode of operation. This problem is exacer bated | leakage depending on the algorithm and mode of operation. This problem is exacer bated | |||
| when the plaintext is initially compressed, because the length of the compressed | when the plaintext is initially compressed, because the length of the | |||
| plaintext and, thus, | compressed plaintext and, thus, | |||
| the ciphertext | the ciphertext | |||
| depend not only on the length of the original plaintext but also | depends not only on the length of the original plaintext but also | |||
| on its content. | on its content. | |||
| Compression attacks are particularly | Compression attacks are particularly | |||
| powerful when there is attacker-controlled data in the same compression | powerful when there is attacker-controlled data in the same compression | |||
| space as secret data, as is the case for some attacks on HTTPS.</t> | space as secret data, which is the case for some attacks on HTTPS.</t> | |||
| <t>See <xref target="Kelsey" format="default"/> for general background | ||||
| <t>See <xref target="Kelsey"/> for general background | on compression and encryption and <xref target="Alawatugoda" | |||
| on compression and encryption, and <xref target="Alawatugoda"/> for a specific e | format="default"/> for a specific example of attacks on HTTP cookies.</t> | |||
| xample of attacks on HTTP cookies.</t> | <t>For mitigations, see <xref target="no-compression" format="default"/> | |||
| .</t> | ||||
| <t>For mitigations, see <xref target="no-compression"/>.</t> | </section> | |||
| <section anchor="insecure-use-of-elliptic-curve-encryption" numbered="true | ||||
| </section> | " toc="default"> | |||
| <section anchor="insecure-use-of-elliptic-curve-encryption" title="Insecure Use | <name>Insecure Use of Elliptic Curve Encryption</name> | |||
| of Elliptic Curve Encryption"> | <t>Per <xref target="Sanso" format="default"/>, several Javascript | |||
| Object Signing and Encryption (JOSE) libraries | ||||
| <t>Per <xref target="Sanso"></xref>, several JOSE libraries fail to validate the | fail to validate their inputs correctly | |||
| ir inputs correctly | when performing elliptic curve key agreement (the "ECDH-ES" algorithm). | |||
| 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 poi nts and | An attacker that is able to send JWEs of its choosing that use invalid curve poi nts and | |||
| observe the cleartext outputs resulting from decryption with the invalid curve p oints | observe the cleartext outputs resulting from decryption with the invalid curve p oints | |||
| can use this vulnerability to recover the recipient’s private key.</t> | can use this vulnerability to recover the recipient's private key.</t> | |||
| <t>For mitigations, see <xref target="validate-inputs" format="default"/ | ||||
| <t>For mitigations, see <xref target="validate-inputs" />.</t> | >.</t> | |||
| </section> | ||||
| </section> | <section anchor="multiplicity-of-json-encodings" numbered="true" toc="defa | |||
| <section anchor="multiplicity-of-json-encodings" title="Multiplicity of JSON Enc | ult"> | |||
| odings"> | <name>Multiplicity of JSON Encodings</name> | |||
| <t>Previous versions of the JSON format, such as the obsoleted <xref | ||||
| <t>Previous versions of the JSON format such as the obsoleted <xref target="RFC7 | target="RFC7159" format="default"/>, | |||
| 159"/> | ||||
| allowed several different character | allowed several different character | |||
| encodings: UTF-8, UTF-16 and UTF-32. This is not the case anymore, with the late | encodings: UTF-8, UTF-16, and UTF-32. This is not the case anymore, with the lat | |||
| st | est | |||
| standard <xref target="RFC8259"/> only allowing UTF-8 except for internal use wi | standard <xref target="RFC8259" format="default"/> only allowing UTF-8 except | |||
| thin a “closed ecosystem”. | for internal use within a "closed ecosystem". | |||
| This ambiguity where older implementations and those used within closed environm | This ambiguity, where older implementations and those used within closed environ | |||
| ents may generate | ments may generate | |||
| non-standard encodings, may result in the JWT being | non-standard encodings, may result in the JWT being | |||
| misinterpreted by its recipient. This in turn could be used by a malicious sende | misinterpreted by its recipient. This, in turn, could be used by a malicious sen | |||
| r to bypass | der to bypass | |||
| the recipient’s validation checks.</t> | the recipient's validation checks.</t> | |||
| <t>For mitigations, see <xref target="use-utf8" format="default"/>.</t> | ||||
| <t>For mitigations, see <xref target="use-utf8" />.</t> | </section> | |||
| <section anchor="substitution" numbered="true" toc="default"> | ||||
| </section> | <name>Substitution Attacks</name> | |||
| <section anchor="substitution" title="Substitution Attacks"> | <t>There are attacks in which one recipient will be given a JWT that was | |||
| intended for it | ||||
| <t>There are attacks in which one recipient will be given a JWT that was intende | ||||
| d for it, | ||||
| and will attempt to use it at a different recipient for which that JWT was not i ntended. | and will attempt to use it at a different recipient for which that JWT was not i ntended. | |||
| For instance, if an OAuth 2.0 <xref target="RFC6749"/> access token is legitimat | For instance, if an OAuth 2.0 <xref target="RFC6749" format="default"/> access | |||
| ely presented to an | token is legitimately presented to an | |||
| OAuth 2.0 protected resource for which it is intended, that protected resource m ight then present | OAuth 2.0 protected resource for which it is intended, that protected resource m ight then present | |||
| that same access token to a different protected resource for which the access to ken is not intended, | that same access token to a different protected resource for which the access to ken is not intended, | |||
| in an attempt to gain access. If such situations are not caught, this can resul t in | 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> | the attacker gaining access to resources that it is not entitled to access.</t> | |||
| <t>For mitigations, see Sections <xref target="validate-iss-sub" | ||||
| <t>For mitigations, see <xref target="validate-iss-sub" /> and <xref target="use | format="counter"/> and <xref target="use-aud" format="counter"/>.</t> | |||
| -aud" />.</t> | </section> | |||
| <section anchor="cross-jwt-confusion" numbered="true" toc="default"> | ||||
| </section> | <name>Cross-JWT Confusion</name> | |||
| <section anchor="cross-jwt-confusion" title="Cross-JWT Confusion"> | <t>As JWTs are being used by more different protocols in diverse | |||
| application areas, it becomes increasingly | ||||
| <t>As JWTs are being used by more different protocols in diverse application are | ||||
| as, it becomes increasingly | ||||
| important to prevent cases of JWT tokens that have been issued for one purpose | important to prevent cases of JWT tokens that have been issued for one purpose | |||
| being subverted and used for another. | being subverted and used for another. | |||
| Note that this is a specific type of substitution attack. | 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 | If the JWT could be used in an application context in which it could be | |||
| with other kinds of JWTs, | confused with other kinds of JWTs, | |||
| then mitigations MUST be employed to prevent these substitution attacks.</t> | then mitigations <bcp14>MUST</bcp14> be employed to prevent these substitution a | |||
| ttacks.</t> | ||||
| <t>For mitigations, see <xref target="validate-iss-sub" />, <xref target="use-au | <t>For mitigations, see Sections <xref target="validate-iss-sub" | |||
| d" />, | format="counter"/>, <xref target="use-aud" format="counter"/>, | |||
| <xref target="use-typ" />, and <xref target="preventing-confusion" />.</t> | <xref target="use-typ" format="counter"/>, and <xref | |||
| target="preventing-confusion" format="counter"/>.</t> | ||||
| </section> | </section> | |||
| <section anchor="indirect-attacks-on-the-server" title="Indirect Attacks on the | <section anchor="indirect-attacks-on-the-server" numbered="true" toc="defa | |||
| Server"> | ult"> | |||
| <name>Indirect Attacks on the Server</name> | ||||
| <t>Various JWT claims are used by the recipient to perform lookup operations, | <t>Various JWT claims are used by the recipient to perform lookup operat | |||
| such as database and LDAP searches. | ions, | |||
| such as database and Lightweight Directory Access Protocol (LDAP) searches. | ||||
| Others include URLs that are similarly looked up by the server. Any of these cla ims can be used by | Others include URLs that are similarly looked up by the server. Any of these cla ims can be used by | |||
| an attacker as vectors for injection attacks or server-side request forgery (SSR F) attacks.</t> | an attacker as vectors for injection attacks or server-side request forgery (SSR F) attacks.</t> | |||
| <t>For mitigations, see <xref target="do-not-trust-claims" format="defau | ||||
| <t>For mitigations, see <xref target="do-not-trust-claims"/>.</t> | lt"/>.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | <section anchor="BP" numbered="true" toc="default"> | |||
| <section anchor="BP" title="Best Practices"> | <name>Best Practices</name> | |||
| <t>The best practices listed below should be applied by practitioners | ||||
| <t>The best practices listed below should be applied by practitioners | ||||
| to mitigate the threats listed in the preceding section.</t> | to mitigate the threats listed in the preceding section.</t> | |||
| <section anchor="algorithm-verification" numbered="true" toc="default"> | ||||
| <section anchor="algorithm-verification" title="Perform Algorithm Verification"> | <name>Perform Algorithm Verification</name> | |||
| <t>Libraries <bcp14>MUST</bcp14> enable the caller to specify a | ||||
| <t>Libraries MUST enable the caller to specify a supported set of algorithms and | supported set of algorithms and | |||
| MUST NOT use any other algorithms when performing cryptographic operations. | <bcp14>MUST NOT</bcp14> use any other algorithms when performing cryptographic o | |||
| The library MUST ensure that the “alg” or “enc” header specifies the same algori | perations. | |||
| thm | The library <bcp14>MUST</bcp14> ensure that the "alg" or "enc" header specifies | |||
| the same algorithm | ||||
| that is used for the cryptographic operation. | that is used for the cryptographic operation. | |||
| Moreover, each key MUST be used with exactly one algorithm, | Moreover, each key <bcp14>MUST</bcp14> be used with exactly one algorithm, | |||
| and this MUST be checked when the cryptographic operation is performed.</t> | and this <bcp14>MUST</bcp14> be checked when the cryptographic operation is perf | |||
| ormed.</t> | ||||
| </section> | </section> | |||
| <section anchor="appropriate-algorithms" title="Use Appropriate Algorithms"> | <section anchor="appropriate-algorithms" numbered="true" toc="default"> | |||
| <name>Use Appropriate Algorithms</name> | ||||
| <t>As Section 5.2 of <xref target="RFC7515"/> says, “it is an application decisi | <t>As <xref target="RFC7515" sectionFormat="of" section="5.2"/> says, | |||
| on which algorithms may | "it is an application decision which algorithms may | |||
| be used in a given context. Even if a JWS can be successfully | 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 | validated, unless the algorithm(s) used in the JWS are acceptable to | |||
| the application, it SHOULD consider the JWS to be invalid.”</t> | the application, it <bcp14>SHOULD</bcp14> consider the JWS to be invalid."</t> | |||
| <t>Therefore, applications <bcp14>MUST</bcp14> only allow the use of | ||||
| <t>Therefore, applications MUST only allow the use of cryptographically current | cryptographically current algorithms | |||
| algorithms | ||||
| that meet the security requirements of the application. | that meet the security requirements of the application. | |||
| This set will vary over time as new algorithms are introduced | This set will vary over time as new algorithms are introduced | |||
| and existing algorithms are deprecated due to discovered cryptographic weaknesse s. | and existing algorithms are deprecated due to discovered cryptographic weaknesse s. | |||
| Applications MUST therefore be designed to enable cryptographic agility.</t> | Applications <bcp14>MUST</bcp14> therefore be designed to enable cryptographic a | |||
| gility.</t> | ||||
| <t>That said, if a JWT is cryptographically protected end-to-end by a transport | <t>That said, if a JWT is cryptographically protected end-to-end by a | |||
| layer, such as TLS | transport layer, such as TLS | |||
| using cryptographically current algorithms, there may be no need to apply anothe r layer of | using cryptographically current algorithms, there may be no need to apply anothe r layer of | |||
| cryptographic protections to the JWT. | cryptographic protections to the JWT. | |||
| In such cases, the use of the “none” algorithm can be perfectly acceptable. | In such cases, the use of the "none" algorithm can be perfectly acceptable. | |||
| The “none” algorithm should only be used when the JWT is cryptographically prote | The "none" algorithm should only be used when the JWT is cryptographically prote | |||
| cted by other means. | cted by other means. | |||
| JWTs using “none” are often used in application contexts in which the content is | JWTs using "none" are often used in application contexts in which the content is | |||
| optionally signed; | optionally signed; | |||
| then the URL-safe claims representation and processing can be the same in both t | then, the URL-safe claims representation and processing can be the same in both | |||
| he signed and unsigned cases. | the signed and unsigned cases. | |||
| JWT libraries SHOULD NOT generate JWTs using “none” unless explicitly requested | JWT libraries <bcp14>SHOULD NOT</bcp14> generate JWTs using "none" unless | |||
| to do by the caller. | explicitly requested to do so by the caller. | |||
| Similarly, JWT libraries SHOULD NOT consume JWTs using “none” unless explicitly | Similarly, JWT libraries <bcp14>SHOULD NOT</bcp14> consume JWTs using "none" | |||
| requested by the caller.</t> | unless explicitly requested by the caller.</t> | |||
| <t>Applications <bcp14>SHOULD</bcp14> follow these algorithm-specific re | ||||
| <t>Applications SHOULD follow these algorithm-specific recommendations:</t> | commendations:</t> | |||
| <ul spacing="normal"> | ||||
| <li>Avoid all RSA-PKCS1 v1.5 encryption algorithms (<xref | ||||
| target="RFC8017" sectionFormat="comma" section="7.2"/>), preferring | ||||
| RSAES-OAEP | ||||
| (<xref target="RFC8017" sectionFormat="comma" section="7.1"/>).</li> | ||||
| <t><list style="symbols"> | <li>Elliptic Curve Digital Signature Algorithm (ECDSA) signatures <xre | |||
| <t>Avoid all RSA-PKCS1 v1.5 encryption algorithms (<xref target="RFC8017"/>, S | f target="ANSI-X962-2005" | |||
| ec. 7.2}, preferring RSA-OAEP (<xref target="RFC8017"/>, Sec. 7.1).</t> | format="default"/> require a unique random value for every message | |||
| <t>ECDSA signatures <xref target="ANSI-X962-2005"/> require a unique random va | that is signed. | |||
| lue for every message that is signed. | If even just a few bits of the random value are predictable across multiple mess | |||
| If even just a few bits of the random value are predictable across multiple mess | ages, then | |||
| ages then | ||||
| the security of the signature scheme may be compromised. In the worst case, | 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, | the private key may be recoverable by an attacker. To counter these attacks, | |||
| JWT libraries SHOULD implement ECDSA using the deterministic approach defined in | JWT libraries <bcp14>SHOULD</bcp14> implement ECDSA using the deterministic | |||
| <xref target="RFC6979"/>. | approach defined in <xref target="RFC6979" format="default"/>. | |||
| This approach is completely compatible with existing ECDSA verifiers and so can be implemented | This approach is completely compatible with existing ECDSA verifiers and so can be implemented | |||
| without new algorithm identifiers being required.</t> | without new algorithm identifiers being required.</li> | |||
| </list></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 | </ul> | |||
| JWT MUST be rejected | </section> | |||
| <section anchor="validate-crypto" numbered="true" toc="default"> | ||||
| <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. | if any of them fail to validate. | |||
| This is true not only of JWTs with a single set of Header Parameters | 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 valid ated | but also for Nested JWTs in which both outer and inner operations <bcp14>MUST</b cp14> be validated | |||
| using the keys and algorithms supplied by the application.</t> | 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" numbered="true" toc="default"> | ||||
| </section> | <name>Validate Cryptographic Inputs</name> | |||
| <section anchor="validate-inputs" title="Validate Cryptographic Inputs"> | <t>Some cryptographic operations, such as Elliptic Curve Diffie-Hellman | |||
| key agreement | ||||
| <t>Some cryptographic operations, such as Elliptic Curve Diffie-Hellman key agre | ("ECDH-ES"), take inputs that may contain invalid values. This includes points n | |||
| ement | ot on | |||
| (“ECDH-ES”) take inputs that may contain invalid values, such as points not on t | the specified elliptic curve | |||
| he specified elliptic curve | or other invalid points (e.g., <xref target="Valenta" format="default"/>, Sectio | |||
| or other invalid points (see, e.g. <xref target="Valenta"/>, Sec. 7.1). | n 7.1). | |||
| The JWS/JWE library itself must validate these inputs before using them | 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> | or it must use underlying cryptographic libraries that do so (or both!).</t> | |||
| <t>Elliptic Curve Diffie-Hellman Ephemeral Static (ECDH-ES) ephemeral | ||||
| <t>ECDH-ES ephemeral public key (epk) inputs should be validated according to th | public key (epk) inputs should be validated | |||
| e recipient’s | according to the recipient's | |||
| chosen elliptic curve. For the NIST prime-order curves P-256, P-384 and P-521, v | chosen elliptic curve. For the NIST prime-order curves P-256, P-384, and P-521, | |||
| alidation MUST | validation <bcp14>MUST</bcp14> | |||
| be performed according to Section 5.6.2.3.4 “ECC Partial Public-Key Validation R | be performed according to Section 5.6.2.3.4 (ECC Partial Public-Key Validation | |||
| outine” of | Routine) of "Recommendation for Pair-Wise Key-Establishment Schemes Using Discre | |||
| NIST Special Publication 800-56A revision 3 <xref target="nist-sp-800-56a-r3"></ | te Logarithm Cryptography" <xref target="nist-sp-800-56a-r3" format="default"/>. | |||
| xref>. | If the "X25519" or "X448" <xref target="RFC8037" format="default"/> algorithms a | |||
| Likewise, if the “X25519” or “X448” <xref target="RFC8037"/> algorithms are used | re used, | |||
| , | then the security considerations in <xref target="RFC8037" format="default"/> ap | |||
| then the security considerations in <xref target="RFC8037"/> apply.</t> | ply.</t> | |||
| </section> | ||||
| </section> | <section anchor="key-entropy" numbered="true" toc="default"> | |||
| <section anchor="key-entropy" title="Ensure Cryptographic Keys have Sufficient E | <name>Ensure Cryptographic Keys Have Sufficient Entropy</name> | |||
| ntropy"> | <t>The Key Entropy and Random Values advice in <xref | |||
| target="RFC7515" section="10.1" sectionFormat="of"></xref> and the | ||||
| <t>The Key Entropy and Random Values advice in Section 10.1 of <xref target="RFC | Password Considerations in <xref target="RFC7518" | |||
| 7515"/> and | section="8.8" sectionFormat="of"></xref> | |||
| the Password Considerations in Section 8.8 of <xref target="RFC7518"/> | <bcp14>MUST</bcp14> be followed. | |||
| MUST be followed. | In particular, human-memorizable passwords <bcp14>MUST NOT</bcp14> be directly u | |||
| In particular, human-memorizable passwords MUST NOT be directly used | sed | |||
| as the key to a keyed-MAC algorithm such as “HS256”. | as the key to a keyed-MAC algorithm such as "HS256". | |||
| In particular, passwords should only be used to perform key encryption, rather t | Moreover, passwords should only be used to perform key encryption, rather | |||
| han content encryption, | than content encryption, | |||
| as described in Section 4.8 of <xref target="RFC7518"/>. | as described in <xref target="RFC7518" sectionFormat="of" section="4.8"/>. | |||
| Note that even when used for key encryption, password-based encryption is still | Note that even when used for key encryption, password-based encryption is | |||
| subject to brute-force attacks.</t> | still subject to brute-force attacks.</t> | |||
| </section> | ||||
| </section> | <section anchor="no-compression" numbered="true" toc="default"> | |||
| <section anchor="no-compression" title="Avoid Length-Dependent Encryption Inputs | <name>Avoid Compression of Encryption Inputs</name> | |||
| "> | <t>Compression of data <bcp14>SHOULD NOT</bcp14> be done before encrypti | |||
| on, because | ||||
| <t>Compression of data SHOULD NOT be done before encryption, because | ||||
| such compressed data often reveals information about the plaintext.</t> | such compressed data often reveals information about the plaintext.</t> | |||
| </section> | ||||
| </section> | <section anchor="use-utf8" numbered="true" toc="default"> | |||
| <section anchor="use-utf8" title="Use UTF-8"> | <name>Use UTF-8</name> | |||
| <t><xref target="RFC7515" format="default"/>, <xref target="RFC7516" | ||||
| <t><xref target="RFC7515"/>, <xref target="RFC7516"/>, and <xref target="RFC7519 | format="default"/>, and <xref target="RFC7519" format="default"/> all | |||
| "/> all specify that UTF-8 be used for encoding and decoding JSON | 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 lat | used in Header Parameters and JWT Claims Sets. This is also in line with the | |||
| est JSON specification <xref target="RFC8259"/>. | latest JSON specification <xref target="RFC8259" format="default"/>. | |||
| Implementations and applications MUST do this, and not use or admit the use of | Implementations and applications <bcp14>MUST</bcp14> do this and not use or admi | |||
| t the use of | ||||
| other Unicode encodings for these purposes.</t> | other Unicode encodings for these purposes.</t> | |||
| </section> | ||||
| </section> | <section anchor="validate-iss-sub" numbered="true" toc="default"> | |||
| <section anchor="validate-iss-sub" title="Validate Issuer and Subject"> | <name>Validate Issuer and Subject</name> | |||
| <t>When a JWT contains an "iss" (issuer) claim, the application | ||||
| <t>When a JWT contains an “iss” (issuer) claim, the application MUST validate th | <bcp14>MUST</bcp14> validate that the cryptographic keys | |||
| at the cryptographic keys | ||||
| used for the cryptographic operations in the JWT belong to the issuer. | used for the cryptographic operations in the JWT belong to the issuer. | |||
| If they do not, the application MUST reject the JWT.</t> | 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-s | ||||
| <t>The means of determining the keys owned by an issuer is application-specific. | pecific. | |||
| As one example, OpenID Connect <xref target="OpenID.Core"/> issuer values are “h | As one example, OpenID Connect <xref target="OpenID.Core" format="default"/> | |||
| ttps” URLs | issuer values are "https" URLs | |||
| that reference a JSON metadata document that contains a “jwks_uri” value that is | 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 tar | an "https" URL from which the issuer's keys are retrieved as a JWK Set <xref | |||
| get="RFC7517"/>. | target="RFC7517" format="default"/>. | |||
| This same mechanism is used by <xref target="RFC8414"/>. | This same mechanism is used by <xref target="RFC8414" format="default"/>. | |||
| Other applications may use different means of binding keys to issuers.</t> | Other applications may use different means of binding keys to issuers.</t> | |||
| <t>Similarly, when the JWT contains a “sub” (subject) claim, the application MUS | <t>Similarly, when the JWT contains a "sub" (subject) claim, the | |||
| T validate that | application <bcp14>MUST</bcp14> validate that | |||
| the subject value corresponds to a valid subject and/or issuer/subject pair at t | the subject value corresponds to a valid subject and/or issuer-subject pair at t | |||
| he application. | he application. | |||
| This may include confirming that the issuer is trusted by 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 | If the issuer, subject, or the pair are invalid, the application | |||
| JWT.</t> | <bcp14>MUST</bcp14> reject the JWT.</t> | |||
| </section> | ||||
| </section> | <section anchor="use-aud" numbered="true" toc="default"> | |||
| <section anchor="use-aud" title="Use and Validate Audience"> | <name>Use and Validate Audience</name> | |||
| <t>If the same issuer can issue JWTs that are intended for use by more | ||||
| <t>If the same issuer can issue JWTs that are intended for use by more than one | than one relying party or application, | |||
| relying party or application, | the JWT <bcp14>MUST</bcp14> contain an "aud" (audience) claim that can be used | |||
| the JWT MUST contain an “aud” (audience) claim that can be used to determine whe | to determine whether the JWT | |||
| ther the JWT | ||||
| is being used by an intended party or was substituted by an attacker at an unint ended party.</t> | is being used by an intended party or was substituted by an attacker at an unint ended party.</t> | |||
| <t>In such cases, the relying party or application <bcp14>MUST</bcp14> | ||||
| <t>In such cases, the relying party or application MUST validate the audience va | validate the audience value, | |||
| lue | ||||
| and if the audience value is not present or not associated with the recipient, | and if the audience value is not present or not associated with the recipient, | |||
| it MUST reject the JWT.</t> | it <bcp14>MUST</bcp14> reject the JWT.</t> | |||
| </section> | ||||
| </section> | <section anchor="do-not-trust-claims" numbered="true" toc="default"> | |||
| <section anchor="do-not-trust-claims" title="Do Not Trust Received Claims"> | <name>Do Not Trust Received Claims</name> | |||
| <t>The "kid" (key ID) header is used by the relying application to | ||||
| <t>The “kid” (key ID) header is used by the relying application to perform key l | perform key lookup. Applications | |||
| ookup. Applications | should ensure that this does not create SQL or LDAP injection vulnerabilities by | |||
| should ensure that this does not create SQL or LDAP injection vulnerabilities, b | validating | |||
| y validating | ||||
| and/or sanitizing the received value.</t> | and/or sanitizing the received value.</t> | |||
| <t>Similarly, blindly following a "jku" (JWK set URL) or "x5u" (X.509 UR | ||||
| <t>Similarly, blindly following a “jku” (JWK set URL) or “x5u” (X.509 URL) heade | L) header, | |||
| r, | ||||
| which may contain an arbitrary URL, | which may contain an arbitrary URL, | |||
| could result in server-side request forgery (SSRF) attacks. Applications SHOULD | could result in server-side request forgery (SSRF) attacks. Applications | |||
| protect against such | <bcp14>SHOULD</bcp14> protect against such | |||
| attacks, e.g., by matching the URL to a whitelist of allowed locations, | attacks, e.g., by matching the URL to a whitelist of allowed locations | |||
| and ensuring no cookies are sent in the GET request.</t> | and ensuring no cookies are sent in the GET request.</t> | |||
| </section> | ||||
| </section> | <section anchor="use-typ" numbered="true" toc="default"> | |||
| <section anchor="use-typ" title="Use Explicit Typing"> | <name>Use Explicit Typing</name> | |||
| <t>Sometimes, one kind of JWT can be confused for another. If a particul | ||||
| <t>Sometimes, one kind of JWT can be confused for another. If a particular | ar | |||
| kind of JWT is subject to such confusion, that JWT can include an explicit | 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. | JWT type value, and the validation rules can specify checking the type. | |||
| This mechanism can prevent such confusion. | This mechanism can prevent such confusion. | |||
| Explicit JWT typing is accomplished by using the “typ” header parameter. | Explicit JWT typing is accomplished by using the "typ" Header Parameter. | |||
| For instance, the <xref target="RFC8417"/> specification uses the “application/s | For instance, the <xref target="RFC8417" format="default"/> specification uses | |||
| ecevent+jwt” media type | the "application/secevent+jwt" media type | |||
| to perform explicit typing of Security Event Tokens (SETs).</t> | to perform explicit typing of Security Event Tokens (SETs).</t> | |||
| <t>Per the definition of "typ" in <xref | ||||
| <t>Per the definition of “typ” in Section 4.1.9 of <xref target="RFC7515"/>, | target="RFC7515" sectionFormat="of" section="4.1.9"/>, | |||
| it is RECOMMENDED that the “application/” prefix be omitted from the “typ” value | it is <bcp14>RECOMMENDED</bcp14> that the "application/" prefix be omitted from | |||
| . | the "typ" value. | |||
| Therefore, for example, the “typ” value used to explicitly include a type for a | Therefore, for example, the "typ" value used to explicitly include a type for a | |||
| SET | SET | |||
| SHOULD be “secevent+jwt”. | <bcp14>SHOULD</bcp14> be "secevent+jwt". | |||
| When explicit typing is employed for a JWT, it is RECOMMENDED that a media type | When explicit typing is employed for a JWT, it is <bcp14>RECOMMENDED</bcp14> | |||
| name of the format | that a media type name of the format | |||
| “application/example+jwt” be used, where “example” is replaced by the identifier | "application/example+jwt" be used, where "example" is replaced by the | |||
| for the specific kind of JWT.</t> | identifier for the specific kind of JWT.</t> | |||
| <t>When applying explicit typing to a Nested JWT, the "typ" Header | ||||
| <t>When applying explicit typing to a Nested JWT, the “typ” header parameter con | Parameter containing the explicit type value | |||
| taining the explicit type value | <bcp14>MUST</bcp14> be present in the inner JWT of the Nested JWT (the JWT | |||
| MUST be present in the inner JWT of the Nested JWT (the JWT whose payload is the | whose payload is the JWT Claims Set). | |||
| JWT Claims Set). | In some cases, the same "typ" Header Parameter value will be present in the oute | |||
| In some cases the same “typ” header parameter value will be present in the outer | r JWT as well, | |||
| JWT as well, | ||||
| to explicitly type the entire Nested JWT.</t> | to explicitly type the entire Nested JWT.</t> | |||
| <t>Note that the use of explicit typing may not achieve disambiguation | ||||
| <t>Note that the use of explicit typing may not achieve disambiguation from exis | from existing kinds of JWTs, | |||
| ting kinds of JWTs, | as the validation rules for existing kinds of JWTs often do not use the "typ" He | |||
| as the validation rules for existing kinds JWTs often do not use the “typ” heade | ader Parameter value. | |||
| r parameter value. | Explicit typing is <bcp14>RECOMMENDED</bcp14> for new uses of JWTs.</t> | |||
| Explicit typing is RECOMMENDED for new uses of JWTs.</t> | </section> | |||
| <section anchor="preventing-confusion" numbered="true" toc="default"> | ||||
| </section> | <name>Use Mutually Exclusive Validation Rules for Different Kinds of JWT | |||
| <section anchor="preventing-confusion" title="Use Mutually Exclusive Validation | s</name> | |||
| Rules for Different Kinds of JWTs"> | <t>Each application of JWTs defines a profile specifying the required | |||
| and optional JWT claims | ||||
| <t>Each application of JWTs defines a profile specifying the required and option | ||||
| al JWT claims | ||||
| and the validation rules associated with them. | and the validation rules associated with them. | |||
| If more than one kind of JWT can be issued by the same issuer, | 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 | the validation rules for those JWTs <bcp14>MUST</bcp14> be written such that | |||
| exclusive, | they are mutually exclusive, | |||
| rejecting JWTs of the wrong kind. | rejecting JWTs of the wrong kind. | |||
| To prevent substitution of JWTs from one context into another, | To prevent substitution of JWTs from one context into another, | |||
| application developers may employ a number of strategies:</t> | application developers may employ a number of strategies:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li>Use explicit typing for different kinds of JWTs. | |||
| <t>Use explicit typing for different kinds of JWTs. | Then the distinct "typ" values can be used to differentiate between the | |||
| Then the distinct “typ” values can be used to differentiate between the differen | different kinds of JWTs.</li> | |||
| t kinds of JWTs.</t> | <li>Use different sets of required claims or different required claim | |||
| <t>Use different sets of required claims or different required claim values. | values. | |||
| Then the validation rules for one kind of JWT will reject those with different c | Then the validation rules for one kind of JWT will reject those with different | |||
| laims or values.</t> | claims or values.</li> | |||
| <t>Use different sets of required header parameters or different required head | <li>Use different sets of required Header Parameters or different | |||
| er parameter values. | required Header Parameter values. | |||
| Then the validation rules for one kind of JWT will reject those with different h | Then the validation rules for one kind of JWT will reject those with different | |||
| eader parameters or values.</t> | Header Parameters or values.</li> | |||
| <t>Use different keys for different kinds of JWTs. | <li>Use different keys for different kinds of JWTs. | |||
| Then the keys used to validate one kind of JWT will fail to validate other kinds | Then the keys used to validate one kind of JWT will fail to validate other kinds | |||
| of JWTs.</t> | of JWTs.</li> | |||
| <t>Use different “aud” values for different uses of JWTs from the same issuer. | <li>Use different "aud" values for different uses of JWTs from the sam | |||
| Then audience validation will reject JWTs substituted into inappropriate context | e issuer. | |||
| s.</t> | Then audience validation will reject JWTs substituted into inappropriate context | |||
| <t>Use different issuers for different kinds of JWTs. | s.</li> | |||
| Then the distinct “iss” values can be used to segregate the different kinds of J | <li>Use different issuers for different kinds of JWTs. | |||
| WTs.</t> | Then the distinct "iss" values can be used to segregate the different kinds of J | |||
| </list></t> | WTs.</li> | |||
| </ul> | ||||
| <t>Given the broad diversity of JWT usage and applications, | <t>Given the broad diversity of JWT usage and applications, | |||
| the best combination of types, required claims, values, header parameters, key u | the best combination of types, required claims, values, Header Parameters, key u | |||
| sages, and issuers | sages, and issuers | |||
| to differentiate among different kinds of JWTs | to differentiate among different kinds of JWTs | |||
| will, in general, be application specific. | will, in general, be application-specific. | |||
| As discussed in <xref target="use-typ"/>, for new JWT applications, the use of e | As discussed in <xref target="use-typ" format="default"/>, for new JWT | |||
| xplicit typing is RECOMMENDED.</t> | applications, the use of explicit typing is | |||
| <bcp14>RECOMMENDED</bcp14>.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="security-considerations" title="Security Considerations"> | <section anchor="security-considerations" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | ||||
| <t>This entire document is about security considerations when implementing and d | <t>This entire document is about security considerations when | |||
| eploying JSON Web Tokens.</t> | implementing and deploying JSON Web Tokens.</t> | |||
| </section> | ||||
| </section> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
| <section anchor="iana-considerations" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t>This document has no IANA actions.</t> | ||||
| <t>This document requires no IANA actions.</t> | </section> | |||
| </section> | ||||
| <section anchor="acknowledgements" title="Acknowledgements"> | ||||
| <t>Thanks to Antonio Sanso for bringing the “ECDH-ES” invalid point attack to th | ||||
| e attention | ||||
| of JWE and JWT implementers. Tim McLean <xref target="McLean"/> published the RS | ||||
| A/HMAC confusion attack. | ||||
| 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 Kuehlewind, | ||||
| Barry Leiba, | ||||
| Eric Rescorla, | ||||
| Adam Roach, | ||||
| Martin Vigoureux, | ||||
| and Eric Vyncke | ||||
| for their reviews.</t> | ||||
| </section> | ||||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6979.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8259.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7515.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7516.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7518.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7519.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8017.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8037.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml"/> | ||||
| <reference anchor="nist-sp-800-56a-r3" target="https://doi.org/10.6028/N | ||||
| IST.SP.800-56Ar3"> | ||||
| <front> | ||||
| <title>Recommendation for Pair-Wise Key-Establishment Schemes | ||||
| Using Discrete Logarithm Cryptography</title> | ||||
| <author initials="E." surname="Barker" fullname="Elaine Barker"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="L." surname="Chen" fullname="Lily Chen"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="A." surname="Roginsky" fullname="Allen Roginsky"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="A." surname="Vassilev" fullname="Apostol Vassilev" | ||||
| > | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="R." surname="Davis" fullname="Richard Davis"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2018" month="April"/> | ||||
| </front> | ||||
| <seriesInfo name="NIST Special Publication" value="800-56A Revision 3" | ||||
| /> | ||||
| <seriesInfo name="DOI" value="10.6028/NIST.SP.800-56Ar3"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6749.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7159.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7517.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8414.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8417.xml"/> | ||||
| <reference anchor="ANSI-X962-2005"> | ||||
| <front> | ||||
| <title>Public Key Cryptography for the Financial Services | ||||
| Industry: the Elliptic Curve Digital Signature Algorithm (ECDSA)</tit | ||||
| le> | ||||
| <author> | ||||
| <organization>American National Standards Institute</organization> | ||||
| </author> | ||||
| <date year="2005" month="November"/> | ||||
| </front> | ||||
| <seriesInfo name="ANSI" value="X9.62-2005"/> | ||||
| </reference> | ||||
| <references title='Normative References'> | <reference anchor="Alawatugoda"> | |||
| <front> | ||||
| <reference anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'> | <title>Protecting Encrypted Cookies from Compression Side-Channel At | |||
| <front> | tacks</title> | |||
| <title>Key words for use in RFCs to Indicate Requirement Levels</title> | <author initials="J." surname="Alawatugoda" fullname="Janaka Alawatu | |||
| <author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></ | goda"> | |||
| author> | <organization/> | |||
| <date year='1997' month='March' /> | </author> | |||
| <abstract><t>In many standards track documents several words are used to signify | <author initials="D." surname="Stebila" fullname="Douglas Stebila"> | |||
| the requirements in the specification. These words are often capitalized. This | <organization/> | |||
| document defines these words as they should be interpreted in IETF documents. | </author> | |||
| This document specifies an Internet Best Current Practices for the Internet Comm | <author initials="C." surname="Boyd" fullname="Colin Boyd"> | |||
| unity, and requests discussion and suggestions for improvements.</t></abstract> | <organization/> | |||
| </front> | </author> | |||
| <seriesInfo name='BCP' value='14'/> | <date month="July" year="2015"/> | |||
| <seriesInfo name='RFC' value='2119'/> | </front> | |||
| <seriesInfo name='DOI' value='10.17487/RFC2119'/> | <refcontent>Financial Cryptography and Data Security, pp. 86-106</refc | |||
| </reference> | ontent> | |||
| <seriesInfo name="DOI" value="10.1007/978-3-662-47854-7_6"/> | ||||
| <reference anchor="RFC6979" target='https://www.rfc-editor.org/info/rfc6979'> | </reference> | |||
| <front> | ||||
| <title>Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic | ||||
| Curve Digital Signature Algorithm (ECDSA)</title> | ||||
| <author initials='T.' surname='Pornin' fullname='T. Pornin'><organization /></au | ||||
| thor> | ||||
| <date year='2013' month='August' /> | ||||
| <abstract><t>This document defines a deterministic digital signature generation | ||||
| procedure. Such signatures are compatible with standard Digital Signature Algor | ||||
| ithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) digital signat | ||||
| ures and can be processed with unmodified verifiers, which need not be aware of | ||||
| the procedure described therein. Deterministic signatures retain the cryptograp | ||||
| hic security features associated with digital signatures but can be more easily | ||||
| implemented in various environments, since they do not need access to a source o | ||||
| f high-quality randomness.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='6979'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC6979'/> | ||||
| </reference> | ||||
| <reference anchor="RFC8259" target='https://www.rfc-editor.org/info/rfc8259'> | ||||
| <front> | ||||
| <title>The JavaScript Object Notation (JSON) Data Interchange Format</title> | ||||
| <author initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organizat | ||||
| ion /></author> | ||||
| <date year='2017' month='December' /> | ||||
| <abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, lan | ||||
| guage-independent data interchange format. It was derived from the ECMAScript P | ||||
| rogramming Language Standard. JSON defines a small set of formatting rules for | ||||
| the portable representation of structured data.</t><t>This document removes inco | ||||
| nsistencies 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="RFC7515" target='https://www.rfc-editor.org/info/rfc7515'> | ||||
| <front> | ||||
| <title>JSON Web Signature (JWS)</title> | ||||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | ||||
| or> | ||||
| <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 si | ||||
| gnatures 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 re | ||||
| gistry defined by that specification. Related encryption capabilities are descr | ||||
| ibed 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='https://www.rfc-editor.org/info/rfc7516'> | ||||
| <front> | ||||
| <title>JSON Web Encryption (JWE)</title> | ||||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | ||||
| or> | ||||
| <author initials='J.' surname='Hildebrand' fullname='J. Hildebrand'><organizatio | ||||
| n /></author> | ||||
| <date year='2015' month='May' /> | ||||
| <abstract><t>JSON Web Encryption (JWE) represents encrypted content using JSON-b | ||||
| ased data structures. Cryptographic algorithms and identifiers for use with thi | ||||
| s specification are described in the separate JSON Web Algorithms (JWA) specific | ||||
| ation and IANA registries defined by that specification. Related digital signat | ||||
| ure and Message Authentication Code (MAC) capabilities are described in the sepa | ||||
| rate 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='https://www.rfc-editor.org/info/rfc7518'> | ||||
| <front> | ||||
| <title>JSON Web Algorithms (JWA)</title> | ||||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | ||||
| or> | ||||
| <date year='2015' month='May' /> | ||||
| <abstract><t>This specification registers cryptographic algorithms and identifie | ||||
| rs 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='https://www.rfc-editor.org/info/rfc7519'> | ||||
| <front> | ||||
| <title>JSON Web Token (JWT)</title> | ||||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | ||||
| or> | ||||
| <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 c | ||||
| laims 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) structu | ||||
| re or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the cl | ||||
| aims 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" target='https://www.rfc-editor.org/info/rfc8017'> | ||||
| <front> | ||||
| <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title> | ||||
| <author initials='K.' surname='Moriarty' fullname='K. Moriarty' role='editor'><o | ||||
| rganization /></author> | ||||
| <author initials='B.' surname='Kaliski' fullname='B. Kaliski'><organization /></ | ||||
| author> | ||||
| <author initials='J.' surname='Jonsson' fullname='J. Jonsson'><organization /></ | ||||
| author> | ||||
| <author initials='A.' surname='Rusch' fullname='A. Rusch'><organization /></auth | ||||
| or> | ||||
| <date year='2016' month='November' /> | ||||
| <abstract><t>This document provides recommendations for the implementation of pu | ||||
| blic-key cryptography based on the RSA algorithm, covering cryptographic primiti | ||||
| ves, encryption schemes, signature schemes with appendix, and ASN.1 syntax for r | ||||
| epresenting 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" target='https://www.rfc-editor.org/info/rfc8037'> | ||||
| <front> | ||||
| <title>CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object S | ||||
| igning and Encryption (JOSE)</title> | ||||
| <author initials='I.' surname='Liusvaara' fullname='I. Liusvaara'><organization | ||||
| /></author> | ||||
| <date year='2017' month='January' /> | ||||
| <abstract><t>This document defines how to use the Diffie-Hellman algorithms &quo | ||||
| t;X25519" and "X448" as well as the signature algorithms "Ed | ||||
| 25519" and "Ed448" from the IRTF CFRG elliptic curves work in JSO | ||||
| N Object Signing and Encryption (JOSE).</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='8037'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8037'/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
| <author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></auth | ||||
| or> | ||||
| <date year='2017' month='May' /> | ||||
| <abstract><t>RFC 2119 specifies common key words that may be used in protocol s | ||||
| pecifications. This document aims to reduce the ambiguity by clarifying that on | ||||
| ly UPPERCASE usage of the key words have the defined special meanings.</t></abs | ||||
| tract> | ||||
| </front> | ||||
| <seriesInfo name='BCP' value='14'/> | ||||
| <seriesInfo name='RFC' value='8174'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8174'/> | ||||
| </reference> | ||||
| <reference anchor="nist-sp-800-56a-r3" target="https://doi.org/10.6028/NIST.SP.8 | ||||
| 00-56Ar3"> | ||||
| <front> | ||||
| <title>Recommendation for Pair-Wise Key Establishment Schemes Using Discrete | ||||
| Logarithm Cryptography, Draft NIST Special Publication 800-56A Revision 3</titl | ||||
| e> | ||||
| <author initials="E." surname="Barker" fullname="Elaine Barker"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="L." surname="Chen" fullname="Lily Chen"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="S." surname="Keller" fullname="Sharon Keller"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="A." surname="Roginsky" fullname="Allen Roginsky"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="A." surname="Vassilev" fullname="Apostol Vassilev"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="R." surname="Davis" fullname="Richard Davis"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <date year="2018" month="April"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| <references title='Informative References'> | ||||
| <reference anchor="RFC6749" target='https://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'><organiz | ||||
| ation /></author> | ||||
| <date year='2012' month='October' /> | ||||
| <abstract><t>The OAuth 2.0 authorization framework enables a third-party applica | ||||
| tion 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 t | ||||
| he 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 protoco | ||||
| l 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" target='https://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'><organizat | ||||
| ion /></author> | ||||
| <date year='2014' month='March' /> | ||||
| <abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, lan | ||||
| guage-independent data interchange format. It was derived from the ECMAScript P | ||||
| rogramming Language Standard. JSON defines a small set of formatting rules for | ||||
| the portable representation of structured data.</t><t>This document removes inco | ||||
| nsistencies 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" target='https://www.rfc-editor.org/info/rfc7517'> | <reference anchor="CVE-2015-9235" target="https://nvd.nist.gov/vuln/detai | |||
| <front> | l/CVE-2015-9235"> | |||
| <title>JSON Web Key (JWK)</title> | <front> | |||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | <title>CVE-2015-9235 Detail</title> | |||
| or> | <author> | |||
| <date year='2015' month='May' /> | <organization>NIST</organization> | |||
| <abstract><t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data st | </author> | |||
| ructure that represents a cryptographic key. This specification also defines a | ||||
| JWK Set JSON data structure that represents a set of JWKs. Cryptographic algori | ||||
| thms and identifiers for use with this specification are described in the separa | ||||
| te JSON Web Algorithms (JWA) specification and IANA registries established by th | ||||
| at specification.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='7517'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC7517'/> | ||||
| </reference> | ||||
| <reference anchor="RFC8414" target='https://www.rfc-editor.org/info/rfc8414'> | <date month="May" year="2018"/> | |||
| <front> | </front> | |||
| <title>OAuth 2.0 Authorization Server Metadata</title> | <refcontent>National Vulnerability Database</refcontent> | |||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | </reference> | |||
| or> | ||||
| <author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /> | ||||
| </author> | ||||
| <author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></ | ||||
| author> | ||||
| <date year='2018' month='June' /> | ||||
| <abstract><t>This specification defines a metadata format that an OAuth 2.0 clie | ||||
| nt can use to obtain the information needed to interact with an OAuth 2.0 author | ||||
| ization server, including its endpoint locations and authorization server capabi | ||||
| lities.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='8414'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8414'/> | ||||
| </reference> | ||||
| <reference anchor="RFC8417" target='https://www.rfc-editor.org/info/rfc8417'> | <reference anchor="Kelsey"> | |||
| <front> | <front> | |||
| <title>Security Event Token (SET)</title> | <title>Compression and Information Leakage of Plaintext</title> | |||
| <author initials='P.' surname='Hunt' fullname='P. Hunt' role='editor'><organizat | <author initials="J." surname="Kelsey" fullname="John Kelsey"> | |||
| ion /></author> | <organization/> | |||
| <author initials='M.' surname='Jones' fullname='M. Jones'><organization /></auth | </author> | |||
| or> | <date month="July" year="2002"/> | |||
| <author initials='W.' surname='Denniss' fullname='W. Denniss'><organization /></ | </front> | |||
| author> | <refcontent>Fast Software Encryption, pp. 263-276</refcontent> | |||
| <author initials='M.' surname='Ansari' fullname='M. Ansari'><organization /></au | <seriesInfo name="DOI" value="10.1007/3-540-45661-9_21"/> | |||
| thor> | </reference> | |||
| <date year='2018' month='July' /> | ||||
| <abstract><t>This specification defines the Security Event Token (SET) data stru | ||||
| cture. A SET describes statements of fact from the perspective of an issuer abo | ||||
| ut a subject. These statements of fact represent an event that occurred directl | ||||
| y 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 t | ||||
| o enable representing security- and identity-related events. A SET is a JSON We | ||||
| b Token (JWT), which can be optionally signed and/or encrypted. SETs can be dist | ||||
| ributed via protocols such as HTTP.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='8417'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC8417'/> | ||||
| </reference> | ||||
| <reference anchor="ANSI-X962-2005" > | <reference anchor="Langkemper" | |||
| <front> | target="https://www.sjoerdlangkemper.nl/2016/09/28/attacking-j | |||
| <title>American National Standard X9.62: The Elliptic Curve Digital Signatur | wt-authentication/"> | |||
| e Algorithm (ECDSA)</title> | <front> | |||
| <author > | <title>Attacking JWT authentication</title> | |||
| <organization></organization> | <author initials="S." surname="Langkemper" fullname="Sjoerd Langkemp | |||
| </author> | er"> | |||
| <date year="2005" month="November"/> | <organization/> | |||
| </front> | </author> | |||
| </reference> | <date month="September" year="2016"/> | |||
| </front> | ||||
| </reference> | ||||
| <reference anchor="Alawatugoda" > | <reference anchor="McLean" | |||
| <front> | target="https://auth0.com/blog/critical-vulnerabilities-in-jso | |||
| <title>Protecting Encrypted Cookies from Compression Side-Channel Attacks</t | n-web-token-libraries/"> | |||
| itle> | <front> | |||
| <author initials="J." surname="Alawatugoda" fullname="Janaka Alawatugoda"> | <title>Critical vulnerabilities in JSON Web Token libraries</title> | |||
| <organization></organization> | <author initials="T." surname="McLean" fullname="Tim McLean"> | |||
| </author> | <organization/> | |||
| <author initials="D." surname="Stebila" fullname="Douglas Stebila"> | </author> | |||
| <organization></organization> | <date month="March" year="2015"/> | |||
| </author> | </front> | |||
| <author initials="C." surname="Boyd" fullname="Colin Boyd"> | </reference> | |||
| <organization></organization> | ||||
| </author> | ||||
| <date year="2015"/> | ||||
| </front> | ||||
| <seriesInfo name="Financial Cryptography and Data Security" value="pp. 86-106" | ||||
| /> | ||||
| <seriesInfo name="DOI" value="10.1007/978-3-662-47854-7_6"/> | ||||
| </reference> | ||||
| <reference anchor="Kelsey" > | <reference anchor="Valenta" target="https://ia.cr/2018/298"> | |||
| <front> | <front> | |||
| <title>Compression and Information Leakage of Plaintext</title> | <title>In search of CurveSwap: Measuring elliptic curve implementati | |||
| <author initials="J." surname="Kelsey" fullname="John Kelsey"> | ons in the wild</title> | |||
| <organization></organization> | <author initials="L." surname="Valenta" fullname="Luke Valenta"> | |||
| </author> | <organization/> | |||
| <date year="2002"/> | </author> | |||
| </front> | <author initials="N." surname="Sullivan" fullname="Nick Sullivan"> | |||
| <seriesInfo name="Fast Software Encryption" value="pp. 263-276"/> | <organization/> | |||
| <seriesInfo name="DOI" value="10.1007/3-540-45661-9_21"/> | </author> | |||
| </reference> | <author initials="A." surname="Sanso" fullname="Antonio Sanso"> | |||
| <organization/> | ||||
| </author> | ||||
| <author initials="N." surname="Heninger" fullname="Nadia Heninger"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="March" year="2018"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="Langkemper" target="https://www.sjoerdlangkemper.nl/2016/09/2 | <reference anchor="Sanso" | |||
| 8/attacking-jwt-authentication/"> | target="https://blogs.adobe.com/security/2017/03/critical-vuln | |||
| <front> | erability-uncovered-in-json-encryption.html"> | |||
| <title>Attacking JWT Authentication</title> | <front> | |||
| <author initials="S." surname="Langkemper" fullname="Sjoerd Langkemper"> | <title>Critical Vulnerability Uncovered in JSON Encryption</title> | |||
| <organization></organization> | <author initials="A." surname="Sanso" fullname="Antonio Sanso"> | |||
| </author> | <organization/> | |||
| <date year="2016" month="September"/> | </author> | |||
| </front> | <date month="March" year="2017"/> | |||
| </reference> | </front> | |||
| <reference anchor="McLean" target="https://auth0.com/blog/critical-vulnerabiliti | </reference> | |||
| es-in-json-web-token-libraries//"> | ||||
| <front> | ||||
| <title>Critical vulnerabilities in JSON Web Token libraries</title> | ||||
| <author initials="T." surname="McLean" fullname="Tim McLean"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <date year="2015" month="March"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="Valenta" target="https://ia.cr/2018/298"> | ||||
| <front> | ||||
| <title>In search of CurveSwap: Measuring elliptic curve implementations in t | ||||
| he wild</title> | ||||
| <author initials="L." surname="Valenta" fullname="Luke Valenta"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="N." surname="Sullivan" fullname="Nick Sullivan"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="A." surname="Sanso" fullname="Antonio Sanso"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <author initials="N." surname="Heninger" fullname="Nadia Heninger"> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <date year="2018" month="March"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="Sanso" target="https://blogs.adobe.com/security/2017/03/criti | ||||
| cal-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-c | ||||
| ore-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="OpenID.Core" target="https://openid.net/specs/openid- | ||||
| connect-core-1_0.html"> | ||||
| <front> | ||||
| <title>OpenID Connect Core 1.0 incorporating errata set 1</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 Medei | ||||
| ros"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="C." surname="Mortimore" fullname="Chuck Mortimore" | ||||
| > | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="November" year="2014"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section anchor="acknowledgements" numbered="false" toc="default"> | ||||
| <section anchor="document-history" title="Document History"> | <name>Acknowledgements</name> | |||
| <t>Thanks to <contact fullname="Antonio Sanso"/> for bringing the | ||||
| <t>[[ to be removed by the RFC editor before publication as an RFC ]]</t> | "ECDH-ES" invalid point attack to the attention | |||
| of JWE and JWT implementers. <contact fullname="Tim McLean"/> published the | ||||
| <section anchor="draft-ietf-oauth-jwt-bcp-07" title="draft-ietf-oauth-jwt-bcp-07 | RSA/HMAC confusion attack <xref target="McLean" | |||
| "> | format="default"/>. | |||
| Thanks to <contact fullname="Nat Sakimura"/> for advocating the use of | ||||
| <t><list style="symbols"> | explicit typing. Thanks to <contact fullname="Neil Madden"/> for his | |||
| <t>IESG review comments.</t> | numerous comments, and to | |||
| </list></t> | <contact fullname="Carsten Bormann"/>, | |||
| <contact fullname="Brian Campbell"/>, | ||||
| </section> | <contact fullname="Brian Carpenter"/>, | |||
| <section anchor="draft-ietf-oauth-jwt-bcp-06" title="draft-ietf-oauth-jwt-bcp-06 | <contact fullname="Alissa Cooper"/>, | |||
| "> | <contact fullname="Roman Danyliw"/>, | |||
| <contact fullname="Ben Kaduk"/>, | ||||
| <t><list style="symbols"> | <contact fullname="Mirja Kühlewind"/>, | |||
| <t>Second AD review.</t> | <contact fullname="Barry Leiba"/>, | |||
| <t>Removed unworkable recommendation to pad encrypted passwords.</t> | <contact fullname="Eric Rescorla"/>, | |||
| </list></t> | <contact fullname="Adam Roach"/>, | |||
| <contact fullname="Martin Vigoureux"/>, | ||||
| </section> | and <contact fullname="Éric Vyncke"/> | |||
| <section anchor="draft-ietf-oauth-jwt-bcp-05" title="draft-ietf-oauth-jwt-bcp-05 | for their reviews.</t> | |||
| "> | </section> | |||
| <t><list style="symbols"> | ||||
| <t>Genart review comments.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="draft-ietf-oauth-jwt-bcp-04" title="draft-ietf-oauth-jwt-bcp-04 | ||||
| "> | ||||
| <t><list style="symbols"> | ||||
| <t>AD review comments.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="draft-ietf-oauth-jwt-bcp-03" title="draft-ietf-oauth-jwt-bcp-03 | ||||
| "> | ||||
| <t><list style="symbols"> | ||||
| <t>Acknowledgements.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="draft-ietf-oauth-jwt-bcp-02" title="draft-ietf-oauth-jwt-bcp-02 | ||||
| "> | ||||
| <t><list style="symbols"> | ||||
| <t>Implemented WGLC feedback.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="draft-ietf-oauth-jwt-bcp-01" title="draft-ietf-oauth-jwt-bcp-01 | ||||
| "> | ||||
| <t><list style="symbols"> | ||||
| <t>Feedback from Brian Campbell.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="draft-ietf-oauth-jwt-bcp-00" title="draft-ietf-oauth-jwt-bcp-00 | ||||
| "> | ||||
| <t><list style="symbols"> | ||||
| <t>Initial WG draft. No change from the latest individual version.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="draft-sheffer-oauth-jwt-bcp-01" title="draft-sheffer-oauth-jwt- | ||||
| bcp-01"> | ||||
| <t><list style="symbols"> | ||||
| <t>Added explicit typing.</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <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> | </back> | |||
| <!-- ##markdown-source: | ||||
| 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 | ||||
| </rfc> | </rfc> | |||
| End of changes. 77 change blocks. | ||||
| 1201 lines changed or deleted | 658 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||