Open-source alternatives to Auth0

Keycloak, ZITADEL and authentik can each replace Auth0 for customer login in a self-hosted setting. The right choice depends on tenancy model, protocol needs and how much of the password migration you can complete without the vendor.

On this page

Which open-source Auth0 alternative fits your customer identity needs

For multi-tenant customer identity, ZITADEL is the strongest starting point among the options in this group, because it structures tenants as Identity System, Organizations and Projects, with data and policies isolated at several levels. Keycloak suits teams that need the broadest protocol and federation coverage, since it supports OpenID Connect, OAuth 2.0 and SAML 2.0 and has built-in user federation with existing LDAP and Active Directory servers. authentik fits teams that want a lighter model built around a proxy and directory, with a free edition that covers OIDC, SAML, LDAP, SCIM, RADIUS, Kerberos and proxy authentication. Your choice should follow from how many tenants you run, which applications must federate, and whether your team can carry the operating load.

Teams usually start this review at a renewal, a pricing change, a data residency requirement or a wish to avoid lock-in to one vendor's login flows. Whatever the trigger, the constraint that most often shapes the migration is the user export. Auth0 can export users through the Dashboard or the Management API create export users job in NDJSON or CSV format, but standard exports do not include password hashes. Password hashes are available only on paid plans through a support ticket, Auth0 does not guarantee a delivery date, and the option is not available on the Free tier. Confirm with Auth0 whether your plan qualifies and how long the request takes before you set a cutover date, because users whose hashes do not arrive will need a password reset flow on the new platform.

Before you pick a platform, list the login flows your customers use today, including social logins, passwordless options, custom database connections and any Actions or hooks that run during login. Each one needs a named equivalent on the target platform or a decision to retire it. Ask each candidate vendor to demonstrate those flows against your own tenant model, not a demo tenant. A proof of concept with two or three representative tenants will show more about fit than feature matrices do, and it gives your security and compliance leads evidence for the decision.

Three self-hosted options for replacing Auth0

Auth0 customer identity can move to several self-hosted platforms, but each carries different licensing, tenancy and support terms. The three options below cover the main candidates for customer identity, and each card names the decision a team must make before choosing one.

ZITADEL for multi-tenant customer identity

ZITADEL structures tenants as an Identity System, Organizations and Projects, with data and policies isolated at several levels. That model maps closely to SaaS products where each customer needs its own login policies and branding. It supports certified OIDC, SAML 2.0, SCIM 2.0 and LDAP, and runs on PostgreSQL 14 or later with Docker Compose or Kubernetes. The trade-off is licensing: review the AGPL-3.0 license with legal before you embed or modify the code in a customer-facing product.

Keycloak for broad protocol coverage

Keycloak is Apache 2.0 licensed, is a CNCF incubating project, and supports OpenID Connect, OAuth 2.0 and SAML 2.0. Its built-in federation with LDAP and Active Directory suits organizations that also run workforce directories alongside customer logins. Realm import and export uses the kc.sh export and kc.sh import commands, but the documentation warns that this is limited as a backup mechanism and requires all nodes to be stopped while it runs. Plan a separate backup strategy for production realms.

authentik and its enterprise directory

authentik's open-source core is MIT licensed and supports OIDC, SAML, LDAP, SCIM, RADIUS, Kerberos and proxy authentication. The enterprise directory features sit under the separate authentik EE License, so confirm which features your flows depend on before committing. The free edition comes with community support only. If you need ticket-based support, SLAs or FIPS compliance, those are paid tiers that you should price against your own requirements.

Support model as a selection criterion

Community support is the model that comes with the free editions of these platforms, so an internal team or a paid partner must own incident response. Ask each vendor which support tiers cover production outages, security advisories and upgrade paths. Then compare that against your own on-call capacity. For customer-facing identity, a login outage affects revenue directly, so this cost often matters more than the licence fee.

Licensing review before selection

Each platform uses a different license, and the license determines what you must disclose or publish if you modify the code and offer it to customers. Ask legal to review the license text for every component you plan to deploy, including any enterprise or extension directories. Record the decision in your architecture file so auditors and future teams can trace why a platform was chosen.

How Auth0 capabilities map to self-hosted options

This table maps the main Auth0 identity capabilities to self-hosted Keycloak, ZITADEL and authentik, with gaps marked. Use it to shortlist platforms, then confirm each entry against the current documentation for the version you plan to deploy.

CapabilityKeycloakZITADELauthentik
OIDC and OAuth 2.0 loginSupports OpenID Connect and OAuth 2.0 as core protocolsSupports certified OIDC for customer and workforce loginSupports OIDC in the free edition, with community support only
SAML 2.0 federationSupportedSupportedSupported in the free edition
SCIM provisioningConfirm SCIM coverage in the current release and extension setSupports SCIM 2.0Supported in the free edition
LDAP and user federationBuilt-in federation with existing LDAP and Active Directory serversSupports LDAP; confirm directory sync scope for your setupSupports LDAP; Kerberos also included
Multi-tenant organizationsRealms isolate tenants; plan realm count and admin boundariesIdentity System, Organizations and Projects isolate data and policies at several levelsConfirm tenant model against your isolation requirements
Bulk user export from Auth0Import realm JSON; confirm user and credential handling for your sourceConfirm import tooling and format against the Auth0 NDJSON or CSV exportConfirm import path and attribute mapping in current docs
Password hash migrationGap to plan: Auth0 hashes exist only through a support ticket on paid plans, with no guaranteed delivery dateGap to plan: same Auth0 dependency; confirm supported hash algorithms on importGap to plan: same Auth0 dependency; confirm supported hash algorithms on import
MFA enrollmentBuilt-in OTP and WebAuthn options; users may need to re-enroll after cutoverBuilt-in MFA options; confirm enrollment carry-over from Auth0Confirm MFA stages and enrollment carry-over
Hosted login and brandingCustomizable login themes; confirm branding depth for your needsCustomizable login UI; confirm branding and custom domain optionsCustomizable flows and stages; confirm branding limits
Auth0 Actions equivalentsGap to confirm: map Actions to authentication flows and SPI extensionsGap to confirm: map Actions to ZITADEL actions and webhooksGap to confirm: map Actions to authentik policies and flows

What the Auth0 bulk user export gives you and what it leaves out

The Auth0 bulk user export gives you profile data for your user base, but it does not give you the password hashes that a self-hosted platform needs to keep existing passwords working on day one. You can start the export from the Dashboard or through the Management API with the create export users job (POST /jobs/users-exports). The output comes as NDJSON or CSV, and the file carries identity attributes, metadata and linked identities. Before you schedule anything, open a sample file and confirm that every field your target realm or tenant needs is present, including custom user_metadata and app_metadata fields, which are easy to overlook. The official reference is in Auth0's bulk user exports documentation.

Standard exports leave out password hashes. Getting them requires a support ticket to Auth0, and the option is available only on paid plans, not on the Free tier. Auth0 does not guarantee a delivery date for the hash file, so treat it as an external dependency with no committed timeline. Ask your account contact to confirm whether your plan qualifies, what format the hashes arrive in, and which hashing algorithms are covered, because your target platform must be able to verify those hashes or migrate them on first login. Put the request in at the start of the project, not at cutover. Log the ticket reference, the requester and the date in your migration plan so the dependency is visible to the program owner.

Plan the fallback now. If the hash file arrives late, arrives partial or uses an algorithm your target cannot verify, users without a usable hash need a forced password reset or a verification step at first login. Decide in advance which user segments would be affected, how the reset email is delivered, and how support handles users locked out during the window. Test both paths in a staging realm or organization with a copy of the export, including MFA enrollments that do not migrate with the password. Illustratively, if a segment of accounts has no hash, that segment should be scheduled for a reset campaign, not left to fail at the login page. Confirm each step with the migration owner before the production run.

Cost components when replacing Auth0 with self-hosted identity

This table separates the cost of an Auth0 subscription from the cost of running Keycloak or ZITADEL yourself, and marks each item as one-time or recurring. Use it to build the question list for scoped quotes, since no prices are given here. The main takeaway is that the software license is often the smallest line, and infrastructure, migration and password-flow work carry most of the effort.

Cost componentWho is paid or who carries itOne-time or recurringWhat drives it up or down
Auth0 subscriptionAuth0, under your current contractRecurringTenant size, plan tier, add-on features and the contract renewal terms you negotiate
Open-source software licenseNo license fee for Keycloak (Apache 2.0) or ZITADEL (AGPL-3.0); confirm AGPL obligations with counselNot applicableYour use of modified code and whether you need vendor-backed editions or support
Compute, PostgreSQL 14 or later, load balancing and backupsYour cloud provider or data center teamRecurringLogin volume, number of nodes, database high availability and backup retention you require
Platform architecture and deploymentDeployOpen or your internal platform team, under a fixed-scope written agreementOne-timeNumber of realms or organizations, custom themes, Docker Compose versus Kubernetes, and environments
Migration and password-flow workImplementation partner or internal engineersOne-timeWhether the Auth0 password hash export is obtained, and how users are moved or reset if it is not
Application integrationInternal application teams or implementation partnerOne-time, with ongoing changesNumber of applications, protocol mix (OIDC, SAML) and changes to login flows and tenant routing
SupportCommunity support, or a paid vendor tier such as authentik Enterprise with ticketed support, or Enterprise Plus with SLAsRecurringRequired response times, on-call expectations, and whether your chosen platform offers paid support
Internal operations skillsYour identity, security and platform staffRecurringUpgrade cadence, incident handling, security patching and the depth of in-house identity expertise

Which option fits by situation

If your product serves many business customers, each with its own users, branding and policies, ZITADEL is the option whose data model matches that shape most directly. It structures tenants as an Identity System, Organizations and Projects, with data and policies isolated at several levels, so each customer organization can be managed as a separate unit without building that boundary yourself. Auth0 Organizations customers will recognize the concept, but the mapping needs checking against your own tenancy design.

  • Organization model: Map each Auth0 tenant or organization to a ZITADEL Organization, and decide early which resources belong to the Identity System and which belong to individual customers.
  • Projects and roles: Model your application entitlements as Projects and roles, and confirm they cover the authorization patterns your product uses today.
  • Login flows: Rebuild custom Auth0 Actions and login logic as ZITADEL login behavior, and test each customer-facing flow end to end.
  • Certified protocols: ZITADEL supports certified OIDC, SAML 2.0, SCIM 2.0 and LDAP, which matters if your enterprise customers provision users through SCIM.
  • Database: Plan for PostgreSQL 14 or later as the backing store for the deployment.

Before committing, confirm with the ZITADEL project which organization and project features your planned tenancy model needs, and test them against a representative customer.

What you give up when leaving Auth0 and the usual workarounds

Moving from a managed identity platform to self-hosted ZITADEL or Keycloak trades vendor-run operations for work your team or implementation partner owns. Each card below names one thing you lose, why it matters for customer identity, and the workaround most teams use to close the gap.

Managed uptime and hosted security updates

Auth0 runs the identity service, applies patches and handles scaling for you. Self-hosted Keycloak or ZITADEL puts upgrades, high availability, database maintenance and certificate renewal on your side, so a missed security release becomes your exposure. Workaround: agree in writing who patches what, set a release-tracking cadence, and consider a retainer for scheduled upgrades and testing. Confirm the upgrade path between your current and target versions before you commit to a date.

Custom action and rule code rewrites

Auth0 Actions and legacy rules run custom JavaScript during login, such as adding claims, enforcing conditions or calling external systems. These do not port directly. Workaround: inventory every action, then re-implement each as a Keycloak protocol mapper, authentication flow step or required action, or as ZITADEL actions where the logic truly needs code. Treat each rewrite as a tested change, not a copy-paste, and keep the original behavior as your acceptance test.

Hosted login UI and branding differences

Auth0 Universal Login and its customization options are hosted for you. In self-hosted Keycloak or ZITADEL, the login pages, themes, email templates and localization become files or settings you maintain through upgrades. Workaround: list every screen customers see, including password reset, MFA enrollment and error pages, then build a theme or customized UI and test it against each supported browser and language. Confirm how custom themes survive version upgrades in the release you choose.

Password hash gaps that force resets

Auth0 does not include password hashes in standard user exports. Hashes are available only through a support ticket on paid plans, and Auth0 does not guarantee a delivery date. If that export does not arrive or cannot be imported into your target, customers must reset passwords on first login. Workaround: request the hash export early, confirm the hash algorithm with Auth0 support, and plan a fallback reset flow for any accounts without usable hashes.

Vendor-hosted anomaly detection

Auth0 Attack Protection features, such as breached-password checks, bot detection and suspicious-login signals, run as a managed service fed by Auth0's own telemetry. Self-hosted platforms do not supply equivalent signals out of the box. Workaround: map each detection you rely on to a source, such as a web application firewall, a rate limiter, a breached-password dataset you license, or a SIEM rule. Confirm which controls you need to keep evidence for before you retire the hosted feature.

Vendor support and enterprise features

Auth0 support contracts, service levels and account management are part of what you buy today. Community Keycloak and ZITADEL support comes from public channels and the project itself, and some features you may use, such as commercial SLAs or certain enterprise add-ons, come from separate vendors or paid tiers. Workaround: list the Auth0 features in use, mark which are core protocol behavior and which are paid add-ons, and ask each candidate vendor or partner for written support terms.

How to plan an Auth0 to self-hosted migration

This sequence moves customer identity from Auth0 to a self-hosted platform in controlled stages, so each application, user store and login flow is inventoried, tested and cut over with a fallback path before Auth0 is retired.

  1. Inventory applications, tenants and connections

    Your architecture or identity lead lists every Auth0 tenant, application (client), API, connection (database, social, enterprise SAML or OIDC, passwordless), Action or rule, and custom login page that depends on it. For each, record the redirect URIs, token lifetimes, scopes, and the claims the application reads. Include any multi-tenant or organization setup, since the target model must represent it. The step is done when a signed-off register maps each application to its connections, owner and cutover dependency, and when you have confirmed with Auth0 which features your plan and tenant configuration use.

  2. Request the password hash export early

    Password hashes are not part of a standard user export. According to Auth0's documentation, paid-plan customers request the hash export through a support ticket, and Auth0 does not guarantee a delivery date. Your security owner opens the request as soon as the inventory confirms which database connections hold passwords, and asks Auth0 to confirm the format, the hash algorithm for each connection, and the delivery method. The step is done when you hold written confirmation of the request, the expected file format, and a secure transfer method approved under your data handling policy. Because the option is not available on the Free tier, confirm your plan first.

  3. Export users and map to the target model

    Run the bulk export using the Dashboard or the Management API create export users job (POST /jobs/users-exports), in NDJSON or CSV format, and store the output in an encrypted location with access logging. Map Auth0 user fields, metadata, identities and linked accounts to the target realm or organization model in ZITADEL or Keycloak, and decide how each hash format will be verified or re-hashed on first login. Keycloak realm import and export is a configuration and migration aid, not a backup substitute, and its docs require all nodes to be stopped while it runs, so plan a separate backup of the source and target databases. The step is done when a mapping document is approved and a test import produces users with matching attributes and group memberships.

  4. Pilot with a test tenant

    Build the target platform in a non-production environment, import a representative sample of users from a test Auth0 tenant or an anonymized export, and connect one low-risk application. Your engineers verify OIDC or SAML flows, token claims, MFA enrollment, password login using migrated hashes, account recovery and logout. Record every gap, such as Auth0 Actions with no direct equivalent, which must be rebuilt as target-side flow customizations. The step is done when the pilot application completes login, token refresh and logout for each connection type in scope, and the defect list is either resolved or accepted by the owner.

  5. Run parallel with a documented fallback

    Keep Auth0 active for production traffic while the target platform serves a subset of applications or a controlled user group. Synchronize changes through an agreed method, and define the rollback procedure: which DNS, client configuration or application setting reverts traffic to Auth0, and who approves the switch. Monitor authentication success rates, error logs and support tickets during this phase. The step is done when the parallel period has run without unresolved authentication incidents and the rollback has been rehearsed.

  6. Cut over application by application

    Move each application in the order set by the register, updating client IDs, redirect URIs, issuer URLs and signing keys, and communicating expected re-login behavior to users. Confirm that passwords and MFA enrollments migrated as planned, and record any users who must reset credentials. The step is done when every application in scope authenticates against the target platform, the old Auth0 clients are disabled for those applications, and the cutover log is signed off by the application owners.

  7. Decommission Auth0 after retention checks

    Before closing the Auth0 subscription, confirm that your legal, audit and incident response teams have the logs, user records and configuration evidence they need under your retention policy. Export and store the configuration you must keep, then delete or disable the tenant data according to your data protection commitments. Remove the stored hash files and bulk export files from all locations, and revoke the access used for the migration. Your compliance lead records the decommission. DeployOpen prepares controls and evidence for compliance assessments, but independent auditors issue any attestation. The step is done when retention checks are complete, migration artifacts are destroyed or archived as policy requires, and the closure record is approved.

Questions teams ask before replacing Auth0

How much effort does moving off Auth0 take?

The effort depends mostly on what your Auth0 tenant does, not on user count alone. A plain username and password tenant with a few applications is far simpler than one with custom database actions, social connections, enterprise SSO, organizations and many Auth0 Rules or Actions that hold business logic. The main drivers are the number of applications and their OIDC or SAML configuration, the login flows you need to reproduce, how many custom claims and tokens your APIs depend on, and whether MFA enrollments must carry over. Ask any implementation partner for a written inventory of these items before agreeing on a fixed scope.

Can Auth0 password hashes be exported for migration?

Yes, but not through the standard export. Auth0 documents that standard user exports omit password hashes, and paid-plan customers request hash exports through a support ticket. Auth0 does not guarantee a delivery date, and the option is not available on the Free tier, so confirm eligibility with Auth0 early. If hashes are not provided, users must reset passwords on first login, or you can run a lazy migration that verifies credentials against Auth0 on each user's first sign-in and then stores the result in the new system. Plan the cutover for either path before you commit to a date.

How long does planning an Auth0 migration take?

Planning time is set by decisions and dependencies, not by a standard duration. Work that usually slows planning includes waiting for the support-ticket password hash export, mapping Auth0 Actions and custom database scripts to the new platform, agreeing on the multi-tenant model for organizations, and testing every application's login and token flow in a staging environment. Start by requesting the bulk export described in the Auth0 documentation for the user list, then confirm what Auth0 can deliver for hashes. Any timeline you receive should be tied to a written scope with named dependencies.

What does the migration need from our internal team?

The migration needs people who own the business side of identity and people who run the target platform. Your team should provide application owners who can confirm redirect URIs, scopes, claims and logout behavior, a security or compliance contact who approves the password and MFA approach, and an infrastructure owner for hosting, databases, backups and network access. Someone must also decide how customer support will handle password resets during cutover. Confirm these roles in the written scope so the migration does not stall waiting for decisions.

Can our team run ZITADEL or Keycloak after cutover?

Yes, if your team takes on operations, but the work recurs and should be staffed before go-live. Keycloak exports realms as JSON with kc.sh export, and its documentation warns that this is a limited backup mechanism and requires all nodes to be stopped during the process, so you need a proper backup and restore design. ZITADEL self-hosts with Docker Compose or Kubernetes on PostgreSQL 14 or later. Ongoing work includes version upgrades, certificate and key rotation, monitoring, incident response and security patching. DeployOpen offers upgrades, backups and support as retainers if you prefer not to carry that load alone.

Which licenses should we review before choosing a platform?

Review each license against how you plan to distribute and host the software. Keycloak is licensed under the Apache License 2.0, and the project is a Cloud Native Computing Foundation incubating project. ZITADEL is licensed under AGPL-3.0, with Apache 2.0 and MIT exceptions for specific directories, so ask counsel whether the AGPL network-use obligations apply to your modifications and deployment. authentik's core is MIT licensed, but its enterprise directory falls under a separate authentik EE License. Confirm the license of every component you deploy, including any extensions or themes, before you sign a scope.

What should we ask a partner before the migration starts?

Ask for a written scope that covers the application inventory, the login flows to reproduce, the password and MFA approach, the cutover plan, rollback steps and handover documentation. Ask who performs the Auth0 export and hash request, and how the partner will handle the target platform's backups and upgrades after go-live. DeployOpen plans, implements, integrates, hardens and documents self-hosted platforms inside your own infrastructure, and most engagements are fixed-scope with deliverables agreed in writing before work begins. DeployOpen does not publish a price list, so ask for a quote that follows from that written scope.

How DeployOpen works on this

DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades, documents and supports self-hosted open-source identity platforms inside your own cloud accounts, data centers or air-gapped networks. For an Auth0 replacement, that means agreeing in writing what moves, how users and password hashes are handled, and how login flows and tenants are rebuilt before any work starts.

How we scope

  • Inventory every Auth0 tenant, application, connection, Action and login flow that must keep working after cutover.
  • Confirm with Auth0 whether password hash exports are available on your plan, since they are requested through a support ticket.
  • Agree the tenant model for ZITADEL Organizations and Projects or Keycloak realms in a fixed-scope written document.

How we build

  • Stand up ZITADEL or Keycloak in your environment, using PostgreSQL 14 or later for ZITADEL as the supported starting point.
  • Import the Auth0 bulk user export, map attributes, and test password and MFA enrollment paths against a staging copy.
  • Run security testing on login, token and admin interfaces before production traffic is moved to the new identity provider.

How we hand over

  • Deliver architecture records, runbooks, configuration exports and the migration test results as written documentation.
  • Walk your platform, security and application teams through how tokens, redirect URIs and user lifecycle now work.
  • Prepare controls and evidence for compliance assessments, while independent auditors remain responsible for any audit or attestation.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover.
  • Backups of realm or database state follow the vendor guidance, including stopping nodes during Keycloak export and import.
  • Each new Keycloak or ZITADEL release is reviewed in a test environment before it is applied to your production identity service.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.