00.79.20
@ExperimentalJSentinelApi; the stable surfaces are unchanged. Followed by
three security-hardening ticks —
00.79.30,
00.79.40 and
00.79.41 (current
release).Release date: 2026-06-27 Previous release: 00.79.10 Maven coordinates (parent):
com.svenruppert.jsentinel:jSentinel-parent:00.79.20Full changelog: GitHub release v00.79.20
Extended OAuth2 hardening
- JWE-decoding for ID tokens (RFC 7516) — some IdPs (e.g. Entra Conditional Access) deliver
JWE(JWS(payload)). NewJweDecoderSPI +JweAlgorithmAllowList(defaults()= RSA-OAEP-256 + A128/A256GCM;fips()= RSA-OAEP-256 + A256GCM);JweUnwrappingJwtValidatoris a decorator (decrypt → delegate to the wrapped validator —NimbusJwtValidatoruntouched). The allow-list is enforced before decryption (RSA1_5/dirdowngrades rejected); azipheader is rejected and input capped at 100 KB (decompression-bomb guard); decryption is never treated as authentication. - mTLS client-auth (RFC 8705) —
MutualTlsClientConfig+MutualTls.sslContext(...)build a TLS-1.3SSLContextpresenting the client cert; modeled outside the now-stable sealedClientAuthentication(a TLS-layer concern).mtls_endpoint_aliasesare https-enforced (a tampered discovery doc can’t redirect the cert-bearing request to plaintext). - PAR (RFC 9126) —
PushedAuthorizationRequestClient; the browser redirect carries onlyclient_id+request_uri(no param leak into URL/history). - JAR (RFC 9101) —
AuthorizationRequestSignersigns the request object via the 00.77JwtSigner(neveralg:none); security claims written after the caller’s params so they can’t be overridden.
Both PAR and JAR are additive direct-API primitives — the stable
AuthorizationCodeFlow is untouched (fluent .par(true) sugar is staged).
FIPS profile + demos
The fips-profile.md gains an OAuth2 / OIDC / DPoP / JWE / mTLS section
(JWS RS/ES only, JWE RSA-OAEP-256 + A256GCM, DPoP RSA-2048+/P-256, TLS 1.3
everywhere) plus a new mtls-setup.md operator guide. A new
5-minute-setup-oidc.md covers OIDC RP bootstrap, one-line vendor profiles and
the full hardening menu; demo-jsentinel-vaadin gains a VendorProfileOidcExample
(Keycloak / Entra / Auth0 wiring, one line per IdP).
Quality
A two-pronged exit review fixed three findings before ship (JWE zip-bomb cap,
mtls_endpoint_aliases https-check, accurate TLS-1.3 claim). No mocks —
real RSA JWE round-trips, a real mutual-TLS handshake over SSLServerSocket,
a real HttpServer PAR endpoint. Re-measured: jSentinel-jwt 75 %,
jSentinel-oauth2 65 % mutation. No new module this etappe (B6 extends
jSentinel-jwt / jSentinel-oauth2).
The 00.79 trilogy — done
| Etappe | Version | Theme |
|---|---|---|
| 1 | 00.79.00 | Vendor profiles + test-oidc + Stable-API promotion |
| 2 | 00.79.10 | Replay-stores + DPoP (RFC 9449) + OIDC logout-hardening |
| 3 | 00.79.20 | mTLS / PAR / JAR / JWE + FIPS + demos |
The 00.76 (JWT) → 00.77 (OAuth2) → 00.78 (OIDC) → 00.79 (hardening) identity stack is feature-complete on Maven Central. Next: the 00.80 high-security & operations line.
Migration
None. Additive; no source changes required. To adopt a feature, see
5-minute-setup-oidc docs. Just bump the version to
00.79.20.