How passkeys change sign-in for customer and workforce users in Zitadel
Zitadel supports passwordless login with passkeys based on FIDO2 and WebAuthn, with fallback to password login. For an identity team, the real question is not whether the feature exists but who should get passkeys by default: customers, staff, or both. Most of the effort will go into policy, user experience and testing, and a single setting will not carry it. The same team also has to decide whether to build this in-house or bring in a partner, and that choice depends on how many user populations, applications and customer organizations will be affected on day one.
Passkeys are harder to roll out than they look for three reasons. First, a passkey is bound to the domain where it was registered, so the login domain for each instance and any custom domain must be settled before users enroll. Changing it later can leave users with credentials that no longer work. Second, users register passkeys on devices they control, such as personal phones, laptops and security keys, and the organization cannot assume which of these exist or how they sync. Staff on managed devices and customers on personal devices will need different guidance and different fallbacks.
Multi-tenant setups add a third layer. Zitadel separates tenants into instances and places users inside organizations, and a customer organization may have its own tolerance for password fallback, its own device rules or its own identity provider. Confirm, in the Zitadel documentation and in a test instance, which passkey and login behavior is set once for an instance and which can be set per organization. Write down the answer for each population before you configure anything, because a rule that is convenient for one customer can block another.
This section covers passkey sign-in and registration only: how users enroll, sign in, recover access and fall back to passwords. Connecting external identity providers is covered in the federation topic, moving existing password users is covered in the migration topic, and hardening of MFA and passkey policies, admin access and audit review is covered in the security hardening topic. Before scoping work, list each user population, its devices, whether passwords must remain available, and who approves exceptions. Those answers will shape the quote more than any single configuration step.
Which Zitadel components and settings carry passkey sign-in
A passkey rollout in Zitadel touches more than one screen or setting. The hosted login presents the prompts users see, the Console holds the policies administrators set, and instances and organizations determine where those policies apply. The API is the route for automation and user-driven registration, so each point needs to be checked as a set before go-live.
Hosted login registration and sign-in prompts
The hosted login is the user-facing extension point where passkey registration and sign-in prompts are presented, and where the fallback to password login is offered. Test each path as a customer or workforce user would experience it: first registration, sign-in on a new device, and sign-in when a passkey is unavailable. Confirm in your Zitadel version which prompts appear, in what order, and whether a user can skip registration. Screens and wording change between releases, so verify them against your own build rather than documentation alone.
Console login policy settings
The Console is where administrators configure login policies, including which authentication methods and second factors are permitted. These settings decide whether passkeys can be used for passwordless sign-in or only as a second factor, and whether password login remains available. Record every policy value your team sets, then confirm the option names and their exact behavior in your installed version of Zitadel. Export or screenshot the configuration so changes can be reviewed later.
Instance-level policy scope
An instance is the top-level tenant with full data isolation, so policies set at this level apply to everything inside it unless overridden. Decide whether one passkey policy suits all customers or whether some tenants need different rules. Map which settings are instance-wide and which can be changed lower in the hierarchy. Confirm this mapping in your own Zitadel version, because the scope of individual login settings is one of the details most likely to change between releases.
Organization-level policy overrides
Organizations live inside an instance, and projects and users sit within them. Where your version supports organization-level login policies, they let one customer or business unit require different sign-in methods from another. Check which settings can be overridden, which inherit from the instance, and how users in an organization that federates to an external identity provider are affected. Test a user in each organization type before rolling out passkeys widely.
Management API for registration and automation
The API supports user-driven registration flows and administrative automation, such as creating users, managing their authentication methods and reading policy state. Use it when registration or policy changes need to run from your own systems rather than through the Console. Confirm which passkey and authentication method operations exist in your Zitadel version, what permissions the service account needs, and whether each call is covered by the same policy checks as the hosted login.
Version-specific behavior and change review
Login policy screens, option names and passkey behavior can change between Zitadel releases, so a configuration verified on one version may not hold after an upgrade. Keep a written list of every passkey-related setting, the release it was tested on, and the test cases used. Before any upgrade, repeat registration, sign-in and fallback tests on a staging instance. Confirm the upgrade path and any changed settings against the release notes for the version you plan to run.
Which passkey policy fits each user group
This table compares four passkey policy choices for Zitadel: optional passkeys, passkeys required for a group, passkeys as primary with password fallback, and password-only for legacy clients. Read each row across to see when the option fits and what it costs to run, then use the last rows to decide how far the policy should reach across organizations and instances.
| Policy option | When it fits | Operational cost | Revisit when a customer brings its own IdP |
|---|---|---|---|
| Passkeys offered as an optional sign-in method | Customer users on mixed devices who may not have a passkey-capable setup, and early rollouts where adoption is still being measured | Low policy effort, but password login stays active, so password resets and lockout tickets continue; adoption depends on users choosing passkeys | Usually not, because federated users sign in at the external provider and the Zitadel option only affects local accounts |
| Passkeys required for a group | Workforce users on managed endpoints, and regulated staff roles where the organization can require a specific sign-in method | Higher help desk load at enrollment; users who lose a device need a defined recovery path such as an administrator-issued reset or a second registered passkey | Yes, if the group spans organizations, because the requirement must be checked against each organization's identity provider |
| Passkeys as primary with password fallback kept for recovery | Mixed populations where most users can enroll a passkey but some devices or browsers cannot, so a fallback is still needed | Password login must stay configured and secured, so policy review and password reset handling remain in scope; fewer routine password tickets over time | Yes, because the fallback path and which factor is primary may differ when a federated provider handles sign-in |
| Password-only for legacy clients | Older applications or integrations that cannot complete a passkey flow, and short transition periods with a documented end date | Password and reset handling stay in operations; every legacy client needs a named owner and a retirement plan | Yes, since legacy clients may be the ones that depend on a federated provider or a different sign-in flow |
| Scope set per organization | Customers with different device or compliance needs who should not share one sign-in requirement | More policy objects to review and document; clear ownership is needed for each organization administrator | Yes, because each organization can point to a different identity provider with its own rules |
| Scope set per instance | One consistent rule for all users in a single deployment, such as a workforce tenant with uniform managed devices | Simpler to audit, but a change affects every organization in the instance, so test with a pilot group first | Yes, if any organization in the instance federates to an external provider with different sign-in behavior |
| Confirm before go-live | Check the current Zitadel passkey and login policy settings in the version you deploy, since policy behavior should be verified in your own environment | Recovery testing, help desk scripts and fallback tests add effort that a quote should list separately | Re-check the policy after every new federation, because external providers can change which factors a user sees |
How passkey registration, self-service and recovery work in practice
The first design decision is which user journeys the rollout must support, because each one creates a different path through the login system. The core set is first registration, adding a second passkey, removing a lost device, and recovering access when a user has neither a passkey nor a password. Write these as numbered flows with a named actor, a trigger, the screens shown and the audit record produced. Then confirm in the Zitadel passkeys documentation for your target version which registration points exist: at sign-up, after a successful password login, or from an account settings page. The product docs should also state which authenticator types are offered during registration and whether a user can register more than one passkey. Do not assume these details from older guides or community posts.
Next, decide who performs registration. Self-service lets users enroll and remove their own passkeys, which scales well for customer identity where no help desk exists for every end user. Administrator-assisted registration suits workforce users in high-assurance roles, where an administrator verifies identity before a credential is bound. Most organizations split the two: customers self-enroll, while privileged staff enroll through a controlled process. Check in the Zitadel documentation whether administrators can register passkeys on behalf of a user, and whether a user can be forced to register at next login. Those answers determine whether the policy can be enforced in the product or must be handled by process.
Self-service and auditability pull in opposite directions. Letting users add and remove passkeys themselves reduces tickets, but a compromised session could then bind a new attacker-controlled credential without anyone noticing. Keeping an audit trail of every credential change, and reviewing it, adds operational work but gives security teams the evidence they need after an incident. Decide which events must be logged and retained, who reviews them, and whether a credential change should notify the user by a channel other than the one just used. Confirm in the Zitadel documentation which events are recorded and how they can be exported to your logging platform, since the answer determines whether the trail is usable in practice.
The recovery path causes more help desk load than any other part of a passkey rollout, so it must be designed and tested before launch. Users who lose a phone, reset a device or never finished registration will need a way back in. Define the fallback explicitly: whether the password remains available, whether another registered factor can be used, or whether an administrator must verify identity and reset the account. Each option needs a security owner and a documented verification step. A useful test is to run the lost-device journey end to end with a test account and time how many steps an administrator must take. If the answer is always a ticket, the process needs redesign before go-live.
Finally, plan for the user who has no passkey and no password, which can happen after a policy change or a migrated account. Decide whether such accounts are locked out, prompted to set a credential at next sign-in, or routed through a verified reset. Confirm in the product docs whether password fallback can be disabled per organization, since customer and workforce users often need different answers. Record the decisions in a journey matrix that lists each flow, the role allowed to perform it, the audit event it produces and the owner of any manual step. That matrix becomes the acceptance test for the rollout and the basis for training the help desk.
How to roll out passkeys in Zitadel step by step
This sequence moves a self-hosted Zitadel deployment from password-only sign-in to passkeys in controlled stages. Each step ends with a check so the platform team, application owners and pilot users can confirm the rollout is working before the policy widens.
Confirm the login domain and hostname
Platform and identity owners fix the public hostname that will serve login before anything else is configured, because passkeys are bound to the domain where they are registered. Agree the domain for each organization or customer brand that will sign in, and confirm the DNS record and TLS certificate for it. A passkey registered on one domain will not work on another, so changing the hostname later means users must register again. Done when the hostname, certificate and DNS record are documented and resolve from the networks your users will use.
Stand up a non-production instance
The platform team deploys a non-production Zitadel instance using the same method planned for production, whether Docker Compose, Kubernetes with the official Helm chart, or a binary on Linux. Its PostgreSQL database should run a version in the 14 through 18 range that Zitadel supports, ideally the same version line production will use. Confirm the exact supported versions in the current database documentation before you build. Done when the instance starts, the Console loads on the staging hostname, and an administrator can sign in.
Enable passkey sign-in with password fallback
An administrator turns on passkey login in the login policy for the chosen scope, either at instance level or for a specific organization, and keeps password login available during the rollout. Decide the scope first, because a policy set at instance level affects every organization unless it is overridden. Check the current passkey documentation for the exact option names and how overrides behave in your release. Done when a test user without a passkey can still sign in with a password and the passkey option appears on the login screen.
Configure registration and self-service behavior
Decide who can register a passkey, whether users can add or remove their own passkeys in self-service, and whether registration is prompted at first sign-in or left optional. Make these decisions separately for customer and workforce organizations, since their user populations and support expectations are usually different. Confirm each setting in the current documentation before you apply it, because option names can change between releases. Done when a new test user can register a passkey from the self-service page and remove it again, and a user without the required role cannot change another user's passkeys.
Update application login flows and test each client
Application teams review each OIDC or SAML client that sends users to Zitadel. They confirm the login flow accepts passkeys and that redirects return to the registered callback URLs. Test every client separately, because a web application, a mobile app and a device-based client may behave differently. Record the browser and operating system combinations you tested. Done when each client completes sign-in with a passkey and with the password fallback, and the tokens contain the claims the application expects.
Pilot with a small group in one organization
Choose one organization and a small, named group of users who agree to test, with a support contact who can review logs and reset enrollment. Ask pilot users to register passkeys on at least two device types, such as a laptop with a built-in authenticator and a phone, and to sign in from each. Record any failures with timestamps, browser and device so they can be traced. Run one recovery test where a user loses access to a passkey and regains it through the self-service path without an administrator. Done when every pilot user has signed in with a passkey on two device types and the recovery test completes without an administrator.
Widen the policy and retire password-only paths
Expand the passkey policy to more organizations in stages, moving from the pilot organization to the next group and updating the policy scope at each stage. Keep password fallback until passkey enrollment and recovery are proven for each group, then disable password-only sign-in for that group and remove outdated instructions from help pages. Review the audit trail and support requests after each stage before you continue. Done when each group has a documented recovery path, no group depends on a password-only sign-in, and the owner of the identity platform has signed off on each stage.
What drives passkey rollout effort and cost
This table lists the factors that change how much work a Zitadel passkey rollout takes, how each one raises effort, and the practical way to keep it down. Read it before scoping, because the same platform can need a short pilot or a long program depending on these drivers. The main takeaway is that narrowing the first release and standardizing policy usually lowers both one-time and recurring cost more than any other lever.
| Driver | Why it changes effort or cost | How to keep it down |
|---|---|---|
| Number of users and user groups | Each group may need its own enrollment prompts, fallback rules and help desk scripts. More groups multiply test cases and training material. | Start with one or two user groups that have similar devices and risk. Add groups after the first cohort's enrollment and support data is reviewed. |
| Customer organizations with separate policies | Zitadel organizations can hold different passkey and login settings. Every distinct policy needs its own design decision, testing and sign-off. | Pilot with one customer organization. Define one standard policy template and record any approved deviations as exceptions with an owner. |
| Applications and clients that rely on password flows | Each OIDC or SAML client that still assumes a password form or a password reset path needs review, login testing and sometimes code or configuration changes. | Inventory clients first and sort them by login method. Limit the first release to web sign-in for applications that already accept the Zitadel hosted login. |
| Device mix users bring | Passkey behavior depends on the platform authenticator, browser, operating system and security key type. Unsupported or older combinations generate fallback use and support tickets. | Document the supported device and browser matrix for the pilot. Test a representative set of devices from each user group before widening access. |
| Help desk and recovery volume | Users who lose a device, replace a phone or never enrolled a second method need recovery paths. Recovery steps are a recurring workload that grows with the user base. | Agree recovery procedures and identity verification steps before go-live. Give the help desk a short runbook and track the reasons for tickets during the pilot. |
| Compliance evidence for authentication policy | Assessors may ask how passkey and password fallback policies were chosen, approved and reviewed. Preparing that evidence adds design and documentation work, and it repeats at each policy review. | Map the policy decisions to your internal control requirements early. Keep the policy settings, approvals and change records in one place. DeployOpen prepares evidence for assessments, but independent auditors issue any audit outcome. |
| Number of environments | Each environment such as development, test, staging and production needs configuration, test runs and sign-off. Drift between environments creates rework. | Manage Zitadel configuration as code where possible, promote the same settings through each environment, and limit production changes to tested releases. |
| One-time costs: design, testing, client changes and training | Policy design, enrollment flow design, test plans, changes to applications that depend on passwords and user or help desk training are incurred mainly during the rollout. | Ask for a written scope that lists the policy design, the clients in scope and the test cases. Confirm which client changes are included and which are owned by your application teams. |
| Recurring costs: help desk, policy review and upgrade testing | Support tickets, periodic policy reviews, and regression testing after Zitadel upgrades continue for as long as the platform runs. Upgrades on the v4 line can change login behavior that needs retesting. | Set a review cadence for passkey policies, plan regression tests for each upgrade, and ask any support provider to state what recurring work is included in a retainer. |
How the passkey rollout changes across deployment models
A single node is the simplest place to test passkeys, and it is also where hostname mistakes are easiest to miss. Passkeys are bound to the domain the browser sees, so the external domain configured in Zitadel must match the name users type, including any non-default port. Settle this before any test user registers a passkey, because a later hostname change can leave existing passkeys unusable.
What to check on one node:
- Public domain: set the final production hostname from the first install, not a placeholder that will be replaced later.
- TLS termination: if a reverse proxy on the same host terminates TLS, confirm that forwarded host and protocol information reaches Zitadel so generated login URLs use HTTPS and the correct host.
- Restart behavior: since there is one process, test that a restart does not break an active sign-in and that users can complete passkey sign-in again afterward.
- Staging: a second node on a different hostname issues passkeys bound to that name, so a staging copy only proves the flow if it uses the production name on a network you control.
- Device prompts: phone-based passkeys and hardware key touches need a physical device and browser, so schedule them as manual test cases.
Before opening the instance to users, run a full register and sign-in cycle from a clean browser profile against the production hostname.
Zitadel recommends a Kubernetes cluster with the official Helm chart for high availability, so this tab covers the case where several replicas serve the same hostname. The passkey challenge is issued in one request and completed in another, which means a load balancer can send the two requests to different replicas. Testing has to confirm that login state survives that hop, not only that a single request succeeds.
What changes with multiple replicas:
- Login state across replicas: test registration and sign-in with repeated requests, and confirm that a challenge started on one replica completes on another.
- Session behavior: check session expiry, logout and re-login while pods are rolled, and confirm that users are not forced into a loop.
- Ingress and TLS: the ingress or load balancer must present the production certificate and forward host and protocol headers, and the external domain in Zitadel must match that host.
- Staging parity: a staging cluster can match production hostnames only through its own DNS or hosts entries on an isolated network, so no public record should point to it.
- Offline gaps: rolling restarts, pod failover and cross-device prompts cannot be fully reproduced in an isolated test cluster without the same external connectivity.
The replica design and database topology belong to the high availability topic, so use this tab only for passkey and session checks. Confirm the PostgreSQL version against the supported range of 14 through 18 before you run these tests.
Docker Compose and direct binary installs suit small environments where one host runs Zitadel, a database and a reverse proxy. The passkey behavior is close to the single-node case, but the proxy layer is often configured by hand, which makes header and certificate mistakes more likely. Treat the proxy configuration as part of the passkey test scope, not as infrastructure that is outside it.
Points to verify in small environments:
- Proxy configuration: confirm that the proxy sends the production host and protocol headers, and that the external domain in the Zitadel configuration matches exactly.
- Compose service names: internal service names must not leak into generated login or callback URLs, so check the URLs returned during sign-in.
- Binary service management: if you run the binary under a service manager, test a restart and confirm that the same configuration file and external domain load every time.
- Staging on the same host: running a second stack on the same machine with a different hostname creates a second relying party, so use a separate host or a production-named staging address only on a controlled network.
- Database version: the PostgreSQL version must fall within the supported range of 14 through 18, and the version in your Compose file or package source should be checked during testing.
Small installs often skip multi-replica testing, but a restart or upgrade should still be tested as a sign-in event. Confirm the proxy headers and a complete passkey cycle before any user enrolls.
In air-gapped or restricted networks, the passkey rollout depends on internal naming, an internal certificate authority and the ability of browsers on managed devices to trust that authority. Passkeys still bind to the domain, so an internal name must be chosen early and kept stable. Testing has to happen inside the restricted network, using the same names users will type, because external test services cannot be reached.
What changes when the network is restricted:
- Internal certificate authority: confirm that managed browsers and operating systems trust the internal CA, since a certificate warning during passkey registration will block enrollment.
- Asset and dependency loading: confirm that login pages load every script, style and font from internal hosts, and that no step requires an outbound request.
- Runtime lookups: ask the vendor which runtime checks, if any, reach external services, and test sign-in with outbound traffic blocked.
- Staging parity: build staging on the same internal domain structure with its own internal DNS zone, so the hostname matches production without sharing a relying party.
- Offline gaps: cross-device prompts, phone-based passkeys and sync through external cloud accounts cannot be exercised in a sealed network, so record them as accepted gaps or test them in a connected test environment.
Database packages, container images and Helm charts must also come through your internal mirror, with versions checked against the supported PostgreSQL range of 14 through 18. Before go-live, document which passkey flows were tested offline and which were not.
How to test passkey sign-in and confirm it fails safely
Passkey testing should prove two things before go-live: that every sign-in path your users actually take works, and that every path that should be blocked is blocked. Build the test plan from your user base, not from the default Zitadel login flow alone. List the device and browser classes your customers and workforce use, such as managed corporate laptops, personal phones, shared kiosks and any browser your support desk still receives tickets about. For each class, run registration from the self-service flow and sign-in with the passkey, then record the platform authenticator, browser version and result. Confirm this against the passkey and password login settings in the instance or organization you are testing, because the policy decides which steps appear to the user.
Next, test the fallback and recovery paths as first-class cases. Remove the passkey from a test account, or sign in on a device without it, and confirm that password login works where your policy allows it, and fails where it does not. Then simulate loss of the only registered device. Walk through the recovery route your policy defines, whether that is re-registration through a verified channel, an administrator reset or a second registered authenticator, and confirm that the route cannot be used by someone who only knows the username. Ask your Zitadel administrators to document who can approve a reset and how that approval is logged. Confirm the exact recovery options in your version's documentation, since they change between releases.
The negative tests carry most of the security value. Attempt sign-in from a hostname that does not match the relying party ID configured for passkeys, and confirm the browser refuses the ceremony and nothing is accepted. Create a test user who has not registered a passkey while your policy requires one, and confirm the login is stopped or redirected to registration rather than silently falling back to a weaker method. Disable the passkey policy for a test organization and then try every other login path that could reach the same application, including older client configurations, direct API calls to the session endpoints and any identity provider federation. Each path should either be disabled or enforce the same rules. For each failure, record exactly what the user sees: the error message, whether the page reveals whether the account exists, and whether a retry loop or lockout occurs. An illustrative check is an account that gets a generic error on a wrong hostname but a detailed message on a missing passkey, which leaks account state and should be corrected.
Regression testing is needed after every Zitadel upgrade and after every change to an application's login configuration, including a new redirect URI, a changed client type or a new custom login step. Keep the test suite fixed so that results can be compared across runs, and automate the parts that do not need a human at a device. Run the full device matrix at least before each production upgrade, because browser and operating system behavior around passkeys changes independently of Zitadel. Store each run's date, Zitadel version, tester, configuration snapshot and pass or fail result. Those records are useful evidence for your own compliance reviews of authentication controls, but they are your team's internal records. They do not replace an audit or certification, and an independent assessor will decide what they accept. Confirm with your assessor which artifacts they expect before you design the retention process.
Access control and secrets that matter for passkey sign-in
Passkeys shift trust toward the administrators who set login policy, the accounts that recover access, and the secrets that connect applications to the login. The cards below cover the controls that matter most for passkey sign-in, with checks you can run in your own environment. General platform hardening is covered on the sibling security hardening page.
Who can change login policy
Passkey enforcement, fallback to password and MFA requirements are set through policy, and a change to any of them alters how every user in scope signs in. Confirm which roles can edit login policy at instance level and at organization level, and whether those roles are limited to named operators. Review the list of accounts holding those roles against your change process, and check that each policy change produces an audit record that someone reviews.
Per-organization settings ownership
Zitadel lets you set some login behavior per organization, which is useful for customer tenants that need different rules. Each override is a place where a weaker setting can exist without central visibility. Confirm which organizations have settings that differ from the instance defaults, who owns each override, and whether delegated administrators in those organizations can change passkey or password behavior without your approval.
Protected recovery administrator accounts
When passkeys are the primary factor, an administrator who loses their authenticator may be the only path back into the console. Recovery accounts should hold at least one registered passkey on a hardware authenticator stored separately from daily devices, and their use should be rare and monitored. Verify that recovery accounts are named, that their sign-ins trigger alerts, and that the recovery procedure has been tested without relying on a single person.
Logging passkey registration and removal
A user who adds a passkey to an account they do not control is a takeover path that looks like normal self-service. Registration and removal events should be written to a log your security team reads, with the user, the time, the originating session and the credential identifier. Confirm that these events leave the Zitadel deployment, that retention meets your policy, and that someone is alerted when a passkey is added shortly after a password reset or from an unfamiliar context.
Client secrets for consuming applications
Applications that consume the login hold client secrets or rely on confidential client configuration to exchange authorization codes. A leaked secret lets an attacker impersonate the application, whatever the user's passkey strength. Confirm that secrets are generated by Zitadel, stored in a secrets manager or Kubernetes secret store with restricted read access, rotated on a schedule and on staff change, and that public clients use PKCE rather than a shared secret.
Limiting password fallback to named accounts
Password fallback exists for users who cannot yet use a passkey, but every account that keeps a password is a route around the passkey requirement. Decide which populations need fallback, such as devices without a compatible authenticator, and scope the policy to them rather than to the whole instance. Verify the list of accounts still using password sign-in, set an end date for each exception, and check that password login cannot be re-enabled by a delegated administrator outside the approval process.
What to monitor, document and review after passkeys go live
The first review after passkeys go live should answer one question: are users actually moving off passwords, and where are they getting stuck? Track passkey registration rates by user population, by organization, and by the point in the flow where people enroll. A low registration rate in one customer organization often points to a prompt that appears at the wrong moment, a policy that requires enrollment before users understand why, or an identity provider federation that bypasses the local login screen entirely. Pair registration numbers with sign-in failures broken down by device class, such as desktop platform authenticators, mobile devices, and roaming hardware security keys. Failures that cluster on one browser or operating system usually indicate a configuration or client issue rather than user error. Confirm with your Zitadel version's documentation which events and logs record passkey registration and assertion outcomes, since the fields and log destinations are the foundation for every metric in this list.
Password fallback use and help desk recovery tickets are the two signals that tell you whether passwordless login is working for real users. Measure how often sign-ins complete with a password after a passkey is registered, because a steady fallback rate means users either lack a passkey on the device they are using or the fallback path is easier than the passkey path. Log every recovery ticket with a reason code, such as lost device, new device without a registered passkey, or account lockout, and review the trend weekly during the first months. Each recurring reason points to a specific decision: whether to require a second registered credential, whether to tighten or relax fallback for certain populations, or whether the self-service recovery steps need clearer wording. Record each change to login policy with a date, the approver, and the reason, so that a rise in tickets can be traced to the change that caused it.
Several items must be backed up and recorded alongside the PostgreSQL database. The database holds users, credentials and events, but the instance configuration and policy settings that govern passkeys, password fallback and organization-level login behavior should also be exported or recorded in version control, using the Zitadel configuration and API tooling your team has chosen. Keep the timing consistent: take the configuration export at the same point as the database backup, or record the change history so that you can reconstruct which policy was active at any given time. A restore that brings back users and credentials under a different login policy than the one they registered under can produce confusing failures. Test a restore into a non-production environment and confirm that passkey sign-in works afterward, since a backup that is not verified does not reduce recovery risk.
Documentation should be short enough that someone can use it during an incident. Maintain a record of policy decisions covering which populations must use passkeys, whether password fallback remains enabled, how second factors apply, and the reasoning behind each choice, so that future administrators do not reverse them without understanding the trade-offs. Write recovery procedures for lost devices, locked accounts and administrator-assisted re-enrollment, including who may approve a recovery and how identity is verified before it is granted. Name an owner for each customer or internal organization who is accountable for its login policy, its help desk escalation path and its contact for policy changes. Finally, keep a set of test cases covering registration, passkey sign-in, fallback, recovery and federated login for each organization, and rerun them after every Zitadel upgrade. Upgrade sequencing, support coverage and the mechanics of testing database migrations are covered in the Zitadel upgrades and support topic.
Questions teams ask before rolling out passkeys in Zitadel
Can passkeys run alongside password login in Zitadel?
Yes. Zitadel supports passwordless login with passkeys based on FIDO2 and WebAuthn, with fallback to password login. The real decision is policy: whether passwords stay available for all users, for some user groups, or only during a transition period. Document which accounts keep passwords, how the fallback interacts with your MFA requirements, and whether administrators or other high-risk roles get stricter sign-in options. The sign-in path can also differ between customer users and workforce users, so test each population in a non-production environment before you change the policy for everyone.
What does a passkey rollout in Zitadel cost?
The cost has three parts: the work to plan and configure the rollout, the platform you run it on, and the staff who operate it afterward. One-time costs include design, configuration, application changes, testing and user communication. Recurring costs include hosting, PostgreSQL operations, monitoring, support for lost-device cases and staff time for policy changes and upgrades. The main drivers are the number of applications, user populations and customer organizations involved, plus any identity providers you federate. Zitadel's pricing page lists a Pro plan at US$100 per month including 25,000 daily active users, and an Enterprise plan with custom pricing. For a self-hosted deployment, ask for a fixed-scope quote that lists each deliverable, the assumptions behind it and the items that are excluded.
How long does a passkey pilot take to complete?
Pilot length depends on scope and readiness more than on the passkey feature itself. The main drivers are whether a Zitadel instance already exists, how many applications need the new sign-in, how many user groups are in the pilot, and how quickly your team approves the recovery policy. Time also goes to testing registration and self-service flows, checking fallback behavior and training the support team on recovery steps. Exit criteria should be agreed before the pilot starts, so the team knows what passing looks like. No duration applies to every environment, so ask any delivery partner to state the timeline in the written scope and to name the assumptions it depends on.
What must our team provide before a passkey rollout starts?
Your team needs to supply several inputs before configuration begins. Provide a domain for the Zitadel instance and its login pages, and confirm with the Zitadel documentation how a later domain change would affect passkeys already registered. Provide a test environment that matches the production configuration as closely as practical. Define the user groups and their differing requirements, and write a recovery policy covering lost devices and helpdesk identity checks. Name owners for the policy, application integration and day-to-day support. Finally, give the implementation team access to the relevant identity providers and to the owners of each application that will change its sign-in.
Can our in-house team roll out passkeys in Zitadel without a partner?
Often yes, if the team already runs identity services and has the capacity to finish the work. Passkey configuration itself is a policy and integration task, but it sits on top of a self-hosted platform that needs PostgreSQL, a Docker or Kubernetes deployment, and OIDC application changes. Check whether your team has experience with those layers, whether it can test across all user populations, whether it can run a security review, and whether it can keep the work moving alongside its other duties. A partner can take on bounded scope such as testing, hardening or documentation. DeployOpen plans, implements, integrates, hardens and documents self-hosted platforms in the client's own infrastructure under written, fixed-scope agreements.
Do passkeys satisfy a specific compliance control?
Passkeys alone do not satisfy a control. Your team must map the passkey setup to its own control requirements, identify which controls authentication affects, and document how passkeys, password fallback, MFA settings, recovery and audit logs address each one. Collect evidence such as policy settings, configuration records and test results. Independent auditors and certification bodies decide whether the implementation conforms, and DeployOpen prepares systems, controls and evidence for that assessment without issuing audit reports or certifications. Zitadel lists its own ISO 27001 and SOC 2 Type II certifications on its pricing page, but those cover Zitadel as a company and do not transfer to your deployment.
How does password fallback change the attack surface?
Fallback decides how much of your user base can still sign in with a password, so it is the setting that most affects exposure. Map each user group to its allowed sign-in methods and confirm the policy applies per organization in your design. Test that disabling passwords for a group blocks password sign-in as intended, including through any federated or self-service path. Review the audit trail to confirm that sign-in method, registration and recovery events are recorded in a form your security team can search. Schedule a periodic review of who still uses passwords, and document the criteria for keeping fallback in place.
How DeployOpen scopes, builds and hands over passkey rollouts
DeployOpen plans, implements and documents passkey rollouts for self-hosted Zitadel inside your own infrastructure. We start from a written scope that sets which user populations, login flows and fallback rules are covered, then build, test and hand the result over with the evidence your team needs to run it.
How we scope
- Agree in writing which customer and workforce populations move to passkeys first.
- Define the password fallback rules, and which flows keep password login during rollout.
- Confirm the Zitadel instance, organization and project layout that passkey policies will apply to.
How we build
- Configure passkey registration and sign-in for the agreed organizations and login flows.
- Test registration, sign-in, recovery and password fallback paths against the written acceptance criteria.
- Document the policy settings and the self-service steps users will follow to register a passkey.
How we hand over
- Deliver configuration records, test results and runbooks covering passkey policy changes and user support.
- Walk your identity and service desk teams through enrollment, lost-device recovery and fallback handling.
- Confirm with your team which passkey settings stay under their control after handover.
How we support
- Engagements are fixed-scope, so changes after go-live are agreed as a separate written scope.
- Ongoing support, upgrades and continuous testing are available as a retainer for self-hosted Zitadel.
- Ask any provider how they will retest passkey flows after each Zitadel upgrade on the v4 line.

