After biometrics on mobile phones became mainstream, many native apps started using features like Face ID or Touch ID (or the Android equivalent) to protect app access. A face scan or a thumb on the sensor replaces the PIN the user would otherwise type on every launch. Both passkeys and local biometrics verify the user, so they look like the same tool, but they solve different problems. This article covers:
Enterprise Passkey Whitepaper. Practical guidance, rollout patterns and KPIs for passkey programs.
Even people who work in identity mix the two up, and the reason is the gesture: the user puts a finger on the sensor and gets in, in both cases. So the assumption is that both are the same thing. That assumption is usually why an internal champion cannot get a passkey project approved. If the app already asks for a fingerprint, the decision maker does not see a problem left to solve.
The one sentence to repeat in the meeting:
Local biometrics unlock something on this one device and our server never hears about it. With a passkey, the same gesture signs a challenge from our server, and that signature is bound to our domain, which is why a fake site cannot use it.
With local biometrics nothing leaves the device, so the server learns nothing and cannot trust anything. With a passkey there is a key pair: the private key stays on the device, the server holds the public key and checks a signature bound to your domain. A look-alike site cannot produce that signature, which is where the phishing resistance comes from.
Two details to have ready. First, biometric enforcement runs in opposite directions. A native app can require the biometric itself for its local unlock, while a passkey leaves that choice to the platform, so a device PIN satisfies user verification just as well. Second, using the login on the user's other devices is a separate property, which comes from a synced credential or from scanning a QR code with the phone that holds the passkey.
Two questions that always come back. The first one is "we already have Face ID in our app, so we are done": the app biometric decides whether to unlock a session that already exists, it says nothing about who created that session, so the credential behind it, usually a password or an OTP, is still the thing an attacker goes after. The second one is "so the biometric data goes to your servers?": no, the biometric never leaves the device in either model. With a passkey it unlocks the private key locally and only the signature leaves the device, and with a local unlock nothing leaves it at all.
If you need the longer version for the same audience, passkeys explained clearly walks through the mechanism without assuming a security background.
Recent Articles
Local biometric authentication methods, such as Apple's Face ID, Touch ID or Android's biometrics capabilities, use unique physical traits (e.g. facial features or fingerprints) to verify a user's identity. Unlike traditional PINs or passwords, which rely on something the user knows, biometrics rely on something inherent to the user. The user stops typing a code on every launch.
Subscribe to our Passkeys Substack for the latest news.
Before biometrics gained mainstream traction on mobile phones, apps that protected sensitive content often asked users to enter an additional PIN or password on every launch. That was more secure and more annoying, especially for a user who had already authenticated at the start of the session. Device-based facial recognition and fingerprint scanning replaced the code with a scan or a touch. If the biometric check fails, or the user never enabled it, the fallback PIN, passcode or password is still there.
Local biometric checks and full remote authentication are two different events. Remote authentication happens at the start of a new session and verifies the user's identity against the service's backend systems using credentials like passwords or passkeys. This step establishes trust between the user and the service.
Local biometrics, in contrast, focus on re-verifying identity during an ongoing, authenticated session. Rather than asking the user to re-enter passwords or other credentials when they briefly leave the app or lock their phone, local biometrics confirm that the same authorized user is still in control of the device. This device-centric verification never contacts a remote server, so it also works offline.
Biometric data is stored and processed securely within dedicated hardware security modules - like the Secure Enclave on iOS or the Trusted Execution Environment (TEE) on Android. These trusted modules are designed to keep sensitive biometric data safe from tampering, extraction or transfer.
Because of this hardware-level anchoring, biometric verification cannot be shared across devices or services. Each device's biometric templates stay unique to that unit, so a user who upgrades to a new phone has to re-enroll from scratch. That costs one onboarding step when switching devices, and it rules out remote attacks that exploit centrally stored biometric data.
Local biometrics verify that the person currently holding the device is the rightful, already authenticated user, without a repeated PIN or password entry, which matters for apps that hold banking, insurance or other personal details.
They run instantly on-device, work offline, and keep biometric data inside secure hardware enclaves. They cannot replace the initial remote authentication (a passkey or a password) that establishes who the user is, but they are very good at protecting every session after that.
Their limits, no portability and re-enrollment on every new device, are the price for that device-level security.
Passkeys replace shared secrets like passwords with asymmetric cryptographic credentials. Local biometrics only re-verify a user who is already authenticated on the device, while a passkey identifies the user to a remote service, which makes the login phishing-resistant even when the user and the device are unknown to the application's backend.
See how many people actually use passkeys.
Before passkeys, trust with a remote service was established with passwords, shared secrets known to both the user and the server. Passwords are simple to implement and vulnerable to phishing, credential stuffing and reuse.
Passkeys address these challenges by using a pair of cryptographic keys: a private key securely stored on the user's device and a corresponding public key registered with the service. When a login attempt occurs, the service sends a challenge that can only be solved by the user's private key. Attackers who intercept the data, or who trick the user into handing over credentials, still cannot get in.
Passkeys employ asymmetric cryptography:
That matters most for services that run a website next to the native app, because the website is where phishing hits. A passkey created on a mobile device can also be used on a desktop website via Cross-Device-Authentication.
Try passkeys in a live demo.
Passkeys travel across a user's devices. Modern operating systems synchronize them via secure cloud storage (e.g. iCloud Keychain, Google Password Manager), so users can log in from a second device without registering again, including the first install of the app. A passkey is also strong, phishing-resistant multi-factor authentication on its own, which removes the second factor the user would otherwise have to type.
Passkeys authenticate unknown users to remote services and resist phishing. Asymmetric cryptography and device-resident private keys remove the weaknesses of password-based systems, and the keys sync across devices while staying inside the hardware security module. That is what establishes user identity in the first place, which local biometrics alone cannot do. In a native app, the passkey creates the secure session and local biometrics keep access to it quick afterwards.
In native apps, passkeys and local biometrics both improve security and user experience, but they solve different problems:
See how many people actually use passkeys.
The table below compares both across purpose, use case, security and portability.
| Aspect | Passkeys | Local Biometrics |
|---|---|---|
| Phase | After App Installation Re-Login Session-Timeout | App is installed & logged-in |
| Core Purpose | Authenticate an unknown user (initial login) | Verify that the currently active user (that is already authenticated) is the rightful owner of the device/app |
| Protects | Access to user account | Access to logged-in app |
| Use Case | Ideal for first-time sign-ins or after re-installs, establishing trust with services, and enabling cross-platform, cross-device logins | Ideal for re-verifying if the device holder is the owner of the device, unlocking the app quickly without re-entering passwords/passkeys |
| Authentication Model | Remote authentication: verifies identity against a backend system | Local verification: checks biometric data stored securely on the device, does not contact a remote server |
| MFA | Yes + phishing-resistant | No |
| Native biometrics | Yes (e.g. Face ID, Touch ID, Android Biometrics) | Yes (e.g. Face ID, Touch ID, Android Biometrics) |
| Scope & Portability | Cross-device, cross-platform, cross-app usability (native apps + web) thanks to secure cloud sync of keys | Device-specific, non-transferable: biometric templates must be re-enrolled on new devices Cannot be easily moved between platforms |
| Data Storage & Security | Private keys stored in a secure enclave Public keys stored server-side No shared secrets transmitted resistant to phishing | Biometric templates stored in a secure hardware enclave on the device Never leave the device Protected by the device's hardware |
| Internet Requirement | Requires internet connection to authenticate with the remote service and register keys. | No internet connection required; verification is entirely local, so it also works in apps with offline functionality |
| Backup & Recovery | Keys can be backed up and restored via cloud sync (e.g., iCloud Keychain, Google Password Manager), ensuring easy recovery if a device is lost or replaced | No built-in backup mechanism for biometrics; if the device fails, users must re-enroll their biometric data on a new device |
| Integration with Websites & Apps | Can be used for both native apps and websites. Passkeys simplify login flows by authenticating users without revealing credentials | Limited to the device and app installed locally. |
| Developer Implementation | Integrate using web standards (WebAuthn, FIDO2) and native platform APIs Backend must handle public keys and challenges. | Use platform SDKs (iOS, Android) for biometric prompts No special backend handling required. |
| User Experience | After initial setup, users can sign in quickly without remembering email or passwords, even on new devices Fewer steps during onboarding | Provides instant, passwordless re-access to apps once the user has already authenticated. |
At a glance: choosing an approach
| Approach | Purpose | Authentication Scope | Cross-Device | MFA | Phishing-Resistant | Best For |
|---|---|---|---|---|---|---|
| Local Biometrics Only | Re-verify logged-in user | Local device verification | ❌ No | ❌ No | ❌ No | Protecting ongoing app sessions, convenient re-access |
| Passkeys Only | Authenticate unknown user | Remote authentication | ✅ Yes | ✅ Yes | ✅ Yes | Initial login, cross-platform auth, eliminating passwords |
| Passkeys + Local Biometrics | Complete auth strategy | Both remote & local | ✅ Yes | ✅ Yes | ✅ Yes | Regulated/sensitive apps (banking, healthcare), maximum security + UX |
Key Insights:
Passkeys and local biometrics are complementary. Together they provide a layered authentication experience:
Combining both gives developers a secure and user-friendly authentication flow.
Get a free passkey assessment in 15 minutes.
Combining passkeys and local biometrics gives you a flow that:
Adding passkey functionality to a native app is technically straightforward. Adoption is the hard part, especially in apps with a large, established user base, because those users unlock the app with local biometrics and almost never do a full remote login. The best passkey creation moment on the web, the post-sign-in nudge, barely exists here. The alternative moments below work without breaking the biometric unlock users are used to.
As detailed in Corbado's guide to passkey creation best practices, a rollout succeeds or fails on the moments you pick to nudge users. Here is the playbook for native apps, with each trigger and what it typically converts at.
| Nudge Strategy | Trigger / Moment | Prompt Mechanics | Expected Acceptance |
|---|---|---|---|
| Post-Sign-In Nudge | After a full re-authentication (e.g., app reinstall, device restore) | Full-screen dialog that auto-opens the passkey creation sheet. | 🟢🟢🟢 (High) |
| Post-Transaction Nudge | After an action requiring an OTP (e.g., SMS verification) | Contextual prompt: "Skip the code next time - create a passkey" | 🟢🟢🟢 (High) |
| Post-Unlock Nudge | When user opens an already logged-in app (no password typed) | Auto-triggered or manual banner after unlock (start defensively with a manual prompt). | 🟡🟡 (Medium) |
| Nudge via Settings Page | User navigates to Security > "Add Passkey" | Manual, user-initiated action. | 🔴 (Low) |
| Nudge via In-App Banner | A permanent or rotating banner on a dashboard screen. | Passive and dismissible. | 🔴 (Low) |
All of this needs detailed telemetry. Track how, when and where users are prompted, otherwise prompt fatigue sets in and the nudges start interfering with the biometric unlock. Log every step of the creation funnel (prompt shown, clicked, started, completed or failed), because that is the only way to tune the rollout without annoying users.
New users installing the app, and existing users logging in with a password, both arrive without a passkey. Onboarding is the one moment where you can put the strongest method first.
The recommended approach is:
This order secures the account for remote authentication first and the local session second.
Two implementations show how this plays out in production: one with passkeys only, one that combines both.
The Kayak app uses passkeys for user authentication. They sit directly in the login screen, so users can pick a passkey without remembering an email address or a password.
Once authenticated via a passkey, the user gains unrestricted access to the app without requiring reauthentication. This design is particularly suitable for Kayak, a travel app that primarily manages booking history and itineraries, which are not considered highly sensitive or critical data.
Key Highlights of Kayak's Approach:
Apps where users perform more sensitive actions need the extra layer. GitHub uses both.
GitHub combines passkeys for the login with local biometrics for the logged-in state. The passkey is the fast, phishing-resistant option, which matters because GitHub requires multi-factor authentication, and it takes passwords and one-time passcodes out of the flow. But for the sake of this article we will not look at their passkey implementation.
GitHub's Additional Layer of Security with Local Biometrics:
Because GitHub also offers sensitive operations like merging pull requests, GitHub allows
users to enable local biometric protection if they feel it is necessary. In this example,
Face ID is used to lock the app on iOS, so only the device owner
can open the GitHub App. The app explicitly requests the necessary privileges from the
operating system to activate biometrics and offers configurable intervals (e.g. immediate
or after a defined timeout).
Key Highlights of GitHub's Approach:
Regulated industries have one more thing to sort out. In banking and financial services, the difference between passkey authentication and local biometric verification decides how a compliance review goes. What matters there is how passkeys validate user presence and identity, and how that maps to PSD2 (Payment Services Directive 2) in Europe or a comparable framework elsewhere.
Passkeys validate two things during authentication:
This applies to web and native implementations alike, and it is the part compliance reviews get stuck on: a passkey accepts either biometric verification or a device passcode as a valid factor, by design.
At a glance: biometric enforcement by platform
| Context | Enforce Biometric-Only Authentication? | Hardware Security Module | Use Cases |
|---|---|---|---|
| Local Biometrics in Native Apps (iOS) | ✅ Yes | Secure Enclave | • App launch protection • Session re-verification • Sensitive in-app operations • Protection of self-generated key pairs |
| Local Biometrics in Native Apps (Android) | ✅ Yes | TEE (Trusted Execution Environment) | • App launch protection • Session re-verification • Sensitive in-app operations • Protection of self-generated key pairs |
| Passkeys (Web & Native, All Platforms) | ❌ No - User chooses | Secure Enclave/TEE used for keys, but cannot enforce biometric modality | • Remote authentication to services • Can require userVerification • Browser/OS decides: biometric OR PIN • Web: device trust mechanisms needed |
Key Technical Distinctions:
userVerification but cannot enforce biometric-onlyWhile accepting a device passcode isn't a security vulnerability in authentication terms, it creates privacy and access control concerns, especially for regulated applications:
By enforcing local biometrics, an app accepts only biometric unlocks and closes that gap. It is a privacy and compliance control: device access does not equal application authorization.
For regulated environments, a layered authentication strategy provides both security and compliance:
Initial Authentication (New User or New Device):
This "passkey step-up" brings the initial trust establishment up to regulatory standards, which is what PSD2's Strong Customer Authentication (SCA) requirements ask for.
Ongoing Authentication (Established User):
The combination satisfies the regulator and stays usable: strong authentication on first use, biometric access every day after that.
Once passkeys are in a compliance review, the web implementation lands in it too, because you cannot enforce biometrics on passkeys in web. You can require userVerification, but the browser decides the modality, so the user may satisfy UV with a biometric or with a device PIN. A web-based banking application cannot control that. Device trust and shared device detection close the gap instead.
The Shared Device Challenge:
On the web, regulated environments have to prevent passkey creation on shared devices: library computers, internet cafés, kiosks. Without controls, a user creates a passkey on a device they do not own.
How Corbado addresses Web Device Trust:
Fingerprinting is not a standalone SCA element under PSD2 and should not be treated as one. Corbado uses a cookie-based device trust system combined with client environment tracking instead:
Shared Device Detection: A device is recognized across the accounts that sign in from it, and once more than one user account is seen on the same device, Corbado records that device as shared. The record is read back per user in Advanced User Search, together with which of that user's client environments sit on a shared device, so a kiosk or a family desktop is identifiable before you decide what to offer on it.
Smart Device Recognition: Rather than creating a new "device" for every login, the system recognizes when a user has updated their browser, switched to incognito mode, or is on the same physical device. That keeps the device list short and the trust signal accurate.
Platform-Specific Policies:
Cookie Lifetime Is a Design Constraint: Cookie-based recognition holds only as long as the browser keeps the cookie. Safari's Intelligent Tracking Protection, a cleared profile or a new browser install all drop it, and the session then looks like a first-time device. Plan for that case explicitly and let the platform policy above decide what happens next.
Deployment Models for Regulated Environments:
Corbado supports staged deployment strategies:
Additional Web Protections:
For regulated use cases, layer additional security:
For Regulated Use Cases:
The combination of device trust, shared device detection, and step-up mechanisms creates a compliant authentication flow for web applications. However, each regulated environment has unique requirements. For detailed guidance on implementing these controls for your specific compliance needs, contact our team to discuss your regulated use case.
For banks and regulated applications, local biometrics are a compliance and privacy control. By enforcing biometric-only verification, organizations can:
Passkeys for the initial authentication, step-up methods for regulatory compliance and enforced local biometrics for ongoing access add up to a compliant and user-friendly authentication setup, even in the strictest regulated environments.
Four recommendations for the scenarios where local biometrics and passkeys usually come up:
Your own mix of security, usability and compliance requirements decides which of the four applies, so check them against your use case before you commit to one.
Every recommendation above depends on an assumption about the device in the user's hand: that a biometric is enrolled at all, that the app and the web login behave the same way, that the fallback is reachable. Corbado Observe, the authentication observability layer, records what each session actually reported, so those assumptions stop being assumptions.
See User Debugging in Corbado Observe →Local biometrics and passkeys do different jobs and work well together. Local biometrics handle ongoing session verification with a fast on-device check, passkeys establish the phishing-resistant trust relationship with the remote service. Coming back to the questions from the introduction:
Corbado is the Passkey Intelligence Platform for large-scale CIAM teams running consumer authentication. We help you see what IDP logs and generic analytics tools can't: where passkeys, passwords, OTP, social login and fallback journeys succeed, stall or fail, which devices and browsers create friction, and when an OS update silently breaks login. Two products: Corbado Observe layers process mining and observability across authentication journeys. Corbado Connect adds managed passkeys with analytics built in alongside your IDP. VicRoads runs passkeys for 5M+ users with Corbado (+80% passkey activation). Talk to a Passkey Expert →
Apps handling non-sensitive data, like a travel booking app, can use passkeys alone for frictionless cross-device authentication without local biometric protection. Apps handling sensitive or regulated data, like banking or healthcare, should implement both: passkeys for initial phishing-resistant remote authentication and local biometrics to enforce biometric-only ongoing session access, closing the privacy gap created by shared device passcodes.
Passkeys accept either biometric verification or a device PIN as valid user verification, meaning a family member or child who knows the device passcode could access a banking app. Local biometric enforcement closes this gap by ensuring only the biometric owner can access the app, satisfying PSD2 Strong Customer Authentication requirements and preventing unauthorized access from users who have legitimate device access but not application authorization.
The two highest-acceptance triggers are the post-sign-in nudge shown immediately after a full re-authentication such as an app reinstall and the post-transaction nudge offered after an SMS OTP action. Lower-impact options include in-app banners and settings-page prompts. Detailed telemetry tracking each funnel step from prompt shown to creation completed prevents prompt fatigue and shows where adoption is lost.
Corbado recognizes the browser environment behind each login with a cookie-based device record and marks a device as shared once more than one user account signs in from it. That flag is read back per user in Advanced User Search, together with the client environments of that user which sit on a shared device, so passkey creation can be held back there. On desktop the default is a waiting period before a passkey is offered at all, while mobile devices are treated as personal and can create one immediately.
Related Articles
Table of Contents