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

Laravel Config Sso Laravel Package

cleaniquecoders/laravel-config-sso

Laravel Config SSO centralizes single sign-on configuration for Laravel apps, making it easier to manage SSO settings, providers, and environment-specific options from one place—ideal for teams standardizing authentication across multiple applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • laravel-config-sso is a Laravel package that owns an SSO configuration surface exposed as an admin screen at /admin/settings/sso, implemented as a Livewire component rendering Flux (Heroicons) components.
  • Fit is high for applications already standardized on Laravel + Livewire + Flux: the package occupies an existing layer rather than introducing a parallel UI stack.
  • Fit is materially lower for Blade/Tailwind-only applications. Adopting Flux for a single settings screen is a disproportionate dependency, and Flux is a commercial Livewire UI kit — a procurement/licensing consideration, not just a composer line.
  • Architectural caution: SSO configuration is a security-sensitive concern. Hosting it in a web admin UI raises the blast radius versus env/config-file driven setup. The package is best treated as "operator convenience over an existing config layer," not as the sole source of SSO truth.
  • 1.1.0 materially widens the package's architectural footprint. It now participates in user provisioning and account linking — it matches IdP assertions to local users by email, mutates credentials, and sets email_verified_at. It is no longer only a settings screen; it is an authentication control. Fit must now be judged against the host app's identity model, not just its UI stack.

Integration feasibility

  • Integration mechanics remain conventional: composer require, publish config, service provider registration, route exposure. No migration is implied by the release notes themselves — but 1.1.0 has data consequences (rotated passwords, flipped email_verified_at) that run against existing user rows.
  • 1.1.0 is a minor bump carrying a behavioral change in the auth path. Semver-clean on surface (no removed APIs, new event is additive), but the account-claiming behavior alters outcomes for existing users. Treat it as behavior-changing and regression-test the login flow, not just the composer resolve.
  • The forceFill fix for email_verified_at is a correctness fix but also a bypass of mass-assignment protection — a deliberate, narrow exception that integrators should be aware of in their own user model audit.
  • Principal feasibility unknowns remain dependency constraints (Laravel, PHP, Livewire, Flux majors) and whether IdP secrets are stored encrypted or delegated to config — still unanswerable from release notes.

Technical risk

  • Pre-account-takeover is now addressed — this is the headline. In 1.0.x, an attacker could register a local account with a victim's email, leave it unverified, and retain control when the victim later signed in via SSO. 1.1.0 rotates the password and remember token and marks the email verified on claim. Anyone who spiked or deployed 1.0.x should treat that environment as previously exposed and audit for accounts created-but-unverified with corporate email domains.
  • The new fix's trust boundary is inverted and unverified. The package now trusts the IdP's assertion of email ownership enough to hand over a local account. If the IdP asserts an email it does not verify (or the package does not check the email_verified claim), the claim path becomes an escalation path. This is the single most important open question in the release.
  • Residual credential survival. Rotating password and remember token does not necessarily invalidate active sessions, nor does the package revoke 2FA enrollment, API tokens, or passkeys — the release notes are explicit that this is delegated to a UnverifiedAccountClaimed listener. If we do not implement that listener, a hostile pre-registered account's app-specific credentials outlive the claim. The security fix is therefore incomplete by default and complete only with integration work on our side.
  • Silent credential rotation is a behavior change with user-visible consequences. A legitimate user with an unverified local account who signs in via SSO will have their password rotated without notice; if they also used password login, that path breaks. No notification mechanism is described.
  • UI-only failure class still escapes test coverage (carried forward). The 1.0.1 defect (Flux component [icon.ellipsis] does not exist) hard-failed the admin route at render time; HTTP tests cannot catch it. The FluxIconTest static guard closes that instance, not the class.
  • Coupling to Flux naming conventions remains: a Flux major upgrade can reintroduce icon/component drift.
  • Dev-environment fragility (stale Testbench cache causing 500s on every route under composer serve) is contributor-facing but distorts evaluation.
  • Security posture of the SSO admin surface — route authorization defaults, secret storage, audit trail — is still unverified, and is now joined by a second unverified security surface: the account-claim path.
  • Maturity signal improves: the maintainer shipped a security fix, a regression-relevant event, and a correctness fix in a scoped minor release. A 1.0.x line that shipped both a route-breaking UI regression and a pre-account-takeover path still argues for a "verify, don't assume" posture.

Key questions

  1. Supported Laravel, PHP, Livewire, and Flux version ranges — and does it require Flux Free or Flux Pro?
  2. Are IdP client secrets and certificates stored encrypted at rest, or read from config/env?
  3. What middleware/gate protects /admin/settings/sso by default, and is that opt-in or opt-out?
  4. Single IdP or multi-IdP/multi-tenant?
  5. Is the 1.0.x/1.1.x public surface (config keys, routes, component names, auth behavior) committed to semver? 1.1.0 changed sign-in outcomes under a minor bump — is that the intended contract?
  6. Does the package ship a rendered-route smoke test (browser or snapshot) that would catch the next non-icon render failure?
  7. Is there an upstream support commitment, or is this effectively self-supported?
  8. Does the claim path require the IdP to assert a verified email? What happens if the IdP returns an unverified or absent email_verified claim?
  9. Is account claiming configurable — can it be disabled, restricted by domain/allowlist, or gated behind admin approval?
  10. Does UnverifiedAccountClaimed fire before session establishment, and can a listener abort the sign-in?
  11. Are existing active sessions for the claimed account invalidated? Password rotation alone may not terminate them.
  12. What is the documented set of credentials we are expected to revoke in the listener (2FA, API tokens, passkeys — anything else, e.g. personal access tokens from other packages, webhooks, OAuth grants)?

Integration Approach

Stack fit

  • Best case: host app already runs Livewire + Flux with a compiled Tailwind pipeline. Marginal UI cost is near zero — but 1.1.0 means stack fit is no longer sufficient; the app's identity model must also fit (email as a linking key, tolerance for password rotation, presence of 2FA/API tokens to revoke).
  • Acceptable case: app runs Livewire but not Flux — additive UI dependency, one more library to version-manage.
  • Poor case: app is Blade/Tailwind only, or has a strict "no email-based account linking" identity policy. Defer; the same SSO config can be expressed in config files without importing a UI kit, and the claim behavior cannot be opted out of until question 9 is answered.

Migration path

  • No schema migration. Pin ^1.1 — do not accept 1.0.x as a floor, given the pre-account-takeover path it carries.
  • If a 1.0.x spike branch exists, rebase it rather than upgrading in place, and explicitly exercise the account-claim scenario as part of the rebase.
  • Because the auth behavior changed under a minor bump, do not infer "no action needed" from the version number. Validate against the app's existing composer.lock and existing users rows (particularly any unverified accounts with corporate emails).

Compatibility

  • Resolve the package against the app's current Livewire and Flux majors before any code is written; the 1.0.1 → 1.0.2 defect is direct evidence that these versions gate correctness.
  • Confirm compatibility with the app's user model: mass-assignment configuration, existing email_verified_at conventions, and whether the app already has an account-linking policy that this package would override.
  • Prefer the compiled Tailwind + Flux asset path over CDN for production: CDN styling conflicts with CSP posture and offline/air-gapped environments; the package supports both.

Sequencing

  1. Spike branch: composer require at ^1.1; confirm dependency resolution; do not merge to main.
  2. Security audit of the claim path first — establish whether the package verifies the IdP's email-verified assertion, and whether claiming can be constrained. If it cannot, escalate before writing integration code.
  3. Audit existing users rows for unverified accounts on corporate domains; decide remediation for any found.
  4. Publish config; mount the admin route behind an explicit authorization gate; verify the settings screen renders in a real browser (not just an HTTP assertion).
  5. Implement a UnverifiedAccountClaimed listener: revoke 2FA, API tokens, passkeys, and any app-specific credentials; log to the audit trail; queue a user notification that their password was rotated.
  6. Verify whether active sessions for a claimed account are terminated; if not, force logout in the listener.
  7. Configure one IdP in staging; validate a full login round-trip, a failed-assertion path, and a deliberate pre-account-takeover scenario (register unverified local account on a test email → SSO in → confirm rotation, revocation, and notification).
  8. Add our own rendered-route smoke test (browser or snapshot) around the admin screen to cover the render-only failure class the package cannot.
  9. Confirm break-glass local auth still works with the package installed, including after a password rotation event.
  10. Production rollout behind a feature flag; keep the config-file path available as rollback.

Operational Impact

Maintenance

  • Small, actively patched package; the 1.0.1 → 1.0.2 turnaround (docs + regression test) and the 1.1.0 security fix suggest a maintainer who responds to reports and takes security reports seriously. That is a meaningful maturity upgrade over the prior read.
  • Our maintenance load is now two-tracked: transitive dependency churn (Livewire/Flux) plus the UnverifiedAccountClaimed listener, which is our code and our responsibility to keep in sync as the app adds credential types.
  • The added docs/ tree plus a slimmed README lowers long-term knowledge concentration. 1.1.0 does not extend it — the security behavior change is documented only in release notes, so internal documentation of the claim flow and revocation policy is on us.

Support

  • Upstream remains a single-vendor, small-team project with no stated SLA. Assume self-support for anything time-critical.
  • SSO defects are authentication defects. The failure mode "admins cannot reach the settings screen to fix SSO" still requires a non-UI remediation path (env/config override).
  • New support category: password-rotation tickets. Every claimed unverified account loses its password silently. Without a notification in our listener, this surfaces as "my password stopped working" tickets with no obvious cause. Budget for it and instrument the event.
  • Support runbooks must now cover account-claim incidents: how to identify claimed accounts (audit log), how to reverse a bad claim, and how to escalate a suspected hostile pre-registration.

Scaling

  • Low concern on the UI side — infrequent, single-operator surface.
  • The claim path is per-login and bounded, but it does touch user rows transactionally and fires an event our listener will use to revoke credentials. If revocation is synchronous and does remote calls (e.g. API token service, passkey store), watch login latency; make the listener async where possible.
  • Becomes a real consideration only if the package is used as a shared broker across many tenants or IdPs — still not evidenced.

Failure modes

  • Hostile pre-registration (largely mitigated, not eliminated) — 1.1.0 rotates credentials on claim, but residual access survives if we do not implement the listener or if active sessions are not invalidated.
  • IdP-sourced email spoofing — if the package claims an account on an unverified IdP email assertion, the fix becomes the attack. Highest-severity unknown in this release.
  • Silent password rotation without notification — user-visible breakage with no signal; support load and trust erosion.
  • Orphaned credentials post-claim — 2FA, API tokens, passkeys left intact by default; the event is a hook, not a guarantee.
  • Render-time UI regression blocks configuration — observed in 1.0.1. Static icon guard covers the known case; the general class (any Flux component name or prop drift) is still only catchable with a browser-level test.
  • Operator lockout — if SSO becomes the only auth path and the config UI is the only way to change it, a UI defect or bad save strands operators. Mitigate with break-glass local auth and file-based config as source of truth.
  • Secret exposure — unverified storage of client secrets in the database remains the highest-impact unknown on the configuration side.
  • Dev-environment confusion — stale Testbench cache producing 500s on every route during evaluation; clear caches before drawing conclusions.
  • Dependency drift — a Flux major upgrade silently reintroduces icon/component mismatches.

Ramp-up

  • A mid-level Laravel developer should reach a working staging integration in roughly one day given the docs tree; the README screenshots reduce ambiguity about expected output.
  • Add roughly half a day for Flux licensing and asset-pipeline alignment if the app is not already on Flux.
  • Add roughly one day for the security work: claim-path audit, UnverifiedAccountClaimed listener with credential revocation, session invalidation, notification, and the deliberate pre-account-takeover test.
  • Treat secret-storage and route-authorization review as a separate security task, not part of the integration estimate.
  • Net TPM position: still viable and still low-code-volume, and now more trustworthy on security than 1.0.2 — the release closes a real takeover path. But it converts the package from a configuration UI into an authentication control, so the gating prerequisites increase from two to three: (1) a Flux-capable stack, (2) a verified story for secret storage plus admin-route authorization, and (3) a verified story for the account-claim path — IdP email verification, claim configurability, and a listener we own that actually revokes credentials.
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.
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
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle