Migrate from ForgeRock to Keycloak

A planning guide for teams on ForgeRock Access Management or PingOne Advanced Identity Cloud who want to rebuild authentication as self-hosted Keycloak flows, move identities, and choose a path that fits their own schedule.

On this page

Migrate from ForgeRock to Keycloak: what the move involves

Moving from ForgeRock Access Management, now part of Ping Identity after Thoma Bravo completed its acquisition on August 23, 2023, to Keycloak is a rebuild of authentication flows, clients and identity data, not a configuration export. The ForgeRock authentication trees, journeys and scripts have no direct import path into Keycloak, so each login sequence has to be redesigned as a Keycloak authentication flow and tested against the applications that depend on it. Usually the work is shared between the identity team, which owns the directory and policy decisions, the application teams that own their OIDC or SAML client settings, and an implementation partner or internal platform engineers who build and harden the new environment. Expect the largest share of effort to sit in the flows and the application cutover, not in standing up the server.

The short answer on effort and risk depends on how many trees, scripts, custom nodes and connected relying parties exist, and on how much of the user base is tied to the ForgeRock directory. Start with an inventory: list every tree, its entry point, the applications bound to it, and any custom Java or script logic that Keycloak would need to replace with a authenticator, a required action or an SPI. For the identity data, confirm with Ping which export format and password hash handling apply to your deployment, because the Keycloak side offers realm JSON export and import, but that mechanism is documented with limitations as a backup tool and requires all nodes to be stopped while it runs. Plan the directory move around a user federation or staged import, not a single file load.

A self-hosted Keycloak path is one option among several, and not every ForgeRock estate should take it. Some organizations will stay on PingAM because their trees are heavily customized or because they need vendor support on a defined lifecycle, and others will consider ZITADEL or WSO2 Identity Server for different reasons. Before you commit, confirm the protocols you need (OpenID Connect, OAuth 2.0 and SAML 2.0 are covered by Keycloak, while WS-Federation is not), the operator skills you have, and who carries production support. Run the decision as a written scope with a clear go or no-go checkpoint, and keep the existing platform running until every relying party has passed testing on the new one.

Which ForgeRock capabilities map cleanly to Keycloak

This table compares the main capabilities of ForgeRock Access Management and PingAM with their Keycloak equivalents and marks each as clean, needs rework or gap. Use it to scope the migration work, then confirm every gap against the exact ForgeRock or PingAM version you run, because feature coverage differs between releases.

CapabilityForgeRock or PingAMKeycloakStatus
OIDC and OAuth 2.0 clientsOAuth 2.0 and OIDC clients with scopes, grant types and token settingsClients with OpenID Connect and OAuth 2.0 support, scopes and client authenticationClean: recreate clients and map redirect URIs and scopes
SAML 2.0 connectionsSAML 2.0 service providers and identity providers with attribute mappingSAML 2.0 clients and identity brokering with attribute mappersClean: confirm attribute names and signing settings per app
Authentication treesNode-based trees with branching on conditions and custom nodesAuthentication flows built from executions and subflows, with custom authenticators where neededNeeds rework: redesign each tree as a flow and rebuild custom nodes as authenticators
Journeys and policiesJourneys (trees) for registration, progressive profiling and step-up loginRequired actions, conditional flows and custom SPIs for registration and profile stepsNeeds rework: rebuild journeys in flows and test each branch
User federation with LDAPDirectory connections to LDAP and Active Directory through the ForgeRock or Ping directoryBuilt-in LDAP and Active Directory user federation with attribute mappingClean: confirm group mapping and password policy behavior
Identity brokeringSocial and external identity provider connectionsIdentity brokering to OIDC, SAML and social providersClean: confirm claim mapping for each external provider
Admin and self-serviceAdmin console and end-user self-service screensAdmin console, account console and customizable themesNeeds rework: rebuild custom self-service pages as themes or extensions
Fine-grained authorizationPolicy decision point and entitlement-style policiesAuthorization services with resources, scopes and policies on Keycloak clientsGap for complex policy sets: confirm equivalence with your policy export before cutover

Moving identities and integrations out of ForgeRock

A ForgeRock to Keycloak move is less a single export than six linked workstreams: identity data, credentials, directories, client registrations, custom logic and downstream systems. Each one can block cutover, so inventory them before any realm is built. The ForgeRock export path and its password hash handling must be confirmed with Ping or against your own deployment.

Identity data export

Identify every store that holds users, groups and attributes, including the ForgeRock directory and any external sources. Keycloak imports realms as JSON through kc.sh import, but that format is not a general backup, and the documentation says all nodes must be stopped while export runs. Confirm with Ping which export formats your ForgeRock or PingOne Advanced Identity Cloud version produces, and map each attribute to a Keycloak user attribute before any bulk load.

Password handling

Passwords are the item most likely to force users to reset at cutover. Confirm whether your ForgeRock deployment can export password hashes, in what hash format, and whether Keycloak can verify them without a reset. If hashes cannot move, plan staged credential migration at first login or a forced reset window, and agree the choice with the security owner in writing.

Directory dependencies

Check which applications read ForgeRock's directory directly over LDAP instead of through the authentication service. Keycloak supports user federation with existing LDAP and Active Directory servers, so some directories can stay in place as a federated source. Document each bind account, search base and schema extension, because a missed dependency surfaces only after cutover.

Application client re-registration

Each OIDC or SAML relying party registered in ForgeRock must be recreated as a Keycloak client with matching redirect URIs, signing certificates and scopes. Build the list from the ForgeRock configuration, not from memory of who uses the platform. Keycloak Operator custom resources such as KeycloakOIDCClient can keep these definitions in version control if your team manages Kubernetes.

Custom authentication logic

ForgeRock authentication trees encode branching logic, step-up rules and custom nodes that have no direct copy in Keycloak. Translate each tree into Keycloak authentication flows and identify the logic that needs a custom authenticator or an external service. Test each path, including failed MFA, account lockout and password reset, because these branches are where most rebuilt flows break.

Downstream integrations

Map what consumes identity tokens or user events beyond the applications themselves, such as provisioning jobs, audit pipelines, API gateways and session checks. Each integration may assume specific claim names, token lifetimes or a SCIM feed. Confirm each consumer with its owner and run them against Keycloak in a staging realm before any production switch.

The migration sequence from inventory to decommission

This sequence moves a ForgeRock estate to Keycloak in controlled stages, so each application is proven on a pilot realm before any production user is switched. Every step ends with a named artifact that the next step depends on.

  1. Inventory trees, journeys, clients and directories

    Your identity engineers and application owners list every authentication tree, journey, OAuth 2.0 and OIDC client, SAML connection, user data store and downstream integration that depends on ForgeRock Access Management or the Ping-hosted service. Each item is recorded with its owner, protocol, claims or attributes it sends, and the user population it serves. The output is an inventory register that is reviewed and signed off by the application owners. The step is done when every entry has an owner and a disposition: migrate, rebuild, retire or keep on Ping.

  2. Map authentication trees to Keycloak flows

    Architects translate each tree node into its Keycloak equivalent, covering password checks, MFA steps, conditional branches, progressive profiling and account lockout. Nodes with no direct equivalent are flagged for redesign with custom authenticators or an external service, and the team records which behaviors change for users. The output is a flow map that lists each source tree, its target Keycloak authentication flow, and every accepted difference. Confirm the gap list with the security team before any build starts, since a missing step can weaken a control.

  3. Build and test a pilot realm

    Engineers deploy a non-production Keycloak realm on the organization's own infrastructure, configured for production-style settings, and rebuild the clients and flows for one low-risk application. Testers run the functional, negative and session-handling cases from the inventory against this realm. The output is a tested Keycloak flow set with a test report and a list of defects closed or accepted. Do not move on until the pilot passes the security team's review of token contents and session lifetimes.

  4. Import identities and set the password strategy

    Teams export user records from the ForgeRock directory as LDIF or through its own tooling, then load them into Keycloak through an import, a user federation link to the existing directory, or both. Password handling is decided explicitly: if hashes can be exported and the hashing scheme is supported, users keep their passwords, and if not, the realm uses forced resets or a controlled cutover window. Ask Ping or your ForgeRock administrators to confirm which hash formats and export methods your version supports. The output is an identity import log with record counts reconciled against the source and an approved password strategy.

  5. Run in parallel and cut over application by application

    Each application moves in its own change window while ForgeRock continues to serve the others. The team switches the application's client registration to Keycloak, keeps a documented rollback path to the original tree, and monitors sign-in success, error rates and support tickets for the first days after the switch. Operations uses Keycloak metrics to watch login throughput and failures during this period. The output is a signed cutover plan per application and a record of each completed switch, with the rollback option closed once the owner accepts the result.

  6. Decommission ForgeRock and archive evidence

    Once every inventory entry is migrated, retired or formally kept on Ping, the team stops routing traffic to the ForgeRock services, removes the old client registrations, and disables the directory's write access before shutdown. Audit logs, configuration exports and the migration records are retained under the organization's records policy so that compliance assessors can trace each change. The step closes when the inventory register shows no active dependency on ForgeRock and the decommission record is approved by the identity owner. Confirm retention periods with your compliance function, since they vary by sector.

How to run Keycloak in production after cutover

Once the flows are cut over, the production decisions that matter most are the database, the high availability design and how upgrades are applied. Keycloak supports several production databases, including PostgreSQL 14 to 18, MariaDB, MySQL, Oracle Database, Microsoft SQL Server, Amazon Aurora PostgreSQL and Azure SQL, and the default file-based database is for development only. Pick the database your organization already operates and can back up and patch on its own schedule. Keycloak documents three high availability designs: a single cluster, optionally spread across availability zones, multi-cluster deployments without an external Infinispan cluster, and the deprecated multi-cluster v1 design. Both supported designs need a synchronously replicated database, so confirm with your database team that the replication topology meets that requirement before go-live.

For upgrades, install the Keycloak Operator through Operator Lifecycle Manager, the recommended method, and set operator updates to manual approval, which the Operator documentation strongly recommends to avoid unintended automatic upgrades. Keycloak migrates its database schema automatically at startup by default. For large deployments, the upgrading guide suggests applying the schema SQL manually, so plan a change window for that step. Keycloak ships four minor releases a year and a major release every two to three years, and breaking changes in minor releases are opt-in. Read the release notes for each minor version, test your realm configuration in a staging cluster, and record which version each environment runs.

Realm export is not a backup. The kc.sh export and kc.sh import commands write realms as JSON, the documentation warns of limitations as a backup and restore mechanism, and all nodes must be stopped while the process runs. Use it for configuration migration between environments, not for routine recovery. Backup and restore of the database, secrets, certificates and any custom providers need their own design, with recovery objectives agreed with the business, and should be tested by restoring into a separate environment. Confirm the design with your operations team and, where your compliance program applies, with your assessor.

What drives the cost and duration of this migration

This table lists the factors that raise or lower the effort of moving from ForgeRock or PingAM to Keycloak, with the reason each one matters and how to keep it under control. Use it to see which parts of your estate will set the scope before any quote is written. No duration figures are given here, because a fixed-scope quote follows from the written inventory.

DriverWhy it changes effortHow to keep it down
Number of authentication trees and journeysEach tree with branching, retries, risk checks or progressive profiling must be re-expressed as Keycloak authentication flows, custom authenticators or required actions, and each one needs testing.Inventory every tree and retire unused journeys first. Group near-identical trees into shared flows.
Count of relying applicationsEvery OIDC client, SAML connection and header-based or proxied app needs its own client, redirect URIs, scopes and attribute mappers, plus cutover testing.Classify apps by protocol and risk. Move low-risk apps in batches and standardize client templates.
Custom authentication logicScripted nodes, custom Java or Groovy logic and calls to external services have no direct equivalent and usually need rewriting as Keycloak SPI providers or external checks.List every script and external call. Decide early which logic belongs in the identity layer and which can move to the application.
Directory size and schemaLarge user counts, custom attributes and multiple realms or organizations lengthen export, validation and reconciliation. Keycloak imports realms as JSON, so attribute mapping must be planned per store.Confirm user counts, attribute usage and unused fields before extraction. Plan a read-only pilot import.
Directory and federation topologyExisting LDAP or Active Directory sources, the ForgeRock directory and any PingDirectory or PingFederate links determine whether users are federated, migrated or both during the transition.Prefer federation to the source directory for the transition period, then migrate identities in one controlled step.
Password handlingPassword hashes cannot always be moved in a usable form. Users may need to re-authenticate or reset passwords, which adds communication, help desk and rollout work.Confirm with the current vendor and your own configuration which hash formats can be exported. Plan a lazy migration or staged reset for the rest.
High availability designKeycloak clusters need a synchronously replicated database and a chosen multi-site pattern. Each design adds infrastructure, failover testing and runbooks.Decide the availability target and site count before build. Keep one reference design across environments.
Number of environments and release cadenceEach environment needs its own realm configuration, secrets, certificates and data handling. Keycloak plans four minor releases a year, so upgrades must be scheduled into the project.Use infrastructure as code and realm exports, and keep the Operator on manual approval for updates.

What usually goes wrong in a ForgeRock to Keycloak move

Most failed identity migrations break at the seams: logic that does not translate, credentials that do not carry over, and cutovers with no way back. The cards below cover six risks that recur in ForgeRock to Keycloak projects, each paired with a prevention step to settle before work starts.

Treating authentication trees as a one-to-one export

ForgeRock authentication trees combine nodes, branches and scripted decisions that have no single equivalent in Keycloak. Teams that expect a file-level conversion usually find that step-up logic, risk-based branching and account lockout behaviour must be rebuilt as Keycloak authentication flows and custom authenticators. Inventory every tree, note which nodes carry business rules, and test each rebuilt flow against the original outcomes for the same user population.

Losing password and credential continuity

Users expect their existing passwords and second factors to keep working after cutover. Keycloak can import users with password hashes only when the hash algorithm is supported, so hashes from the ForgeRock store may not carry over unchanged. Confirm with the vendor how credentials are exported, which hash format they use, and which factors must be re-enrolled, and plan a communication and re-enrollment window for users who cannot migrate silently.

Undocumented claims and attribute mappings

Downstream applications often depend on specific token claims, header values or attribute names that nobody wrote down. When these differ in Keycloak, applications fail in ways that look like login problems. Export every client's expected claims, map each one to a Keycloak protocol mapper, and verify the tokens with each application owner before any production switch.

Cutover without a rollback path

A one-time switch of identity sources leaves no route back if a critical application breaks at 9 a.m. on a working day. Keep ForgeRock running and reachable, define which applications move in waves, and write down the exact steps to repoint each client back. Rehearse the rollback in a staging realm before the production cutover, not after it is needed.

Directory replication gaps

ForgeRock often sits in front of, or replicates with, an LDAP directory that other systems still read directly. If Keycloak federates a copy that drifts, password resets, account disablement and group changes stop matching across systems. Map every consumer of the directory, decide whether Keycloak will federate it or hold the authoritative copy, and test a disabled account propagating through every path.

Unplanned Keycloak upgrades

Keycloak ships four minor releases a year, and the project states that breaking changes in a minor release are opt-in. Even so, a team that upgrades the server or the Operator without a plan can change schema, defaults or flow behaviour during a migration. Pin the version for the migration, set operator updates to manual approval, and schedule upgrades only after the production cutover is stable.

How the move differs by starting point

If you operate ForgeRock Access Management yourself, now sold under the Ping name as PingAM, you own the whole stack: the server, the configuration store, the directory connections and the upgrade schedule. Your inventory starts with the software you run and the authentication logic you have built, not with a vendor export. Treat the authentication trees as the core asset, because Keycloak uses flows rather than trees, and each tree branch has to be redesigned and tested.

  • Authentication trees: List every tree, node type, scripted node and custom callback. Map each to a Keycloak authentication flow, required action or custom authenticator, and note any logic Keycloak does not provide out of the box.
  • Configuration and deployment: Record realms, OAuth2 and OIDC clients, SAML entities, policies and the Keycloak-relevant parts of your deployment, including how your current nodes are clustered.
  • Operations and backup: Confirm how you back up and restore today. Keycloak's realm export is documented as having limits as a backup mechanism, and the export requires all nodes to be stopped, so plan a separate backup strategy.
  • Upgrade cadence: Check which ForgeRock or Ping release you run and whether it is still receiving support, since that sets how urgent your timeline is.

Confirm with your Ping support contact what is still supported on your current version before you commit to a date.

Questions buyers ask before moving from ForgeRock to Keycloak

What drives the cost of moving from ForgeRock to Keycloak?

The largest cost drivers are the number and complexity of authentication trees, the number of applications that depend on them, and the size of the identity store. Each authentication tree is a journey with its own branching logic, so a tree with many risk checks, social login branches and step-up rules takes more work to rebuild as Keycloak authentication flows than a simple username and password tree. Costs fall into one-time items (inventory, design, rebuilding flows, migrating identities, testing, cutover) and recurring items (hosting, database operations, patching, monitoring, and any support subscription you choose). Ask any partner or vendor for a quote that lists these components separately, and ask how each application's login path is counted. Keycloak itself is licensed under the Apache License 2.0, so the software licence line is not the main variable. Confirm with your Ping or ForgeRock account team what your current subscription covers and what contractual notice applies before you stop renewing.

How long does a ForgeRock to Keycloak migration take?

Duration depends on the inventory, not on the Keycloak software, which installs quickly on its own. The main factors are how many authentication trees and journeys exist, how many relying applications need new client configuration, how many users and directory attributes must move, and how many environments (development, test, production) must be rebuilt. Teams with custom Java plugins or scripted nodes in their trees will need longer for design and testing because those behaviours must be re-expressed in Keycloak terms, which may involve custom authenticators. Plan time for parallel running, user communication and rollback rehearsal. Keycloak's own upgrading guide and release policy, with four minor releases a year since Keycloak 26.0, mean your target version should be fixed early so testing is not repeated. Ask for a timeline that is tied to a written scope with named deliverables.

What does our team need to provide for the migration?

You need to supply access and decisions that only your organization can give. This includes exports or read access to the ForgeRock configuration, a list of every application and its protocol (OpenID Connect, OAuth 2.0 or SAML 2.0), the authentication tree logic with its business rules, and the directory schema and attribute mappings. You also need named owners for each application, a test plan with users who can validate logins, a change window approved by operations, and a decision on the target hosting environment, including the database and high availability design. Keycloak supports several production databases, including PostgreSQL 14 to 18, so the database choice must be made early. Security and compliance teams should define password policy, MFA requirements and evidence they need. Without these inputs, any quote will carry risk allowances that raise cost.

Can our internal team migrate ForgeRock to Keycloak alone?

An internal team can do it alone if it already operates identity infrastructure and has people with Keycloak, LDAP and protocol experience, and if the estate is small enough to test thoroughly. Many organizations split the work: internal staff own the applications, business rules and sign-off, while an implementation partner handles flow design, identity migration scripts, hardening and documentation. The decision depends on skills that are scarce, such as directory replication and token lifecycle knowledge, and on whether you can staff a cutover and an on-call rota. DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades and documents self-hosted open-source platforms in your own infrastructure, and its engagements are fixed-scope with written deliverables. Ask any partner to show how knowledge will transfer to your staff.

How do identities and passwords move from ForgeRock to Keycloak?

Identities move by exporting user records and mapping them to Keycloak users, but password hashes are the hard part. Keycloak can import realms as JSON with the export and import commands, and the documentation warns that this is not a complete backup and restore method and that all nodes must be stopped while it runs, so it should be treated as a migration tool rather than routine backup. Keycloak can also federate existing LDAP and Active Directory servers, which lets users keep their directory credentials while you transition. If password hashes cannot be exported in a compatible format, the usual options are federation during a transition period, forced password reset or a progressive migration on first login. Ask your ForgeRock or Ping team which hash algorithms are in use and whether a hash export is available under your contract.

Can ForgeRock and Keycloak run in parallel during cutover?

Yes, parallel running is a common pattern, and it is usually the safest way to cut over application by application. Each relying application can be pointed at Keycloak in a test environment, then in production, while the rest stay on the existing platform. This requires that both platforms can reach the same user population, typically through directory federation or synchronized identities, and that session and token behaviour is documented for each app. Keep the old platform available until rollback has been rehearsed and the agreed exit criteria are met. Keep in mind that Keycloak upgrades use database schema migration at startup by default, or manual SQL for large deployments, so plan the parallel environment carefully. Confirm with your current vendor how long existing support and environments remain available during the overlap.

Should we move to Keycloak or stay on a Ping product?

The choice is a business decision that should compare protocol needs, directory dependencies, release lifecycle and who operates the platform. Keycloak is open source and self-hosted, which gives you control over upgrades and hosting, but it also means your organization or a partner owns operations, patching and backups. Staying on a Ping product keeps operations with the vendor but leaves you dependent on its roadmap and support terms. Make the decision from a written inventory and a cost model that covers both paths. Confirm with Ping which support windows apply to your current versions, and with your architects whether any relying party needs protocols that Keycloak does not cover in your environment.

How DeployOpen scopes and runs a Keycloak migration

DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For a ForgeRock or PingOne Advanced Identity Cloud move to Keycloak, we start with a written scope that covers your authentication trees, directory dependencies and applications before any build work begins.

How we scope

  • Inventory every authentication tree, journey and application that depends on the current ForgeRock or Ping setup.
  • Map each tree node and decision path to a Keycloak authentication flow, identifying where behavior must be rebuilt by hand.
  • Agree deliverables, timelines and exclusions in writing before work starts, since most engagements are fixed-scope.

How we build

  • Stand up Keycloak on your chosen database and topology, following the production configuration and high availability guidance.
  • Plan identity migration from the ForgeRock directory, testing attribute mapping and password handling with a non-production copy.
  • Test each rebuilt flow, federation link and client with your security and application teams before any cutover is scheduled.

How we hand over

  • Document the realm configuration, flows, clients, federation settings and the cutover runbook in a form your operations team can reuse.
  • Set up backup, upgrade and metrics procedures, including a documented approach to schema migration and operator update approval.
  • Walk your team through operation of the platform and record the evidence that supports your internal or external compliance assessments.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover, scoped in writing.
  • Ask any quote to separate one-time migration work from recurring operations, upgrades and testing effort.
  • DeployOpen prepares systems and evidence for compliance assessments but does not issue audit reports or certifications.

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.