2
2
3
3
### 0.12.4
4
4
5
- This patch release:
5
+ This patch release includes various changes listed below.
6
+
7
+ #### Jackson Default Parsing Behavior
8
+
9
+ This release makes two behavioral changes to JJWT's default Jackson ` ObjectMapper ` parsing settings:
10
+
11
+ 1 . In the interest of having stronger standards to reject potentially malformed/malicious/accidental JSON that could
12
+ have undesirable effects on an application, JJWT's default ` ObjectMapper ` is now configured to explicitly reject/fail
13
+ parsing JSON (JWT headers and/or Claims) if/when that JSON contains duplicate JSON member names.
14
+
15
+ For example, now the following JSON, if parsed, would fail (be rejected) by default:
16
+ ``` json
17
+ {
18
+ "hello" : " world" ,
19
+ "thisWillFail" : 42 ,
20
+ "thisWillFail" : " test"
21
+ }
22
+ ```
23
+
24
+ Technically, the JWT RFCs _do allow_ duplicate named fields as long as the last parsed member is the one used
25
+ (see [JWS RFC 7515, Section 4](https://datatracker.ietf.org/doc/html/rfc7515#section-4)), so this is allowed.
26
+ However, because JWTs often reflect security concepts, it's usually better to be defensive and reject these
27
+ unexpected scenarios by default. The RFC later supports this position/preference in
28
+ [Section 10.12 ](https://datatracker.ietf.org/doc/html/rfc7515#section-10.12):
29
+
30
+ Ambiguous and potentially exploitable situations
31
+ could arise if the JSON parser used does not enforce the uniqueness
32
+ of member names or returns an unpredictable value for duplicate
33
+ member names.
34
+
35
+ Finally, this is just a default, and the RFC does indeed allow duplicate member names if the last value is used,
36
+ so applications that require duplicates to be allowed can simply configure their own `ObjectMapper` and use
37
+ that with JJWT instead of assuming this (new) JJWT default. See
38
+ [Issue #877 ](https://github.com/jwtk/jjwt/issues/877) for more.
39
+ 2 . If using JJWT's support to use Jackson to parse
40
+ [Custom Claim Types ](https://github.com/jwtk/jjwt#json-jackson-custom-types) (for example, a Claim that should be
41
+ unmarshalled into a POJO), and the JSON for that POJO contained a member that is not represented in the specified
42
+ class, Jackson would fail parsing by default. Because POJOs and JSON data models can sometimes be out of sync
43
+ due to different class versions, the default behavior has been changed to ignore these unknown JSON members instead
44
+ of failing (i.e. the `ObjectMapper`'s `DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES` is now set to `false`)
45
+ by default.
46
+
47
+ Again, if you prefer the stricter behavior of rejecting JSON with extra or unknown properties, you can configure
48
+ `true` on your own `ObjectMapper` instance and use that instance with the `Jwts.parser()` builder.
49
+
50
+ #### Additional Changes
51
+
52
+ This release also:
6
53
54
+ * Fixes a thread-safety issue when using `java.util.ServiceLoader` to dynamically lookup/instantiate pluggable
55
+ implementations of JJWT interfaces (e.g. JSON parsers, etc). See
56
+ [Issue #873 ](https://github.com/jwtk/jjwt/issues/873) and its documented fix in
57
+ [PR #893 ](https://github.com/jwtk/jjwt/pull/892).
7
58
* Ensures Android environments and older `org.json` library usages can parse JSON from a `JwtBuilder`-provided
8
59
`java.io.Reader` instance. [Issue 882](https://github.com/jwtk/jjwt/issues/882).
9
60
* Ensures a single string `aud` (Audience) claim is retained (without converting it to a `Set`) when copying/applying a
@@ -14,6 +65,7 @@ This patch release:
14
65
[6.2 .1.3 ](https://datatracker.ietf.org/doc/html/rfc7518#section-6.2.1.3), and
15
66
[6.2 .2.1 ](https://datatracker.ietf.org/doc/html/rfc7518#section-6.2.2.1), respectively.
16
67
[Issue 901 ](https://github.com/jwtk/jjwt/issues/901).
68
+ * Fixes various typos in documentation and JavaDoc. Thanks to those contributing pull requests for these!
17
69
18
70
### 0.12.3
19
71
0 commit comments