Skip to content

Commit b5cfe3a

Browse files
authored
Merge branch 'main' into mbj-acknowledgements
2 parents 2741924 + 2ab07d7 commit b5cfe3a

File tree

1 file changed

+40
-17
lines changed

1 file changed

+40
-17
lines changed

draft-ietf-oauth-rfc8725bis.md

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
189200
The JWT specification has seen rapid adoption because it encapsulates
190201
security-relevant information in one easy-to-protect location, and because
191202
it 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
198209
attacks on implementations and deployments.
@@ -475,11 +486,6 @@ This set will vary over time as new algorithms are introduced
475486
and existing algorithms are deprecated due to discovered cryptographic weaknesses.
476487
Applications 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.
483489
The "none" algorithm should only be used when the JWT is cryptographically protected by other means.
484490
JWTs using "none" are often used in application contexts in which the content is optionally signed.
485491
The 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.
516522
All cryptographic operations used in the JWT MUST be validated and the entire JWT MUST be rejected
517523
if any of them fail to validate.
518524
This 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
520527
using the keys and algorithms supplied by the application.
521528

522529
Libraries 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.
594601
If 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
599606
that reference a JSON metadata document that contains a "jwks_uri" value that is
600607
an "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}}.
602609
Other 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
606613
the subject value corresponds to a valid subject and/or issuer-subject pair at the application.
607614
This 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.
608617
If 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,
635644
which may contain an arbitrary URL,
636645
could 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
638647
and 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
647661
kind of JWT is subject to such confusion, that JWT can include an explicit
648662
JWT type value, and the validation rules can specify checking the type.
649663
This mechanism can prevent such confusion.
@@ -652,6 +666,14 @@ For instance, the {{RFC8417}} specification uses
652666
the "application/secevent+jwt" media type
653667
to 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+
655677
Per the definition of "typ" in Section 4.1.9 of [RFC7515], it is RECOMMENDED that the "application/" prefix
656678
be omitted from the "typ" Header Parameter value, compared to the associated media type.
657679
Therefore, 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

Comments
 (0)