Technology·14 min read

Biometric Authentication: Face ID, Passkeys, and Beyond in 2026

Passwords are finally dying. Face ID, fingerprint sensors, and passkeys offer better security with less friction. Here is how to implement biometric authentication that actually works across platforms and meets compliance requirements.

Nate Laquis

Nate Laquis

Founder & CEO

How Face ID and Touch ID Actually Work Under the Hood

Most developers treat biometric authentication as a black box. You call an API, the user sees a face scan or fingerprint prompt, and you get a success or failure callback. That mental model works until something breaks, until a compliance auditor asks where the biometric data is stored, or until a client asks why Face ID "feels slow" on certain devices. Knowing what happens beneath the surface makes you a better architect.

Face ID uses a TrueDepth camera system that projects over 30,000 infrared dots onto the user's face and reads the resulting depth map. This is not a flat 2D photo comparison. It is a mathematical model of facial geometry stored as a 3D mesh. The system adapts over time, learning gradual changes like growing a beard or wearing new glasses. All of this processing happens on a dedicated neural engine chip, and the resulting biometric template never leaves the device. Apple's Secure Enclave, a hardware-isolated coprocessor with its own encrypted memory, stores the template and performs all matching operations. The main application processor never sees the raw biometric data. Not your app, not iOS itself, not even Apple's own cloud services.

Touch ID works on similar principles but with capacitive fingerprint sensing. The sensor reads the sub-epidermal layers of your fingerprint (the ridges beneath the skin surface), which makes it harder to spoof with a silicone mold than older optical scanners. Like Face ID, the fingerprint template lives in the Secure Enclave. On newer devices with the M-series chips, Touch ID shares the same Secure Enclave architecture as Face ID, meaning the security guarantees are equivalent.

Android's biometric stack uses a similar isolation model. The Trusted Execution Environment (TEE), or on Pixel devices the Titan M2 security chip, stores biometric templates separately from the main operating system. Samsung devices use their Knox Vault for this purpose. The key point for developers: on both platforms, your app never accesses the actual biometric data. You ask the operating system to verify the user's identity, and the OS returns a cryptographic assertion that verification succeeded. This design is what makes biometric auth viable from a privacy and compliance standpoint.

Modern smartphones displaying biometric authentication with Face ID and fingerprint sensors

Passkeys and WebAuthn: The Protocol That Ties It Together

Biometrics on their own are a local verification mechanism. They confirm that the person holding the device is the device's owner. But your server does not care about the user's face. Your server needs a cryptographic proof that a specific registered credential was used, and that the credential's private key signed a fresh challenge. That is where passkeys and the WebAuthn standard come in.

Passkeys are discoverable FIDO2 credentials that combine biometric verification with public-key cryptography. When a user registers a passkey on your app, the device generates an asymmetric key pair. The private key is locked inside the Secure Enclave (iOS) or TEE (Android) and can only be unlocked by a successful biometric check. The public key gets sent to your server. During login, your server sends a random challenge, the device unlocks the private key via biometrics, signs the challenge, and sends the signature back. Your server verifies it against the stored public key. No shared secret ever crosses the network.

The WebAuthn specification (maintained by the W3C and backed by the FIDO Alliance) defines exactly how this exchange works across browsers and platforms. It standardizes the JSON payloads, the attestation formats, the credential storage model, and the error codes. As of 2026, WebAuthn is supported in every major browser: Chrome, Safari, Firefox, Edge, and their mobile variants. The full passkeys and WebAuthn implementation guide covers the protocol details in depth, so here we will focus on the biometric-specific integration patterns.

What makes this combination powerful is that biometrics solve the "something you are" factor, while the cryptographic key handles the "something you have" factor. A passkey login is inherently multi-factor, even though the user only performs one action (a face scan or fingerprint touch). This matters for compliance frameworks like PSD2 Strong Customer Authentication, which require two independent authentication factors. A single passkey login can satisfy both requirements without forcing the user through a separate MFA step.

Implementing Biometric Auth on iOS with LocalAuthentication

Apple gives you two levels of biometric integration on iOS. The LocalAuthentication framework provides a simple "verify this user" API that returns a boolean. The AuthenticationServices framework provides the full passkey/WebAuthn flow with cryptographic key management. Which one you use depends on what you are protecting.

LocalAuthentication for On-Device Gating

If you need to gate access to a local feature (viewing sensitive data, confirming a transaction, unlocking the app after backgrounding), LAContext is your entry point. You create an LAContext instance, call canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics) to check availability, then call evaluatePolicy() to trigger the biometric prompt. The callback gives you a success boolean or an error code.

There are nuances that catch teams off guard. The LAContext.biometryType property tells you whether the device supports Face ID, Touch ID, or Optic ID (on Vision Pro). You should use this to customize your UI copy. Saying "Scan your fingerprint" on a device with Face ID confuses users. Also, you must add the NSFaceIDUsageDescription key to your Info.plist, or Face ID calls will fail silently. This string appears in the system permission dialog, so make it specific: "AppName uses Face ID to secure your account" is better than "For authentication purposes."

LocalAuthentication has a critical limitation: it only tells you that someone with enrolled biometrics unlocked the device. It does not prove identity to a remote server. There is no cryptographic output you can send to your backend. For server-verified authentication, you need passkeys.

AuthenticationServices for Passkey Registration and Login

For server-verified biometric auth, use the ASAuthorizationPlatformPublicKeyCredentialProvider class. You create a registration request with your server's challenge and relying party ID, present it via ASAuthorizationController, and the system handles the Face ID or Touch ID prompt, key generation, and iCloud Keychain sync. The response includes the public key, credential ID, and attestation object that your server needs to complete registration.

Login follows the same pattern using ASAuthorizationPlatformPublicKeyCredentialAssertionRequest. The system reads the stored passkey from iCloud Keychain, prompts for Face ID, signs the challenge, and returns the assertion. Your server verifies the signature against the stored public key. The entire flow takes under 2 seconds from the user's perspective.

One requirement that trips up teams: your app's Associated Domains entitlement must include a webcredentials entry matching your relying party ID, and you need a valid /.well-known/apple-app-site-association file hosted on that domain. Without this, passkey operations fail with cryptic errors. Test this configuration in staging before you ship.

Android Biometric Auth with BiometricPrompt and Credential Manager

Android's biometric story has matured significantly since the early fingerprint API days. The modern stack centers on two APIs: BiometricPrompt for local verification and Credential Manager for passkey-based server authentication.

BiometricPrompt for Local Verification

BiometricPrompt (in the androidx.biometric library) is the unified API for fingerprint, face, and iris recognition on Android. You build a PromptInfo object specifying the title, subtitle, and which authenticator types to allow. The BIOMETRIC_STRONG class requires hardware-backed biometrics that meet Android's Class 3 standard (a false acceptance rate below 0.002%). The BIOMETRIC_WEAK class allows Class 2 biometrics, which have a higher false acceptance rate but cover more devices.

For most apps, stick with BIOMETRIC_STRONG. The device coverage is broad enough in 2026 (every flagship and most mid-range phones since 2022 qualify), and the security improvement is worth the minor reduction in device compatibility. If you need to support older budget devices, allow DEVICE_CREDENTIAL as a fallback, which accepts the device PIN or pattern.

BiometricPrompt supports a CryptoObject parameter that binds the authentication to a specific cryptographic operation. You create a Cipher or Signature object backed by a key stored in the Android Keystore, pass it as the CryptoObject, and the biometric unlock authorizes that specific cryptographic operation. This is stronger than the basic boolean verification because a successful authentication is tied to a concrete key use, not just a "user is present" signal.

Credential Manager for Passkeys

For server-verified passkey auth on Android, the Credential Manager API (available on Android 9+ through Google Play Services) is the right choice. You create a CreatePublicKeyCredentialRequest with the WebAuthn options JSON from your server, call CredentialManager.createCredential(), and the system handles biometric verification and key generation. Passkeys sync across Android devices through Google Password Manager.

Android's Credential Manager also supports hybrid transport, which means users can authenticate on an Android device using a passkey stored on an iPhone (or vice versa) via the QR code and Bluetooth proximity flow. Your server-side code does not need to change for this. The Credential Manager handles the cross-device protocol transparently.

A practical note on testing: Android emulators in Android Studio do not support real biometric hardware, but they do have a simulated fingerprint sensor you can trigger from the "Extended Controls" panel. For production-level testing, you need physical devices. Samsung, Pixel, and OnePlus devices each have slightly different biometric UX flows, and the prompt animations and layout vary. Test on at least one device from each major manufacturer before release.

Server infrastructure and data center supporting secure biometric authentication backend

Liveness Detection and Anti-Spoofing

Biometrics are only as secure as their resistance to spoofing. A fingerprint scanner that accepts a gummy bear mold of someone's thumb, or a face recognition system fooled by a printed photo, provides a false sense of security. Liveness detection is the set of techniques that distinguish a real, present human from a replay attack, a mask, or a synthetic reproduction.

Platform-Level Liveness Detection

Apple's Face ID includes built-in liveness detection through its infrared depth mapping. The TrueDepth camera system requires a 3D face at the correct distance, with natural skin reflectance properties in the infrared spectrum. Printed photos, video playbacks, and even high-quality 3D masks fail because they do not replicate the infrared absorption and reflection patterns of living skin. Apple's liveness detection operates at the hardware level, and you get it for free when you use Face ID through LocalAuthentication or AuthenticationServices.

Android's story is more fragmented. Devices with structured-light face scanners (like the Pixel 4's Soli radar system, now discontinued) had hardware-level liveness detection comparable to Face ID. Most modern Android phones use camera-based face unlock, which is classified as BIOMETRIC_WEAK because it is more susceptible to photo-based attacks. This is why we recommend requiring BIOMETRIC_STRONG in your BiometricPrompt configuration. On most Android devices, BIOMETRIC_STRONG maps to fingerprint-only, which has its own hardware-backed anti-spoofing through capacitive sub-dermal sensing.

Application-Level Liveness Detection

For apps that need additional assurance beyond what the platform provides (banking, identity verification, healthcare), you can add an application-level liveness check. Vendors like iProov, FaceTec, and Jumio offer SDKs that perform active liveness detection: the user is asked to move their head, blink, or respond to randomized lighting patterns. The SDK analyzes the video feed for signs of presentation attacks (masks, deepfakes, injection attacks) and returns a confidence score.

iProov's Genuine Presence Assurance product costs roughly $1.50 to $3.00 per verification event at scale. FaceTec's 3D FaceScan SDK requires a $15,000 to $30,000 annual license for most commercial apps. These are real costs, but for regulated industries where a spoofed biometric could lead to fraud or a compliance violation, they are justified. For consumer apps outside of fintech and healthcare, the platform-level liveness detection is usually sufficient.

Deepfake and Injection Attack Threats

The emerging threat in 2026 is not physical spoofing but digital injection attacks. Attackers use modified camera drivers or virtual camera software to feed a deepfake video directly into the biometric capture pipeline, bypassing the physical camera entirely. This is particularly concerning on Android, where the camera stack is more open than on iOS. The application-level liveness SDKs from iProov and FaceTec include injection attack detection that verifies the video feed is coming from a genuine camera sensor, not a virtual device. If your threat model includes sophisticated attackers (financial services, government identity), invest in this layer.

Fallback Flows, Multi-Factor, and Compliance

Biometrics fail. Face ID does not work when the user is wearing certain respirators. Fingerprint sensors struggle with wet or heavily callused hands. Users switch phones and lose access to their passkeys temporarily. Your authentication system needs to handle every one of these scenarios gracefully, and it needs to do so while satisfying compliance requirements that vary by industry and geography.

Designing Fallback Flows

The first fallback is always the device passcode or PIN. Both iOS and Android allow you to configure biometric prompts with a device credential fallback. On iOS, use the .deviceOwnerAuthentication policy (instead of .deviceOwnerAuthenticationWithBiometrics) to allow passcode fallback. On Android, include DEVICE_CREDENTIAL in your allowed authenticators. This covers the vast majority of biometric failure cases without requiring any additional infrastructure.

For server-authenticated passkeys, the fallback hierarchy should be: primary passkey on current device, cross-device passkey via QR/BLE, recovery codes, and finally email-based recovery with re-enrollment. Each step is progressively less secure but prevents account lockout. The secure authentication architecture guide covers the design patterns for multi-tier fallback in detail.

Biometrics as Part of Multi-Factor Authentication

A passkey login is inherently two-factor: possession (the device with the private key) plus inherence (the biometric that unlocks it). For most applications, this satisfies MFA requirements without additional steps. But some regulatory frameworks demand an additional factor for high-risk operations. PSD2 Strong Customer Authentication, for example, requires two of three factors (knowledge, possession, inherence) for payment transactions. A passkey covers possession and inherence. For the "knowledge" factor in high-risk transactions, you might add a short numeric PIN that the user enters after biometric verification.

FIDO2 certification is the industry benchmark for biometric authentication interoperability. If your product targets enterprise or government customers, ask whether your authenticator (the device and OS) and your relying party server carry FIDO2 certification. Apple's and Google's authenticators are FIDO2 certified. Your server-side implementation can achieve FIDO2 conformance by passing the FIDO Alliance's conformance test suite, which costs around $4,000 per product submission.

GDPR and Biometric Data Classification

Under GDPR Article 9, biometric data processed for identification purposes is a "special category" of personal data with strict processing requirements. The good news: if you are using platform biometric APIs (Face ID, Touch ID, BiometricPrompt), the biometric data never reaches your servers. Your app receives a cryptographic assertion, not a faceprint or fingerprint template. This means your processing of biometric data is limited to the on-device verification, which typically falls under the user's consent given through the system prompt.

However, if you integrate a third-party liveness detection SDK that captures and processes facial images on your servers, you are processing biometric data under GDPR. You need explicit consent (not bundled with other permissions), a Data Protection Impact Assessment, and a lawful basis beyond legitimate interest. Illinois' BIPA (Biometric Information Privacy Act) goes further, requiring written informed consent and a published data retention schedule. Violations carry penalties of $1,000 to $5,000 per incident. California's CCPA and Texas' CUBI have similar but not identical requirements. Get legal review before deploying server-side biometric processing in the US market.

Security compliance documentation and audit frameworks for biometric data protection

Migration Strategy: From Passwords to Biometric Passkeys

If your app currently authenticates users with email and password, you cannot flip a switch and go biometric-only overnight. You need a phased migration that moves users toward passkeys without locking anyone out or overwhelming your support team.

Phase 1: Introduce Passkeys as an Optional Upgrade (Weeks 1 to 6)

Add passkey registration to your account settings page and post-login flow. After a successful password login, show a non-blocking prompt: "Unlock faster with Face ID. Set up a passkey in 10 seconds." Track enrollment rates by device type, OS version, and user segment. You want to identify any device or browser combinations where passkey registration fails before you push adoption harder. Expect 10 to 20% of active users to enroll voluntarily in this phase.

On the technical side, deploy your WebAuthn relying party server alongside your existing session management. Both auth methods should produce the same session token format, so downstream services do not need to change. Use conditional mediation (mediation: "conditional" in your WebAuthn get options) on the web login page so browsers with stored passkeys show the autofill-assisted passkey prompt automatically.

Phase 2: Make Passkeys the Default Login (Weeks 6 to 14)

Redesign the login screen to lead with passkeys. A large "Sign in with Face ID" or "Sign in with fingerprint" button should be the primary action. Password login moves to a secondary "Other sign-in options" link. For users who have enrolled passkeys, auto-trigger the biometric prompt when the login screen loads. This eliminates an entire tap from the auth flow and makes the experience feel effortless.

Run targeted email campaigns to the remaining password-only users. A/B test messaging. We have seen "Sign in 3x faster with Face ID" outperform security-focused messaging like "Protect your account from hackers" by a 2:1 margin in enrollment conversion. People care more about convenience than security when deciding to adopt a new auth method. Aim for 60 to 75% passkey adoption by the end of this phase.

Phase 3: Deprecate Passwords (Weeks 14 to 26)

For the remaining password-only users, implement a forced enrollment flow. At their next login, the user enters their password one final time, then the app walks them through passkey creation. Make it clear this is a one-time setup. After the passkey is created, disable password login for that account and show a confirmation screen with their recovery options (recovery codes plus a secondary passkey on another device).

Keep password hashes in your database for 90 days after deprecation as a safety net. After that window, delete them. Once passwords are fully retired, you can remove your password hashing infrastructure, your brute force rate limiters on the login endpoint, and your credential stuffing detection pipeline. The mobile security best practices guide covers the full checklist for decommissioning password infrastructure safely.

Costs and Timeline

For a mid-complexity app (web plus one native mobile platform), expect the full migration to take 4 to 6 months from planning to password deprecation. Development cost at agency rates runs $20,000 to $40,000 depending on the complexity of your existing auth system, number of platforms, and compliance requirements. If you are using a managed auth provider like Clerk or Auth0 that already supports passkeys, the development cost drops to $8,000 to $15,000 since you are primarily building the migration UX and fallback flows rather than the core WebAuthn implementation.

Build Biometric Auth That Users Trust

Biometric authentication is not just a security upgrade. It is a user experience transformation. The apps that get this right see measurable improvements: login completion rates jump by 20 to 40%, support tickets for password resets drop by 60 to 80%, and account takeover incidents fall to near zero. Those are not theoretical numbers. They come from our client projects and are consistent with data published by the FIDO Alliance and Corbado's passkey adoption reports.

The technical foundations are solid. Face ID and Touch ID provide hardware-backed biometric verification that never exposes raw data. The WebAuthn standard gives you a proven, interoperable protocol for server-verified authentication. Platform APIs on iOS and Android handle the hard parts: key management, biometric prompts, credential sync. Your job as a developer is to wire these components together correctly, design fallback flows that prevent lockouts, and migrate your users at a pace they can absorb.

If you are starting a new app, build with passkeys from day one. Skip the password infrastructure entirely and save yourself months of security engineering. If you have an existing user base on passwords, start Phase 1 this quarter. The longer you wait, the more users you accumulate on a fundamentally broken authentication model, and the more expensive the eventual migration becomes.

We build biometric authentication systems for web and mobile apps, from initial architecture through production deployment and user migration. If you want to get passkeys and Face ID integration right without burning weeks on platform quirks and compliance edge cases, book a free strategy call and we will scope the work together.

Need help building this?

Our team has launched 50+ products for startups and ambitious brands. Let's talk about your project.

biometric authentication Face ID passkeys guidepasskeys implementationWebAuthn biometricFace ID Touch ID integrationpasswordless authentication

Ready to build your product?

Book a free 15-minute strategy call. No pitch, just clarity on your next steps.

Get Started