itk-dev/openid-connect-bundle
Symfony bundle for OpenID Connect authentication. Configure OIDC providers, handle login and logout, discover endpoints, validate tokens, and map claims to users for secure single sign-on in Symfony applications.
Bottom line on 6.1.0: this is a substantive feature release from an actively maintained project, not a maintainer-abandonment signal. It does not change the framework-fit verdict — still a Symfony bundle, still not a Laravel package — but it materially improves the reference-implementation value of the source and closes three questions the prior assessment flagged as open. The recommendation to extract rather than depend is unchanged; the extraction target just got better.
What the release actually contains. Four functional changes and three maturity changes:
Architecture fit — unchanged. Bundles remain non-portable into Laravel. Nothing here introduces a Laravel bridge, a PSR-only core, a framework-agnostic package split, or a container abstraction that would let Illuminate resolve the bundle's services. composer require still installs code that never registers. The 4–6 week adapter estimate stands, and is if anything slightly higher now, because the new "no provider held between requests" semantics mean any Symfony-to-Laravel adapter must also get the lifecycle contract right rather than relying on implicit per-process caching.
What is reusable — improved. The extractable surface is now larger and better documented: PKCE challenge/verifier handling, error-callback handling, scope configuration, and bounded config parsing all sit in the protocol layer rather than the framework layer. The mock IdP documentation is the highest-leverage item in the release for us — it turns "read the source and guess" into "run it locally against a stub and observe the flows," which is exactly what we need to build an acceptance spec for a Laravel-native port.
Technical risk — modestly reduced, not resolved. Positives: seven PRs in one release, CI added, docs added, behaviour explicitly documented rather than implicit. That is the profile of a maintained single-maintainer project with a real user, not a dormant one. Negatives unchanged: still one originating organisation (Danish municipal sector), still no evidence of external production adoption in the data provided (none was supplied for this review), still no vendor or SLA, still security-critical validation logic without broad third-party scrutiny. Two specific things to verify before relying on the release notes:
Key questions — three closed, four remain.
Ranking unchanged; confidence in option 1 increases. Extract-into-Laravel remains the default. The bundle now contains more of the protocol edge cases we would otherwise rediscover (PKCE, error callbacks, bounded config) and ships a documented mock IdP we can test against. That shortens the extraction spike and reduces spec uncertainty.
Migration path. Still greenfield — no data migration. One addition: if any team pinned 6.0.0 in a Symfony service, 6.1.0 changes provider lifecycle behaviour and should be treated as an upgrade requiring regression testing on the auth flow, not a drop-in minor bump. Behavioural acceptance spec for a port should now be derived from 6.1.0 plus its UPGRADE notes.
Compatibility watch-items. Carry forward all prior items (PHP floor, Symfony component ranges, PSR-18/PSR-7 client expectations, Symfony cache contracts vs Laravel cache stores for JWKS, env-var naming, session semantics). New on top of these:
Sequencing.
alg: none and algorithm confusion, expired/nbf skew, JWKS rotation, callback URL and multi-domain handling — plus, new to this list, cross-request state leakage under concurrent and long-lived-worker conditions, which is precisely what PR #80 gates upstream.Maintenance. Unchanged in structure: options 3 and 4 still impose two upgrade vectors on a team staffed for one; option 1 concentrates the surface into our own code. The delta is that upstream maintenance now looks like a going concern — seven PRs, new CI, new docs — which slightly lowers the risk that a fork is left without upstream reference fixes. It does not lower it to zero: one maintainer, one organisation, no succession plan visible.
Support. No vendor, no SLA, no commercial backing. Escalation remains GitHub issues to a small public-sector IT shop. The response to our prior question about maintainership is "actively developed by its originator," which is better than the alternative but is still not a support contract. Treat it as a source we forked.
Scaling. Login remains low-QPS; the scaling-relevant pieces are still JWKS caching and any introspection volume. Two improvements: the provider-lifecycle change removes a per-process cache of provider objects that would have been a memory/state hazard under Octane, and the documented worker-mode contract gives us a stated model to design against rather than inferring one. Both need re-pointing at Laravel's cache and HTTP client, as before.
Failure modes to instrument for. Carry forward: state/nonce mismatch and stale session cookies, JWKS rotation producing silent validation failures, clock skew on exp/nbf, algorithm confusion, callback URL mismatch across environments, missing back-channel logout leaving valid sessions after IdP revocation, and IdP metadata drift. Adjust and add:
Ramp-up. Effectively unchanged at two to three weeks for a mid-level PHP developer, but the curve is shallower in the first few days: the mock IdP documentation and the explicit worker-mode contract remove the "read source and guess" phase. The larger gain is on the security review side — PKCE and algorithm/claim validation are now demonstrated in-source rather than left to the reviewer's recall. Budget that review as non-optional and scope it to include PKCE verifier lifecycle and the worker-mode state contract.
How can I help you explore Laravel packages today?