Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Symfony Bridge Laravel Package

lightsaml/symfony-bridge

Symfony bridge for LightSAML that integrates SAML 2.0 service provider authentication with Symfony Security. Provides configuration, firewall integration, and user loading so Symfony apps can add SSO via existing SAML identity providers.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This bundle is a thin DI/security integration layer over lightsaml/lightsaml, wiring SP and IdP roles into the Symfony container and firewall. For a TPM the relevant framing is that it is not a stand-alone capability — its fitness is entirely derivative of the underlying LightSAML library and of your Symfony major version. The bundle is genuinely differentiated in one respect: LightSAML models both Service Provider and Identity Provider roles, whereas the mainstream maintained alternative (hslavich/oneloginsaml-bundle on onelogin/php-saml) is SP-centric. If the requirement is "our Symfony app must act as an IdP," this is one of very few in-process PHP options; if it is "our app must log users in via corporate Okta/Entra/Azure AD," the architecture fit is poor because better-supported SP paths exist.

Integration feasibility. Low-to-moderate, and dominated by the dependency graph rather than the bundle's own code. Signals: score 4.84/10, 0 dependents on Packagist, prior last release 2018-05-23, opportunity 38.12. Release 1.3.0 is the first publication since then, and its entire changelog is one line: ligthsaml.profile.* profile services made public. That is a container-visibility fix, not a platform-support release — it is what you do to restore $container->get() access and enable service overriding in tests, and it is the kind of change that typically accompanies a Symfony 4+ compatibility complaint. It does not by itself move the PHP-version or Symfony-version constraints, and no dependency bumps or PHP 8 fixes are announced. On Symfony 5/6/7 composer require should still be expected to fail on constraint resolution, and PHP 8 still introduces hard breaks in the SAML stack (removal of libxml_disable_entity_loader, XML canonicalization/signature handling in robrichards/xmlseclibs, dynamic-property deprecations). Assume a fork-and-upgrade, not an install — but the fork is now slightly cheaper.

Technical risk. High, still concentrated in three places, with one modest improvement. (1) Security-critical, thinly maintained code. SAML signature validation and XML parsing are a classic attack surface (signature wrapping, XXE, assertion replay). A single-commit release after seven years of silence is a pulse, not a maintenance program: there is no security policy, no advisory history, and no cadence we can plan platform upgrades against. Because the package is effectively dormant it will not surface in composer audit / roave/security-advisories — a false sense of safety that is worse than a noisy alert. Note the service name still reads ligthsaml (transposed), which suggests the change was made quickly and lightly reviewed; treat it as source material, not as a signal of renewed stewardship. (2) Single-maintainer dormancy of the core library, not just the bridge — 1.3.0 touches the bridge only. (3) Zero dependents means no community forks, no incidental regression coverage, and no one else paying down the PHP 8 upgrade. MIT licensing remains the key mitigating factor: an internal fork is legally and practically clean.

Key questions.

  • Are we the SP or the IdP? This single answer decides whether this package is shortlisted or eliminated, and 1.3.0 does not change it.
  • Target Symfony and PHP versions — do we need PHP 8.2+/Symfony 6+? If yes, budget explicitly for a fork. Did 1.3.0 widen composer.json constraints at all, or only change service visibility? Inspect the diff before assuming any upgrade headroom.
  • Is this net-new or already in production? Existing production usage changes the conversation from "evaluate" to "contain and migrate."
  • What is our appetite for owning a security-sensitive fork, including crypto/XML review and CVE response?
  • What is the IdP landscape (one tenant or many), and does metadata rotation happen on a schedule we control?
  • Does 1.3.0 signal a returning maintainer or a one-off patch? One data point cannot answer this; ask directly and set a re-evaluation trigger (e.g. no further release in 6 months → confirm dormant).

Integration Approach

Stack fit. Poor on a modern stack out of the box, workable as a vendored fork. The realistic decision tree: on Symfony 4.4/PHP 7.4 with an already-working integration, keep and freeze; on Symfony 5+ or PHP 8+, treat the bundle as source material rather than a dependency. 1.3.0 softens the edge for the "extend, don't replace" path: public profile services make the bundle far easier to decorate, stub in integration tests, and override in a fork, which materially reduces the cost of the Fork option below — but it does not remove the constraint work.

Migration path. Three options, in ascending order of effort:

  1. Replace (preferred for SP). Move SP duties to hslavich/oneloginsaml-bundle (maintained, PHP 8/Symfony 6-7 support) or to SimpleSAMLphp as a sidecar container, leaving Symfony as the application. Both have documented SP-initiated and IdP-initiated flows and current advisory coverage.
  2. Isolate. If IdP behavior is genuinely required, run SimpleSAMLphp as a separate service and let Symfony consume it over HTTP rather than embedding SAML in the app process. This decouples the risky code from the deployable.
  3. Fork. Vendor the bridge plus LightSAML under an internal/ namespace: bump constraints, fix PHP 8 incompatibilities, add PHPUnit coverage around signature validation and metadata parsing, and pin with a replace in composer.json so the dormant upstream cannot be pulled transitively. Rebase onto 1.3.0 rather than the 2018 tag — the public-service change saves you one patch and gives tests a supported seam.

Compatibility. Assume breakage at the container-compile and firewall-listener layers on Symfony 5+, and at the XML/crypto layer on PHP 8. Verify the transitive set explicitly — robrichards/xmlseclibs, symfony/framework-bundle, symfony/security-bundle, psr/* — since those constraints are what will actually block the upgrade, not the bridge's own code. Make the 1.3.0 diff review an explicit gate: confirm whether composer.json constraints, LightSAML pins, or the compiler pass changed, because the changelog line will not tell you.

Sequencing.

  1. Two-day spike: read the 1.3.0 diff, then attempt install on the real target stack in a throwaway branch; record exact constraint failures. Do not estimate upgrade effort before this.
  2. Decide SP vs IdP, and lock the replacement decision in an ADR with a named owner.
  3. If replacing: stand up the new SP path behind a feature flag on a single tenant, run parallel logins, compare assertion attributes.
  4. If forking: fork from 1.3.0, add tests, and only then re-point production.
  5. Decommission the old path with a defined certificate/metadata cutover window.

Operational Impact

Maintenance. The dominant cost, and it is not amortized — there is no upstream to absorb it. A fork means we own PHP/Symfony upgrades indefinitely, plus the SAML crypto surface. Budget roughly a steady 5–10% of one engineer's time, spiking hard at every PHP or Symfony major. 1.3.0 does not change the arithmetic; if anything it clarifies it, since a seven-year gap followed by a single-line release is the profile of a codebase nobody is systematically maintaining. Add an explicit owner: "the team that touched it last" is not an owner, and an unowned security-sensitive fork is how outages happen. Track a re-evaluation date rather than assuming either abandonment or revival.

Support. Effectively zero external support. Community answers are stale (2018-era), and the vendor-equivalent is whoever on our team last read the code. Contrast with onelogin/php-saml or SimpleSAMLphp, where the maintainers issue security releases and there is an active issue tracker. Also expect composer resolution failures to look like infrastructure problems to on-call and route to the wrong team — document the fork and its ownership in the runbook.

Scaling. The application-level cost is small and predictable: RSA signature verification is sub-millisecond to low-milliseconds per assertion, and SAML exchanges happen at login, not per request. The real scaling constraints are architectural: SP-initiated flows carry per-session state, so any horizontally scaled deployment needs shared session storage (Redis/DB) or sticky sessions; and metadata refresh plus certificate rotation must be automated rather than a manual file drop, or it becomes a recurring after-hours incident.

Failure modes.

  • Silent security regression — no advisories means we learn about a signature-wrapping flaw from a pentest or a breach, not from a feed. Highest-severity, lowest-visibility failure.
  • False reassurance from a lone release — a stakeholder sees "1.3.0 shipped" and downgrades the risk register entry; the underlying dependency and crypto surface are unchanged.
  • PHP/Symfony upgrade deadlock — the fork blocks a platform upgrade until it is itself upgraded, which delays unrelated work.
  • Certificate/metadata rotation — expired IdP signing certs cause total, immediate login outage with a cryptic validation error. Mitigate by monitoring expiry and alerting 30+ days out.
  • Clock skew and canonicalization drift — assertion validation failures that reproduce intermittently and only on some hosts.
  • Dependency graph poisoning — a pinned, dormant package prevents composer update across the whole application, delaying security patches elsewhere.
  • Container surface change — newly public services widen what application code can reach; confirm nothing in our codebase starts depending on ligthsaml.profile.* internals, or the fork/replacement exit gets harder.

Ramp-up. Steep relative to value. Effective work here requires SAML domain knowledge (bindings, assertion profiles, signature and canonicalization semantics), Symfony security-firewall internals, and enough crypto literacy to reason about XML-DSig — a rare combination. Documentation is a bundle README, not an integration guide; the working knowledge lives in the code. Public profile services in 1.3.0 shave some of the cost — container access and test seams make the wiring legible and stubbable without editing vendor code — but the protocol and crypto learning curve is unchanged. Realistically, a new engineer needs 2–3 weeks before they can safely modify the integration, and there is no one to ask.

TPM verdict. Shortlist only if the requirement is genuinely IdP-role and a decoupled SimpleSAMLphp deployment has been ruled out; otherwise this is a contained technical-debt item, not an adoption candidate. Release 1.3.0 is a net positive but a narrow one — it improves extensibility and testability for anyone forking, and it removes the "no release since 2018" talking point, without addressing PHP 8, Symfony 5+, dependency currency, or security-response posture. The maintenance cost — not the license or the feature set — remains the deciding factor.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator