pdias/saml-bundle
Symfony bundle for adding SAML 2.0 single sign-on to PHP applications. It integrates SAML toolkit configuration for service providers and identity providers, helping handle SP-initiated login, assertions, and authentication flows in Symfony.
Architecture fit — unchanged, and still poor at the framework boundary. The v2.0 release note ("Support symfony 4.") does not alter the fundamental problem: pdias/SamlBundle is a Symfony bundle, not a Laravel package. Its integration surface remains Symfony-specific — a Bundle class, a DependencyInjection\Extension with a Configuration tree, compiler passes, and event-subscriber wiring into Symfony's kernel and security firewall. Laravel's service container, config repository, middleware pipeline, and auth guards share no contracts with these. There is still no ServiceProvider, no publishable config, no facade. Any Laravel use remains a re-implementation, not an installation. A Symfony 4 target actually widens the gap: Symfony 4's DI and bundle conventions predate the Symfony 5.4/6.x idioms, so the code is now two framework generations behind the ecosystem we would even hypothetically borrow patterns from.
What v2.0 actually tells us. Read the release for what it is: a major version bump whose entire changelog is one line. That is a meaningful signal in three directions:
Where the value actually sits — now with a caveat. The bundle remains a thin configuration and DI wrapper around a SAML 2.0 SP toolkit (historically the OneLogin php-saml lineage). The real protocol work — AuthnRequest construction, SAMLResponse parsing, XML-DSig validation, assertion decryption, metadata generation — lives in that underlying library. Treat the bundle as a reference implementation of SP configuration and controller flow, not a dependency. The v2.0 caveat: the configuration shape being referenced is now Symfony 4-era, so its SP knobs (entity ID, ACS URL, SLO endpoints, signing/encryption certs, NameID format, attribute mapping) should be checked against the current toolkit's schema rather than copied. The conceptual checklist survives; the literal config keys may not.
Integration feasibility — still low, marginally improved but not decision-changing.
| Dimension | Assessment |
|---|---|
| Composer installability into Laravel | Technically possible, practically useless; no Laravel bootstrapping; Symfony 4 DI assumptions |
| Last release | v2.0 — Symfony 4 support only. Symfony 4 EOL Nov 2023; still no PHP 8.x or Symfony 5.4+/6.x/7.x statement |
| Stars / dependents | ~16 / 0 — no community validation, no downstream bug reports, no de facto support |
| Score 0.23 | Bottom-tier maturity signal; a one-line major release does not move this |
| License | MIT — permissive; forking and vendoring remains legally clean |
| v2.0 breaking surface | Major bump, undocumented changes. Irrelevant to us (we consume none of it), but disqualifying for a fork-and-own path |
Technical risk — still concentrated in the security-critical path. SAML is an XML-signature and assertion-trust protocol; the failure mode is an authentication bypass, not a broken page. The v2.0 release says nothing about the pinned toolkit version, so the core risk is unresolved:
composer audit / advisory coverage — nobody is filing CVEs against a 16-star bundle with zero dependents.mcrypt remnants, typed signature changes in transitive deps) are untouched by a release that targets Symfony 4-era PHP baselines.Key questions — one is now answered, the rest stand:
Recommendation: reject as a direct dependency; retain, with reduced confidence, as an architectural reference. v2.0 does not change the decision — it reinforces it. The decisive signals from the prior assessment (0.23 score, zero dependents, no Laravel surface) are untouched, and the new release adds two of its own: it targets an EOL framework generation, and it ships as an undocumented major bump. The opportunity: 11.42 reading still points the right way — the gap is real (no well-maintained, Laravel-native SAML SP), which argues for a thin internal wrapper over a maintained toolkit, not adoption of a Symfony bundle that has just demonstrated it is not tracking supported runtimes.
Stack fit. Still no direct fit; v2.0 changes nothing here. The pragmatic pattern remains a three-layer decomposition:
php-saml current major, or lightsaml), owned via explicit Composer constraint and monitored through composer audit.SamlServiceProvider, config publishing, a guard or middleware that resolves the assertion to an Eloquent user, and an event for post-auth hooks.The bundle's contribution is confined to the conceptual configuration checklist and the ACS/SLS controller flow; with v2.0 the literal Symfony 4 config shape should be re-validated against the current toolkit before reuse. Budget roughly 1–2 engineer-weeks for a competent PHP dev to build the bridge.
Migration path. Still assume greenfield SP integration — zero dependents means there is almost certainly no existing pdias deployment to migrate from. The v2.0 major bump is a reminder that anyone who did deploy it now faces an undocumented upgrade; not our problem, but worth citing in the decision record.
Compatibility notes. If any evaluation path touches the bundle directly, v2.0 narrows rather than widens the matrix: it asserts Symfony 4, which is EOL, and says nothing about Symfony 5.4 LTS, 6.x, or 7.x, nor about PHP 8.1/8.2/8.3. Expect failures on the DI extension and on deprecated dynamic-property usage before you reach the protocol layer. Verify against the current Laravel LTS and supported PHP versions, not against the bundle's stated target.
Sequencing. Enforce gates; do not let this run as a straight-line build.
simplesamlphp test IdP). Produce a signed AuthnRequest and validate a signed response end-to-end. Output: go/no-go on the toolkit. Explicitly include a check of the toolkit's pinned version and its advisory history — the thing v2.0 left undisclosed.pdias decision with the v2.0 evidence (EOL target, undocumented major bump, zero dependents) and name an owner.Maintenance. v2.0 does not create an upstream to lean on; it creates the illusion of one. A single one-line release after six years, targeting an EOL Symfony generation, with no migration notes, is not a maintenance cadence — and the total absence of Symfony 5.4/6.x/7.x and PHP 8.x support tells us the next release, if any, is not on a schedule we can plan against. Adopting the bundle still transfers ~100% of maintenance to us on day one, now with an undocumented major-version delta attached. The bridge approach retains the better profile: the toolkit upstream absorbs protocol churn, and we own only config and mapping code — a small, readable surface one engineer can maintain. Budget ~2–4 engineer-days per quarter for dependency bumps and certificate/metadata hygiene, plus a mandatory review whenever the toolkit publishes a security release.
Support. Still no vendor, no SLA, no maintainer responsiveness, no triage community. v2.0 slightly dilutes the "abandoned" framing but does not create a support relationship — there is no issue-triage signal, no backport policy, and no security disclosure process. Internal support falls to whoever built the bridge, which argues for documenting it as a platform component with a named owner and a runbook, not an app-team responsibility. "Login is broken for everyone" needs a paged owner and a documented break-glass path.
Scaling. Unchanged. SAML SP traffic is low-volume and bursty — one assertion exchange per session, so per-request protocol cost is negligible relative to normal app load. Real scaling concerns are stateful: SP-initiated request ID tracking (for replay and InResponseTo validation) needs a shared store across multiple nodes, and IdP-initiated flows must tolerate concurrent logins. Session store sizing, not SAML parsing, is the capacity lever.
Failure modes to instrument from day one. These are the incidents you will actually have:
NotBefore/NotOnOrAfter rejections; enforce NTP and publish the tolerance.mail to emailAddress; user provisioning silently returns null and JIT creates broken accounts. Validate required attributes and fail loudly with a named missing claim.Ramp-up. Plan for 2–3 weeks before the owning engineer is productive: SAML's binding types, signature placement, and metadata semantics are not learnable from code alone. Ramp on the bundle path is now slower than before, not faster — the documentation is thin, the code targets an EOL Symfony, the dependencies are stale, and the community corpus is empty (no blog posts, no Stack Overflow, and a one-line changelog that explains nothing). The bridge path ramps faster because the toolkit has real documentation and an active issue tracker. Add explicit handover artifacts — runbook, test IdP setup, certificate inventory, and the assertion fixture corpus — or you will re-derive this knowledge at the first outage, at the worst possible time.
Bottom line for the portfolio decision: v2.0 is a signal to re-confirm, not revisit. Treat pdias/saml-bundle as documentation, not a dependency. Fund a thin in-house Laravel bridge over a maintained SAML toolkit, or buy the problem away with a managed broker if the timeline is the binding constraint.
How can I help you explore Laravel packages today?