corbado/client-php
Corbado client for PHP adds passwordless authentication to Laravel/PHP apps, supporting passkeys and email-based login flows through Corbado’s APIs. Integrate secure, phishing-resistant sign-in without managing passwords.
Architecture fit. corbado/client-php is a thin HTTP client for Corbado's hosted passkey service, not a Laravel-native package. Expect no ServiceProvider, no publishable config, no facade, no Blade/Inertia scaffolding — integration means wrapping it ourselves. Architecturally that means your auth flow gets a hard runtime dependency on a third-party API on the login hot path, which is a meaningful coupling decision for a Laravel app that otherwise owns its auth stack.
Integration feasibility. Mechanically easy (composer require, a few method calls around registration/login ceremonies). The friction is not the code — it's the surrounding ceremony wiring: relying-party ID and origin configuration per environment, session/state correlation between the browser and the Laravel backend, and attestation policy choices. That work exists regardless of SDK and is where the real effort sits. The SDK being archived makes feasibility time-boxed: it works today, but Composer constraints against PHP/Laravel majors will rot.
Technical risk.
composer.json can block a Laravel major upgrade for the whole app — an underappreciated org-level cost.Key questions.
web-auth/webauthn-lib (self-hosted, maintained) or a first-party/community Laravel passkey package?Stack fit. Treat it as an external service, not a Laravel package. Put it behind an internal interface (PasskeyProvider) with a single adapter implementation, bind it in a service provider we write, and keep every SDK symbol inside that one namespace. This makes the vendor swappable and lets us stub it in tests. Never call the SDK directly from controllers.
Migration path. Do not make passkeys the primary factor on day one. Sequence: (a) optional passkey enrollment for an internal or low-risk cohort behind a feature flag; (b) passkey as a secondary login option with password/email-OTP always available; (c) only then consider promoting it. This bounds blast radius and gives a clean rollback that doesn't strand users.
Compatibility. Before any code, run a throwaway Composer resolution against our actual composer.json — the likely failure is a pinned Guzzle/PSR-18 version colliding with our HTTP stack, or a PHP constraint that predates 8.2. If it doesn't resolve cleanly against our current Laravel, the decision is effectively made for us.
Sequencing.
Maintenance. Adoption means ownership: fork the repo into our org, vendor it as an internal Composer package, and commit to applying dependency and security updates ourselves. That is a recurring cost, not a one-off — budget it explicitly (roughly a few days per year of baseline upkeep, more on PHP/Laravel majors). If nobody owns the fork, don't adopt.
Support. No upstream maintainer for the client. Corbado may still support the API; the SDK is community/frozen. Our team becomes first-line support for all SDK-level issues, and the 115-star community won't help much.
Scaling. The SDK itself is trivial; scaling is a function of Corbado's API. Every passkey ceremony is a network round trip on the authentication path — that's added latency at exactly the moment users are most sensitive to it. Plan explicit timeouts, a circuit breaker, and automatic degradation to password login on provider failure. Cost scales with MAU/authentications, so model pricing at 2–3× current volume, not today's.
Failure modes.
.env/vault, rotation runbook, and per-environment keys.Ramp-up. Developer ramp-up is genuinely small — the public surface is a handful of calls, so a mid-level dev is productive in a day or two. The real learning curve is WebAuthn domain configuration and operational runbooks, not the SDK. The on-call cost is the bigger hidden item: add a runbook covering "passkey login failing for a subset of users," including how to diagnose provider-vs-config-vs-client issues and how to steer users to fallback auth.
How can I help you explore Laravel packages today?