@@ -125,12 +125,23 @@ informative:
125125 date : December 2023
126126 target : https://openid.net/specs/openid-connect-core-1_0.html
127127 title : OpenID Connect Core 1.0 incorporating errata set 2
128+ OpenID.Backchannel :
129+ author :
130+ - ins : M. Jones
131+ name : Michael B. Jones
132+ - ins : J. Bradley
133+ name : John Bradley
134+ date : December 2023
135+ target : https://openid.net/specs/openid-connect-backchannel-1_0.html
136+ title : OpenID Connect Back-Channel Logout 1.0 incorporating errata set 1
128137 RFC6749 :
129138 RFC7159 :
130139 RFC7517 :
131140 RFC8414 :
132141 RFC8417 :
133142 RFC8725 :
143+ RFC9068 :
144+ RFC9700 :
134145 Sanso :
135146 author :
136147 - ins : A. Sanso
@@ -189,10 +200,10 @@ that contain a set of claims that can be signed and/or encrypted.
189200The JWT specification has seen rapid adoption because it encapsulates
190201security-relevant information in one easy-to-protect location, and because
191202it is easy to implement using widely available tools.
192- One application area in which JWTs are commonly used is representing digital identity information,
193- such as OpenID Connect ID Tokens {{OpenID.Core}}
194- and OAuth 2.0 {{RFC6749}} access tokens and
195- refresh tokens, the details of which are deployment-specific.
203+ One application area in which JWTs are commonly used is
204+ representing authorization information, such as OAuth 2.0 access tokens {{RFC9068}},
205+ and identity information, such as OpenID Connect ID Tokens {{OpenID.Core}}.
206+ The details of these uses are application- and deployment-specific.
196207
197208 Since the JWT specification was published, there have been several widely published
198209attacks on implementations and deployments.
@@ -475,11 +486,6 @@ This set will vary over time as new algorithms are introduced
475486and existing algorithms are deprecated due to discovered cryptographic weaknesses.
476487Applications MUST therefore be designed to enable cryptographic agility.
477488
478- That said, if a JWT is cryptographically protected end-to-end by a
479- transport layer, such as TLS
480- using cryptographically current algorithms, there may be no need to apply another layer of
481- cryptographic protections to the JWT.
482- In such cases, the use of the "none" algorithm can be perfectly acceptable.
483489The "none" algorithm should only be used when the JWT is cryptographically protected by other means.
484490JWTs using "none" are often used in application contexts in which the content is optionally signed.
485491The URL-safe claims representation and processing in this context can be the same in both
@@ -516,7 +522,8 @@ without new algorithm identifiers being required.
516522All cryptographic operations used in the JWT MUST be validated and the entire JWT MUST be rejected
517523if any of them fail to validate.
518524This is true not only of JWTs with a single set of Header Parameters
519- but also for Nested JWTs in which both outer and inner operations MUST be validated
525+ but also for Nested JWTs, as defined in {{Section 2 of RFC7519}},
526+ in which both outer and inner operations MUST be validated
520527using the keys and algorithms supplied by the application.
521528
522529Libraries MUST allow the verifier to distinguish between signed JWTs (JWSes) and encrypted JWTs (JWEs).
@@ -594,17 +601,19 @@ used for the cryptographic operations in the JWT belong to the issuer.
594601If they do not, the application MUST reject the JWT.
595602
596603 The means of determining the keys owned by an issuer is application-specific.
597- As one example, OpenID Connect {{OpenID.Core }}
598- issuer values are "https" URLs
604+ As one example, OAuth 2.0 authorization server "issuer" values {{RFC8414 }}
605+ are "https" URLs
599606that reference a JSON metadata document that contains a "jwks_uri" value that is
600607an "https" URL from which the issuer's keys are retrieved as a JWK Set {{RFC7517}}.
601- This same mechanism is used by {{RFC8414 }}.
608+ This same mechanism is used by OpenID Connect {{OpenID.Core }}.
602609Other applications may use different means of binding keys to issuers.
603610
604611 Similarly, when the JWT contains a "sub" (subject) claim, the
605612 application MUST validate that
606613the subject value corresponds to a valid subject and/or issuer-subject pair at the application.
607614This may include confirming that the issuer is trusted by the application.
615+ In the OAuth context, {{Section 4.15 of RFC9700}} discusses the possibility of
616+ confusing user identifier and client ID values.
608617If the issuer, subject, or the pair are invalid, the application
609618 MUST reject the JWT.
610619
@@ -634,16 +643,21 @@ and/or sanitizing the received value.
634643 Similarly, blindly following a "jku" (JWK set URL) or "x5u" (X.509 URL) header,
635644which may contain an arbitrary URL,
636645could result in server-side request forgery (SSRF) attacks. Applications SHOULD protect against such
637- attacks, e.g., by matching the URL to a whitelist of allowed locations
646+ attacks, e.g., by matching the URL to an allowlist of permitted locations
638647and ensuring no cookies are sent in the GET request.
639648
640-
649+ When such an allowlist is not available, the authorization server SHOULD check what a hostname resolves to
650+ and avoid making a request if it resolves to a loopback or local IP address.
651+ An example of this is when "attacker.example.com/etc/passwd" is used
652+ as the "jwks_uri" value and there is a DNS entry for "attacker.example.com"
653+ that resolves to "127.0.0.1" or other local IP address values.
641654
642655
643656# # Use Explicit Typing {#use-typ}
644657
645-
646- Sometimes, one kind of JWT can be confused for another. If a particular
658+ When two different uses of JWTs share a common set of claims,
659+ one kind of JWT can be confused for another.
660+ If a particular
647661kind of JWT is subject to such confusion, that JWT can include an explicit
648662JWT type value, and the validation rules can specify checking the type.
649663This mechanism can prevent such confusion.
@@ -652,6 +666,14 @@ For instance, the {{RFC8417}} specification uses
652666the "application/secevent+jwt" media type
653667to perform explicit typing of Security Event Tokens (SETs).
654668
669+ An example of an ad-hoc means of preventing confusion
670+ between different kinds of JWTs is the requirement in
671+ Logout Tokens {{OpenID.Backchannel}} prohibiting the inclusion of a "nonce" claim
672+ so that Logout Tokens will fail the validation rules for ID Tokens {{OpenID.Core}}.
673+ The use of explicit typing avoids the need for employing such ad-hoc mechanisms
674+ when the validation rules for both kinds of JWTs include validating the "typ" values
675+ and the acceptable "typ" values for the two kinds of JWTs are distinct.
676+
655677Per the definition of "typ" in Section 4.1.9 of [RFC7515], it is RECOMMENDED that the "application/" prefix
656678be omitted from the "typ" Header Parameter value, compared to the associated media type.
657679Therefore, for example, the "typ" value used to explicitly include a type for a SET SHOULD be "secevent+jwt".
@@ -822,6 +844,7 @@ This document obsoletes RFC 8725 and provides several significant improvements a
822844
823845# # draft-ietf-oauth-rfc8725bis-02
824846
847+ * Incorporated Aaron Parecki's review suggestions.
825848* Acknowledged contributors to the new content in this specification.
826849
827850# # draft-ietf-oauth-rfc8725bis-01
0 commit comments