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.
| Capability | ForgeRock or PingAM | Keycloak | Status |
|---|---|---|---|
| OIDC and OAuth 2.0 clients | OAuth 2.0 and OIDC clients with scopes, grant types and token settings | Clients with OpenID Connect and OAuth 2.0 support, scopes and client authentication | Clean: recreate clients and map redirect URIs and scopes |
| SAML 2.0 connections | SAML 2.0 service providers and identity providers with attribute mapping | SAML 2.0 clients and identity brokering with attribute mappers | Clean: confirm attribute names and signing settings per app |
| Authentication trees | Node-based trees with branching on conditions and custom nodes | Authentication flows built from executions and subflows, with custom authenticators where needed | Needs rework: redesign each tree as a flow and rebuild custom nodes as authenticators |
| Journeys and policies | Journeys (trees) for registration, progressive profiling and step-up login | Required actions, conditional flows and custom SPIs for registration and profile steps | Needs rework: rebuild journeys in flows and test each branch |
| User federation with LDAP | Directory connections to LDAP and Active Directory through the ForgeRock or Ping directory | Built-in LDAP and Active Directory user federation with attribute mapping | Clean: confirm group mapping and password policy behavior |
| Identity brokering | Social and external identity provider connections | Identity brokering to OIDC, SAML and social providers | Clean: confirm claim mapping for each external provider |
| Admin and self-service | Admin console and end-user self-service screens | Admin console, account console and customizable themes | Needs rework: rebuild custom self-service pages as themes or extensions |
| Fine-grained authorization | Policy decision point and entitlement-style policies | Authorization services with resources, scopes and policies on Keycloak clients | Gap 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.
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.
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.
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.
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.
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.
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.
| Driver | Why it changes effort | How to keep it down |
|---|---|---|
| Number of authentication trees and journeys | Each 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 applications | Every 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 logic | Scripted 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 schema | Large 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 topology | Existing 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 handling | Password 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 design | Keycloak 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 cadence | Each 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.
If your identities live in PingOne Advanced Identity Cloud, the formerly ForgeRock cloud service, you do not control the underlying infrastructure, so your export depends on what the service lets you extract. Thoma Bravo completed its acquisition of ForgeRock on August 23, 2023 and combined it into Ping Identity, so your account and support relationship may now run through Ping rather than the original vendor. Confirm your contract terms and export rights before you plan the extraction.
- Export rights: Ask Ping in writing what user data, credentials and configuration you can extract, in what format, and whether password hashes are included. Do not assume hashes will come out in a usable form.
- Journeys and scripts: Inventory every journey, custom script and integration hook. These rarely export cleanly and usually need to be rewritten as Keycloak flows or extensions.
- Tenant data residency: Note the region where your tenant is hosted and whether your target self-hosted Keycloak must stay in the same jurisdiction.
- Parallel running: Plan for both platforms to issue tokens during cutover, so users are not locked out while applications move one at a time.
Ask for the export procedure and its limits in writing before you schedule any cutover date.
Many organizations on ForgeRock or Ping use the platform mainly as a front door to an existing directory. Here the identity store is often Active Directory or LDAP, and Keycloak's user federation can connect to those servers directly, which may let you leave identities where they are. The risk shifts from moving users to reproducing the attribute mappings, group logic and password behavior your applications depend on.
- Federation links: Record each LDAP or AD connection, its bind account, search base, filters and sync mode. Keycloak supports user federation with existing LDAP and Active Directory servers, so confirm which of these you can reuse.
- Attribute and group mapping: List every claim your applications expect. Map each one to a Keycloak mapper and test with real application claims in a non-production realm.
- Password and credential handling: Confirm where passwords are verified today, and whether any MFA or password policy lives in the ForgeRock layer rather than the directory.
- Directory change control: Agree with the directory owners who may write to these servers during the move, so Keycloak does not create conflicting account changes.
In a fixed-scope plan, ask for the attribute and claim inventory as a named deliverable before any build work starts.
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.

