sirwaddles/steamauth
SteamAuth is a Laravel package that adds Steam OpenID authentication to your app. It handles Steam login redirects, validates OpenID responses, and retrieves the authenticated user's Steam profile data for easy account linking.
Architecture fit. The package is a Symfony bundle (SteamAuthBundle), and the listing that classified it as a "Laravel/PHP package" is wrong in a way that matters for planning. There is no Laravel ServiceProvider, facade, or auth driver; the wiring assumes Symfony's DI container, security firewall, and HTTP kernel. Its only durable value for a non-Symfony team is the Steam OpenID 2.0 handshake logic — redirect construction, assertion parsing, signature/return_to validation — which is small (roughly 40–60 lines of real logic) and portable. Everything around that logic is scaffolding that does not travel.
Integration feasibility. Feasible as a reference implementation and as a legitimate extraction source (MIT license, no legal friction), not as an installed dependency. The realistic TPM framing: this is a design input to a small in-house build, not a procurement. For a Laravel stack the incumbent baseline is socialiteproviders/steam on top of laravel/socialite; the bundle should be benchmarked against that, not adopted instead of it.
Technical risk. High, and concentrated in the highest-blast-radius part of any product — authentication.
Key questions.
return_to/realm binding, replay protection) implemented in a class decoupled from Symfony's Request/Response, or is it glued to the kernel?claimed_id → SteamID64 extraction strictly (17-digit regex), and does it address account-linking collisions, or assume a greenfield user table?socialiteproviders/steam before assuming a fork is necessary?Stack fit. Poor as-is; the value proposition is inseparable from Symfony's Security component, which Laravel does not ship. Preferred order:
socialiteproviders/steam — Laravel-native, maintained, Socialite-compatible. Use the bundle only as a cross-reference for the handshake sequence.SteamAuthService bound in a Laravel ServiceProvider, with the OpenID round-trip behind an interface.Migration path. Treat this as logic extraction, not a package migration. Isolate the redirect-builder and assertion-validator, strip Symfony HTTP types in favor of PSR-7 or plain scalars, and wrap in a Laravel service. Keep Steam endpoints in config so they can be swapped if Valve changes them. Vendor extracted classes into app/ or a private package rather than installing the bundle transitively.
Compatibility. Expect friction: the bundle's composer.json likely pins Symfony components that conflict with what Illuminate already requires. Do not attempt to install it into the app dependency graph. Confirm the PHP floor against our runtime before any spike.
Sequencing.
socialiteproviders/steam; decide on evidence.steam_id).return_to tampering, session fixation, account-linking edge cases.Maintenance. We own the code the moment we extract or fork it. With one maintainer and zero dependents, upstream is not a support channel — assume the fork is permanent, pin dependencies, and vendor rather than track a moving target. Name an internal owner explicitly; diffuse ownership of auth code is how it rots.
Support. Effectively none: README-level documentation, no triaged issues, no SLA, no security contact. Any incident response is ours end to end — including a disclosure path we define ourselves.
Scaling. Not a concern. Steam auth is a low-QPS, per-login, stateless operation. The bottleneck is upstream, not compute: steamcommunity.com/openid availability and redirect latency sit directly on the login critical path.
Failure modes.
claimed_id parsing. Needs a uniqueness constraint and an explicit linking policy (Steam as secondary identity alongside email/OAuth is the right default for most gaming products — a data-model decision, not an auth-code one).Ramp-up. Moderate. Engineers need working familiarity with OpenID 2.0 semantics and Symfony bundle conventions to read the source — an unusual pairing on a Laravel team. Budget review time before committing; the extraction path is preferable precisely because it shrinks the surface a new engineer must learn. For stakeholders: frame the recommendation as "reference design, build the adapter in-house — roughly 1–2 engineer-days — and avoid an unmaintained dependency in a security-sensitive path," which protects the timeline while removing the vendor risk.
How can I help you explore Laravel packages today?