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 Biometric Auth Laravel Package

laranex/laravel-biometric-auth

laranex/laravel-biometric-auth adds WebAuthn-based biometric authentication to Laravel applications. Users can register and sign in with fingerprint, Face ID, or device passkeys, enabling secure passwordless login with straightforward Laravel integration. It streamlines credential setup and verifica...

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package implements a device-bound public-key credential flow: enroll a device public key, issue a single-use challenge, verify a signature over that challenge. That is a verifier-layer primitive, and it maps cleanly onto Laravel's service container, middleware pipeline, and guard/contract conventions. It is additive to our existing auth, not a replacement — it proves possession of a key held in iOS Secure Enclave / Android Keystore, and should be modeled as a step-up or second factor alongside password/session issuance rather than as the sole authentication mechanism.

Critically, this appears to be a bespoke challenge-signature scheme, not WebAuthn/FIDO2. That has product consequences: no attestation, no AAGUID/authenticator metadata, no RP-ID origin binding, no standard recovery semantics. If any roadmap item implies FIDO2 conformance (PSD2 SCA, NIST 800-63B AAL2, enterprise passkey interoperability), this package does not get us there and we should evaluate a WebAuthn library instead. Where it does fit well: native mobile clients where generating and storing a P-256 keypair is already a solved platform problem, and where we control both ends of the ceremony.

Integration feasibility. Likely high on a standard Laravel 10/11/12 application: publishable migrations, a trait or contract on the User model, and routes for register/challenge/verify. The real cost is not wiring, it is hardening and the mobile-side work. Estimate after a two-day spike: 3–5 dev-days for a working happy path, 5–10 additional days for negative-path tests, revocation, rate limiting, and audit logging. Feasibility drops sharply if the package hardcodes table/route names, assumes a specific JSON envelope, or does not expose verification as a callable — any of those forces a fork rather than an integration.

Technical risk. Crypto correctness is the dominant risk, and it is not the kind of risk that shows up in a demo. Specific things to verify: challenge entropy source; whether "single-use" is enforced by an atomic consume (delete-and-return or conditional update) or a non-atomic read-then-write that permits replay under concurrency; TTL handling and clock assumptions; constant-time comparison; explicit algorithm allow-listing so openssl_verify cannot be steered to weak curves or none; public-key parsing edge cases across PEM/JWK/DER; key rotation and revocation; multiple devices per user. Secondary risk is stewardship: 10 stars, a single maintainer, a recent first release, and no ecosystem pressure to patch a CVE. Bus factor is effectively one, and the opportunity score gives us no reason to expect that to change.

Enrollment is also the soft spot in the threat model. Without attestation, the server cannot distinguish a genuine Secure Enclave key from a key an attacker generated after compromising a password — so enrollment must be gated behind step-up authentication and an out-of-band confirmation, and treated as a security-sensitive event in its own right.

Key questions.

  • Is this WebAuthn-compatible or a custom scheme, and is that documented as a deliberate design choice?
  • Which signature algorithms are accepted, and is the allow-list enforced server-side?
  • Where are challenges stored, and is consumption atomic under concurrent requests?
  • Does the package expose contracts/interfaces we can implement, or does it own the User model and routes?
  • Are migrations publishable and non-destructive to an existing users table?
  • What is the test suite shape — are there negative tests for replayed, expired, and malformed signatures?
  • Is there a security disclosure policy and a named maintainer commitment?
  • How are device revocation and lost-device recovery handled, if at all?

Integration Approach

Stack fit. Strong on a Laravel API service serving native mobile clients. Weak for a browser-first product — for web, passkeys via a mature WebAuthn library dominate this on standards, browser support, and recovery UX. If our traffic is majority web, this package is the wrong tool regardless of code quality.

Migration path. Additive only, with a permanent fallback. Phase 0: throwaway spike branch, no shared dependencies. Phase 1: enroll devices for an internal cohort while password + TOTP remains authoritative; run verification in shadow mode (log pass/fail, do not gate) for 2–3 weeks to collect real-device failure rates. Phase 2: opt-in for staff, then GA with biometric as a second factor. Phase 3 (optional, and only with security sign-off): consider passwordless. Do not plan a phase that removes the fallback within the first year.

Compatibility. Pin an exact version and record the Laravel/PHP support matrix against our LTS target before committing. Confirm route registration is opt-in so we can wrap it in our own middleware for tenancy scoping, rate limiting, and audit. Check that the package's migration does not collide with our users-table conventions or our UUID/ULID strategy.

Sequencing.

  1. Spike + joint threat-model review with security (gate for everything else).
  2. Decide wrap-vs-fork: if contracts are extensible, wrap; otherwise fork early and own it, rather than building on a surface we will have to break later.
  3. Enrollment behind step-up auth plus email/push confirmation, with device naming and an audit trail.
  4. Revocation and lost-device self-service — ship this before enabling login, not after.
  5. Observability: counters for challenge issued / consumed / expired / verify-failed, per device and per user.
  6. Mobile handoff: documented key-generation, biometric-prompt, and secure-storage expectations for iOS and Android.

Operational Impact

Maintenance. Budget a named owner from day one. Assume upstream may go quiet: plan to vendor or fork (packages of this shape are typically 1–2k LOC) and treat it as first-party code with a pinned upstream for reference. Quarterly review against Laravel major releases and PHP deprecations; the package is likely to lag, so our fork will need to move first.

Support. There is no commercial support and no vendor to escalate to — our on-call is the support tier. That requires written runbooks before launch: user lost/replaced device, key invalidated by OS update or app reinstall, challenge expired, clock skew, and "biometric prompt unavailable/disabled" on the client. Support agents need a way to revoke a credential without a developer.

Scaling. Signature verification is CPU-bound and cheap in absolute terms, but it sits on the login hot path and is trivially amplifiable by an attacker. Put challenges in Redis with a TTL rather than a growing table, and rate-limit per user, per device, and per IP. A challenge-per-attempt store without expiry cleanup becomes an unbounded table — a slow, boring outage.

Failure modes.

  • Replay via non-atomic challenge consumption — the single most important thing to test.
  • Race between concurrent verification attempts for the same challenge.
  • TTL bugs from clock/timezone handling between client and server.
  • Client library upgrade changes key encoding, silently invalidating every enrolled device.
  • User reinstall wipes the keypair → permanent lockout if no fallback exists.
  • Cache or DB outage taking down login entirely if biometric becomes a required factor.
  • User enumeration through differentiated error messages — all failures must be uniform to the client.
  • Migration rollback leaving orphaned credential rows tied to real devices.

Ramp-up. A Laravel developer can read the package in about a day; genuine confidence in the crypto path, including negative tests, is roughly a week. Security review is 2–3 days and should be non-negotiable. The item most likely to be underestimated is the mobile work — key generation, biometric gating, secure storage, and re-enrollment UX across two platforms is realistically 1–2 sprints and is larger than the server integration by a wide margin.

Recommendation. Proceed as a time-boxed spike with a hard decision gate, not as an adopted dependency. Gates: threat model signed off, evidence of atomic challenge consumption, a maintained-fork plan with a named owner, and a confirmed mobile estimate. Given 10 stars and a single maintainer, we should assume ecosystem support will not arrive and price the fork into the plan from the start rather than discovering it at the first Laravel major release.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource