This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch docs
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/docs by this push:
     new d2266e1ca1 READY-381/383/385/394: Release notes for the auth/lifecycle 
hardening batch
d2266e1ca1 is described below

commit d2266e1ca1b39199c9e858b1843d0acfc839f31f
Author: James Bognar <[email protected]>
AuthorDate: Sun Aug 16 18:50:25 2026 -0400

    READY-381/383/385/394: Release notes for the auth/lifecycle hardening batch
---
 pages/release-notes/10.0.0.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/pages/release-notes/10.0.0.md b/pages/release-notes/10.0.0.md
index 5de5b76fe7..cb15a46f68 100644
--- a/pages/release-notes/10.0.0.md
+++ b/pages/release-notes/10.0.0.md
@@ -1250,6 +1250,15 @@ See [OIDC Relying Party 
Login](/docs/topics/OidcRelyingParty#login-state-store-c
 
   **Migration:** none for normal usage; each of these only rejects 
previously-out-of-spec or previously-exploitable input.
 
+- **Security hardening — auth boundary sweep (READY-385/383/381).** A further 
hardening pass tightened three auth-adjacent boundaries flagged by adversarial 
review:
+  - **`SamlMetadataResolvers.url(...)`** (`juneau-rest-server-auth-saml`) now 
bounds a remote IdP metadata fetch to a configurable maximum (1 MiB by 
default), enforced against both a declared `Content-Length` and the actual byte 
stream as it arrives, so a malicious or misconfigured metadata endpoint can no 
longer exhaust memory via an unbounded or falsely-small-`Content-Length` 
response.
+  - **`AuthFilterChain`/`AuthResultAccumulator`** (`juneau-rest-server`) no 
longer union roles across *different* authenticated principals when multiple 
auth filters each succeed in the same request. Roles still union across 
successive results for the *same* principal (e.g. a filter that 
re-authenticates and adds roles); a second, differently-named principal's roles 
are now ignored (logged as a `WARNING`) instead of being merged onto the first 
principal's identity — closing a privilege-e [...]
+  - **`OAuthIntrospectionValidator`** (`juneau-rest-server-auth-oauth`) gains 
`Builder.audience(String...)` / the RFC 8707-aliased 
`Builder.resource(String...)`, checked against the introspection response's 
`aud` claim(s). When configured, a token whose `aud` doesn't intersect the 
expected set is rejected, closing a token-confusion path where a token issued 
for a different resource/audience would otherwise be accepted. Unconfigured 
(the default) preserves prior behavior exactly — no audi [...]
+
+  **Migration:** none for normal usage. An application relying on the old 
cross-principal role union (uncommon and generally unintended) will see those 
roles no longer merged; one that wants audience enforcement must now explicitly 
call `audience(...)`/`resource(...)` on the `OAuthIntrospectionValidator` 
builder (previously not available).
+
+- **Fixed `ReadinessState` incorrectly shared across multiple 
default-configured microservices in one JVM (READY-394).** 
`JettyServerComponent`/`TomcatServerComponent` previously flipped 
`ReadinessState.resolve(ms.getBeanStore())` on start/stop without ever 
registering a bean back into that store, and `HealthAggregator` resolved 
readiness from the health-probe servlet's own (different) `RestContext` bean 
store — so on the default (no app `@Bean ReadinessState`) path, both sides 
silently  [...]
+
 - **Present-but-empty `RestContext.*` boolean settings no longer throw 
(leniency improvement).** Landed alongside the new `RestContextProperties` 
`@ConfigProperties` bean (see New Features above): previously, a 
present-but-empty value for a boolean `RestContext.*` setting (e.g. 
`RestContext.eagerInit=`) threw `BeanCreationException` at injection time, 
because the old `@Value boolean` field's strict conversion had no tolerance for 
an empty string. As of 10.0.0 this is resolved leniently t [...]
 
 - **SVL variables in a `RestContext.*` boolean setting now resolve through the 
resource's own var resolver (capability widening).** Landed alongside the same 
`RestContextProperties` change: a `$C{...}` / `$R{...}` / `$S{...}`-style 
variable embedded in a boolean `RestContext.*` value (e.g. 
`RestContext.virtualThreads=$C{MyConfig/virtualThreads}`) is now resolved 
through the owning resource's `VarResolver` rather than `VarResolver.DEFAULT`, 
so resource-scoped variables like `$C{...}` (con [...]

Reply via email to