Skip to main content
All Keycloak alternatives
Keycloak vs. authentik

Both are open source. Only one of them is all of it.

Against authentik the usual Keycloak arguments do not work: both self-host, both are free to run, both speak OIDC, OAuth 2.0 and SAML. The real fork is that authentik's core is MIT while a directory inside the same repository — and the same container image — is proprietary and priced per seat, and that each server reaches in a different direction: authentik down the stack to apps that speak no auth protocol at all, Keycloak out to the directory you already have and into the later OAuth hardening work. Checked against Keycloak 26.8.2 and authentik 2026.8.5 on 9 November 2026.

Open-source parity with
OktaAuth0PingWorkOSOneLogin
At a glance
Full table →
authentikYou
Keycloak
Open source and self-hostable
Every feature under the open-source licence
Protects apps that speak no auth protocol
LDAP / AD federation with write-back
PAR, CIBA and mTLS-bound tokens at defaults
Idle memory, quickstart as published~688 MB~512 MB
The short version

Keycloak vs. authentik at a glance

DimensionauthentikKeycloak (with Phase Two)
LicenceMIT, except the authentik/enterprise/ directory, which is proprietary and needs a paid subscription to run in production✓Apache 2.0 throughout, with no directory carved out
Paid tier from the projectEnterprise at $5/user/month for workforce accounts, $0.02 for customer accounts; Enterprise Plus from $20k a year✓None. The project sells nothing, and no feature is gated
Project governanceSingle-vendor project. Authentik Security, Inc., a public benefit company founded November 2022; the project's creator is its CTO✓CNCF Incubating project, accepted 10 April 2023
ImplementationPython on Django, with Go and Rust components; PostgreSQLJava on Quarkus; postgres, mysql, mariadb, oracle, mssql or tidb
Deployment shapePublished compose runs three containers: server, worker, PostgreSQL. The worker mounts the Docker socket✓One server process and one database
Apps that speak no auth protocolProxy provider in forward-auth or full-proxy mode, plus LDAP, RADIUS and browser RDP/SSH providersNot in the project. You run a separate authenticating proxy in front
Existing LDAP or Active DirectoryLDAP source: scheduled inbound sync of users and groups, with password change written back through the Active Directory extended operation✓User storage provider with READ_ONLY / WRITABLE / UNSYNCED edit modes, registration sync back to LDAP, periodic sync and a Kerberos bridge
SCIM 2.0Both directions in the open-source tier — inbound source and outbound provider. OAuth 2.0 auth to SCIM endpoints is EnterpriseInbound SCIM API, supported since 26.8, off per realm by default. Outbound provisioning comes from the open-source Organizations extension
Custom logic in a login flowPython expressions written in the admin console and executed in the server processAuthenticator SPI — your Java runs in-process; the running server reports 139 provider interfaces
Login UI customizationPer-domain brands: title, logo, favicon and custom CSS, plus overridable email templates✓Themes override any login, account, admin, welcome or email template, deployed into the server
OpenID certificationCertified on a current build — authentik 2026.8.0, eight OP profilesCertified as Keycloak 18.0.0 (2022) for four logout profiles, and 15.0.2 for FAPI-CIBA
Managed optionSelf-host only. The vendor sells a licence and support, not hosting✓Any cloud or region you like, or a dedicated cluster at a fixed monthly price
01 — Common ground

Start with what is not different

The arguments that carry a Keycloak comparison against a commercial platform — no per-user licence, no cloud-only deployment, source you can read — mostly apply to authentik too. It is a real open-source identity server, it self-hosts, and it is developed at pace: 31 releases published so far in 2026 against Keycloak's 22.

Both of them, verified on the versions above:

  • Implement OpenID Connect, OAuth 2.0 and SAML 2.0 as an identity provider, and federate out to external OIDC and SAML providers plus the usual social logins.
  • Support the device authorization grant, token introspection and revocation, and both front-channel and back-channel logout.
  • Advertise DPoP in their discovery documents.
  • Federate users from LDAP and Active Directory, and support Kerberos.
  • Do SCIM 2.0 — in different directions, which is the subject of its own section below.
  • Hold an OpenID Foundation certification, though not on comparable versions.

So the honest version of this page is not "authentik is the hobby option." On several axes authentik is simply better, and we say which in the last section. What follows is the set of differences that actually change an architecture or a budget.

02 — Licence

MIT, Apache 2.0, and the directory in between

Read only the badge and authentik wins this: MIT is about as permissive as a licence gets, and Apache 2.0 asks slightly more of you — a NOTICE file, a patent grant, attribution on modified files. But the badge is not the offer. The repository's own LICENSE carves out directories, and one of them is not open source at all.

WhatLicence
Most of authentikMIT
Client-side JavaScriptMIT Expat
website/CC BY-SA 4.0
authentik/enterprise/The authentik Enterprise Edition licence
All of KeycloakApache 2.0

The Enterprise licence says the code in that directory "may only be used in production" with a valid subscription for the correct number of seats, that it is "forbidden to copy, merge, publish, distribute, sublicense, and/or sell" it, and that any patch you write to it belongs to Authentik Security, Inc. You may read it and you may modify it for development and testing. That is source-available, and it is a normal open-core arrangement — but it is the opposite of what MIT implies, and it sits in the same tree.

How much of the product is behind it

You do not have to guess, because a running server will tell you. Each component endpoint reports a requires_enterprise flag per type. On a freshly started, entirely unlicensed 2026.8.5:

for t in providers sources stages propertymappings policies; do
  curl -s -H "Authorization: Bearer $AK_TOKEN" \
    "http://localhost:9000/api/v3/$t/all/types/" \
  | python3 -c 'import sys,json; d=json.load(sys.stdin); \
      print(len(d), sum(1 for r in d if r["requires_enterprise"]))'
done
ComponentTypesEnterprise only
Providers124 — Google Workspace, Microsoft Entra, Shared Signals Framework, WS-Federation
Stages254 — Account Lockdown, Mutual TLS, Source, Google device trust connector
Property mappings152 — the Google Workspace and Entra mappings
Policies71 — Password Uniqueness
Sources220
Total8111

Eleven of eighty-one is not a crippled product. The open-source tier covers OIDC, SAML, LDAP, RADIUS, SCIM, Kerberos, the proxy and browser-based remote access, and most teams will never touch the other eleven. The vendor's pricing page adds a few more items that are not component types — privileged access management, exportable reports, enhanced audit logging, RADIUS EAP-TLS, OAuth 2.0 authentication on SCIM endpoints — and lists the price: $5 per workforce user per month, $0.02 per customer account, billed annually, with Enterprise Plus starting at $20,000 a year.

The point is not that the price is high. Against a commercial IAM vendor it is low. The point is that it is a per-seat meter on software you are hosting yourself, and that is the exact thing most people are leaving when they go looking for a Keycloak alternative. Keycloak has no such tier: the project sells nothing, gates nothing, and counts nobody. Everything in it is Apache 2.0.

The part worth reading before you buy

The Enterprise code ships inside the ordinary container image and is enabled by a licence key, which is convenient and has one consequence worth planning for. If a licence expires, or your user count goes past what you bought, authentik records the state and escalates: a warning to admins after two weeks, to users after four, and after six weeks it puts the API into read-only mode. The middleware then refuses every unsafe API request with HTTP 400 and denied_license.

Read the exclusions before you panic, because they are generous: GET, HEAD, OPTIONS and TRACE always pass, the flow executor is explicitly exempt so logins keep working, user create and update keep working, and the licence endpoints keep working so you can fix it. It is a configuration freeze, not an outage. It also never applies to an unlicensed install — a pure open-source deployment has no licence to expire. But it is a failure mode that exists only because there is something to buy, and it is worth knowing about before the renewal rather than six weeks after it.

03 — Defaults

What each server advertises out of the box

We started both at their published quickstarts and read the discovery documents. No tuning, no feature flags, defaults only — in authentik's case an OAuth2 provider created with the signing certificate and the three scope mappings the admin wizard assigns. Keycloak's document carries 56 keys, authentik's 26, and every key authentik publishes, Keycloak publishes too. Reproduce it in two commands:

# Keycloak 26.8.2
curl -s http://localhost:8080/realms/master/.well-known/openid-configuration

# authentik 2026.8.5 — discovery is per application, not per server
curl -s http://localhost:9000/application/o/<app-slug>/.well-known/openid-configuration
Advertised at defaultsauthentik 2026.8.5Keycloak 26.8.2
Authorization code + PKCES256 and plainS256 and plain
DPoP9 algorithms10 algorithms
Device authorization grantyesyes
Front- and back-channel logoutyesyes
Resource owner password grantyesyes
Pushed authorization requestsnoyes
CIBAnoyes
mTLS client auth and bound tokensnoyes
private_key_jwt client authnoyes
Token exchange (RFC 8693)noadvertised
iss in the authorization response (RFC 9207)noyes
Dynamic client registrationnot advertisedadvertised
Request objects / request_urinoyes
Pairwise subject identifiersnoyes
ID token signing algorithmsRS25613 algorithms
Token, userinfo and authz response encryptionnoyes

Read that table carefully, because a discovery document is not a feature list. Two rows prove it in opposite directions. authentik does implement dynamic client registration — it ships a managed goauthentik.io/oidc/dcr scope mapping for exactly that — and simply does not advertise the endpoint. Going the other way, Keycloak advertises the token exchange grant, but on a default profile the token-exchange feature is disabled and the broader flavour is still preview. Both servers do more than they say, and one of them says more than it does.

What the table is good for is the shape of each project. Keycloak's defaults carry the later OAuth hardening work — PAR, CIBA, mTLS-bound tokens, RFC 9207, encrypted tokens, request objects — because large regulated deployments ask for it, and the cost is a much bigger surface to configure and review. authentik's surface is the part almost everyone uses, and that is a defensible choice. If your security review arrives with a list of RFC numbers on it, read that list against this table before you go any further.

One asymmetry in authentik's favour, since it belongs here: its OpenID Foundation certification is current. The certified implementations list carries authentik 2026.8.0 across eight OP profiles. Keycloak's entries on the same list are Keycloak 18.0.0, certified in 2022, and 15.0.2 for FAPI-CIBA. Keycloak implements more of that surface today than it has ever certified — but a certification nobody has refreshed in four years is a fair thing for a reviewer to raise, and we would rather say so here than be asked.

The receipts

See it side-by-side

What you actually get for what you actually pay.

Feature & cost comparison
authentikYou
Keycloak + Phase Two
Open source
Every feature under the open-source licence
No per-seat licence from the project
Vendor-neutral foundation governance
OIDC, OAuth 2.0 and SAML 2.0
DPoP at defaults
PAR, CIBA and mTLS-bound tokens at defaults
Current OpenID Provider certification
LDAP / AD federation with write-back and registration sync
Kerberos desktop SSO
Outbound SCIM provisioning
Reverse proxy / forward auth for protocol-less apps
Serves LDAP and RADIUS to legacy clients
Full template-level login customization
Extend without writing Java
Runs as one service plus a database
Managed, in any cloud or region you choose
Fixed monthly cost — no per-seat licence to reconcile
04 — Reach

The applications that speak no protocol at all

This is authentik's strongest argument and it has nothing to do with OIDC. Most estates contain software that cannot be made to speak OIDC or SAML: an internal dashboard with no auth, a NAS, a wiki from 2014, a network appliance that only knows RADIUS, a Windows box somebody still has to reach. authentik has an answer for each of those in the product.

Thing you need to put a login in front ofauthentikKeycloak
An HTTP app with no authentication of its ownProxy provider, in proxy, forward_single or forward_domain mode behind nginx, Traefik or EnvoyNot in the project — run a separate authenticating proxy
An app that can only bind to LDAPLDAP provider: authentik serves LDAPNo. Keycloak consumes LDAP, it does not serve it
A VPN concentrator or switch that speaks RADIUSRADIUS provider (EAP-TLS is Enterprise)Not in the project
A desktop or server over RDP, VNC or SSHRAC provider, in the browser, in the open-source tierNot in the project

Those providers run as outposts — separate processes that authentik can deploy for you, which is why the published compose file mounts the Docker socket into the worker container and runs it as root. That is a deliberate design and it is documented, but it means the worker holds host-level control of the Docker daemon. If that is not acceptable where you are deploying, run the outposts yourself and drop the mount.

Keycloak's position here is simple and worth stating plainly: it is an identity provider and nothing else. There is no proxy, no LDAP server, no RADIUS, no remote desktop. We wrote the LDAP federation tutorial partly to answer "can Keycloak act as an LDAP server", and the answer there is the same as here: no, the traffic goes one way. The usual Keycloak estate puts oauth2-proxy or an ingress-level authenticator in front of the protocol-less apps and keeps the identity server doing identity.

Which model is better is a real question rather than a rhetorical one. One box that does all of it is fewer things to run and fewer places for a session to get lost. It is also a much larger blast radius: the thing issuing your tokens is now also terminating your RDP sessions and proxying your intranet. Decide that on your own risk appetite, not on a feature count.

05 — Users

The directory you already have, and the systems downstream

If every user will be created in the new system, skip this section. If they live in Active Directory today, or if an HR system needs to push them in, it is probably the deciding one.

Reading from a directory

authentik treats LDAP as a source: a scheduled inbound synchronization of users and groups, with group hierarchy, optional password synchronization, and the option to delete objects that have disappeared upstream. Password changes made in authentik are written back, through the Active Directory extended operation. Other attribute changes are not: the sync is inbound.

Keycloak treats LDAP as user storage, which is a different thing, and the 26.8 server administration guide defines the three edit modes:

  • READ_ONLY — "You cannot change the username, email, first name, last name, and other mapped attributes… Password updates are not supported."
  • WRITABLE — "You can change the username, email, first name, last name, and other mapped attributes and passwords and synchronize them automatically with the LDAP store."
  • UNSYNCED — "Keycloak stores changes… in Keycloak local storage, so the administrator must synchronize this data back to LDAP," which is how you add attributes to users held in a directory you are not allowed to write to.

On top of that sit twelve LDAP mapper types on a stock 26.8.2 server, a Sync Registrations switch that creates new Keycloak users in LDAP, periodic full and changed-user synchronization, and a Kerberos bridge for desktop single sign-on.

Writing to everything else

SCIM is where this comparison has recently moved, and most pages on the subject are out of date. Both servers do SCIM 2.0; they point opposite ways.

authentik 2026.8.5Keycloak 26.8.2
Inbound — something provisions users into the serverSCIM source, open-source tierSCIM API, promoted from preview to supported in 26.8
Outbound — the server provisions users into downstream appsSCIM provider, open-source tier. OAuth 2.0 auth to the endpoint is EnterpriseNot in core. The open-source Organizations extension does it

Keycloak's SCIM API is off until you turn it on per realm, needs a confidential client, and validates that the access token's aud claim is the SCIM base URL — a detail that costs an hour if you miss it, because the failure is a 401 that looks like a permissions problem. Once it is on, its own ServiceProviderConfig reports PATCH and filtering supported, with bulk, sort and ETag not supported:

# Keycloak 26.8.2, after enabling SCIM on the realm and adding an
# audience mapper for http://localhost:8080/realms/master/scim/v2
curl -s -H "Authorization: Bearer $TOKEN" \
  http://localhost:8080/realms/master/scim/v2/ServiceProviderConfig

{"patch": {"supported": true},
 "filter": {"supported": true, "maxResults": 100},
 "bulk":   {"supported": false},
 "sort":   {"supported": false},
 "etag":   {"supported": false}}

The practical read: an organization with an existing directory, group-derived authorization and desktop SSO gets all of that from Keycloak as configuration, while authentik gives you the login and leaves the rest to its provisioning APIs. Going the other way, if what you need is to push users out to a dozen SaaS applications, authentik has that in the box and Keycloak needs our organizations extension. Our SCIM explainer covers the protocol itself, and Keycloak identity provider documentation covers the brokering side.

06 — Extensibility

Python in the admin console, or Java in a JAR

Every identity project eventually needs logic that is specific to you: a check against an internal system before a user is created, a claim computed from somewhere else, a step in the login that nobody else has. The two answers are different enough to decide the whole choice.

authentik — expressionsKeycloak — SPI
Where you write itA text box in the admin consoleA Java project on your machine
LanguagePythonJava, packaged as a JAR
Where it runsIn the server process, via exec()In the server process
To deploy a changePress saveRebuild and restart the server
Composing a login journey25 stage types arranged into flows in the UI42 authenticators arranged into flows in the UI
Adding a new kind of stepNot without forking139 provider interfaces on the running server
What breaks on upgradeYour expression, against a documented object modelYour JAR, against internal interfaces that are not a stable API

If your team does not write Java, authentik's model is better and it is not close. A rule you can write, save and test in the same minute is a different experience from a Maven build and a rolling restart, and for the large class of problems that are really "branch this flow on an attribute", it is the right tool.

Two things to price in. The first is that an expression is arbitrary Python executed inside the server process — authentik's own documentation says so, and calls the ability to create or edit one "a highly privileged permission". Your admin console is a code-execution surface, and your delegation model has to treat it as one. Keycloak's nearest equivalent, script authenticators and mappers, is a preview feature that is disabled by default and still requires a deployed JAR carrying META-INF/keycloak-scripts.json, which is inconvenient on purpose.

The second is depth. Keycloak's SPIs let you replace parts of the server that authentik does not expose at all — a user storage backend, a credential type, a new kind of authentication step, a protocol mapper over the token. We build and maintain open-source extensions on exactly those interfaces, which is also how we know the trade: they are internal interfaces, they move between releases, and a provider written against them is something you own and have to carry.

07 — Verdict

When you should not pick Keycloak

authentik is the better answer when:

  • Half your estate does not speak OIDC. The proxy, LDAP, RADIUS and remote access providers are the whole reason authentik is popular in homelabs and small infrastructure teams, and they are genuinely good. Keycloak will not do this, and assembling the equivalent out of oauth2-proxy and friends is a real project.
  • Nobody on the team writes Java, and the custom logic is more than a mapper. Saving a Python expression beats building a JAR.
  • You need to push users out to SaaS applications and would rather that came with the server than with an extension.
  • A reviewer is going to ask about current OpenID certification. authentik's is on a 2026 build. Keycloak's is on 18.0.0, from 2022.
  • You want one box. If a single admin console covering SSO, the reverse proxy and remote access is the shape of system you want to operate, that is a coherent position and Keycloak does not offer it.

Keycloak earns it when:

  • You do not want a per-seat meter on software you host. Apache 2.0 throughout, nothing gated, no licence to expire, no user count to reconcile, and no vendor who can change the terms of the half you depend on.
  • There is a directory. Writable LDAP edit modes, registration sync back to LDAP, twelve mapper types, scheduled synchronization and Kerberos is a large amount of work to not have to do.
  • Your security review has a list. PAR, CIBA, mTLS-bound tokens, private_key_jwt, RFC 9207, encrypted tokens — present and advertised at the defaults.
  • You need to reach into the model. 139 provider interfaces, and a custom authenticator or user storage backend that is a first-class part of the server rather than a fork.
  • The ecosystem is the point. A CNCF Incubating project with many independent vendors behind it is a different kind of bet from a single-vendor project, both for support and for hiring people who have already run it.

And the honest closing note, which applies to either choice: the operations bill is real, and neither of these is light. Keycloak is a JVM application with a database, a cache and an upgrade cadence; authentik is three containers, a Docker socket and two supported release trains at a time. Idle on a 2-CPU, 8 GB machine immediately after start, authentik's published compose stack came to about 688 MB across its three containers and Keycloak's quickstart to about 512 MB — with the caveat that Keycloak sizes its heap at 70% of the memory limit it is given, so that figure moves with the limit, and that the Keycloak number is development mode with an embedded database while authentik's includes a real PostgreSQL. Neither is a production sizing. The reflex that Keycloak is the heavy one does not survive measurement.

Running either well is a job. That is the argument for managed Keycloak at a fixed monthly price rather than a per-user meter. If you would rather run it yourself, we support teams who do, and we publish backport images for older Keycloak branches because upstream tags them without announcing them. If residency is driving the decision, our EU data residency page states where identity data sits and where it does not, including the parts that are not flattering.

Migration

Evaluating both, or already on one?

Moving between two standards-based identity servers is mostly client configuration and a user import. The expensive parts are the custom logic, whatever your directory is doing, and anything sitting behind a forward-auth proxy. We will tell you plainly which of the two fits, including when the answer is not us.

See how we migrate teams to Keycloak
How we deliver

Two ways to run Keycloak with Phase Two

Managed Hosting

Managed Keycloak Hosting

Multi-region, high-availability Keycloak with 100+ extensions. Simple, cost-conscious, and customizable.

  • Unlimited users on every tier
  • Up to 99.99% uptime SLA & SOC 2
  • Custom domains & branding
  • Dedicated clusters from $149/month
Enterprise Support

Enterprise Keycloak Support

Run your own Keycloak? Get expert escalation, security patches, and architecture guidance — at any level of complexity.

  • 24/7 escalation with named engineers
  • Security advisories & patch backports
  • Architecture & migration reviews
  • Dedicated Slack channel
Learn more
FAQ

Frequently asked questions

Is authentik a good alternative to Keycloak?

For a lot of teams, yes. authentik is a genuine open-source identity server with OIDC, OAuth 2.0, SAML, SCIM, LDAP and Kerberos, a flow builder you drive from the admin console, Python expressions instead of Java, and — uniquely among the usual Keycloak alternatives — providers that put a login in front of applications that speak no authentication protocol at all, including a reverse proxy, an LDAP server, RADIUS and browser-based RDP and SSH. Keycloak answers with Apache 2.0 across the whole project and no paid tier, LDAP and Active Directory federation with writable edit modes and registration sync, a much broader OAuth surface at its defaults, 139 extension interfaces, and CNCF governance with many independent vendors behind it.

Is authentik fully open source, and what does the Enterprise licence cover?

Most of authentik is MIT, but the authentik/enterprise/ directory of the same repository is under a proprietary Enterprise Edition licence that permits production use only with a paid subscription for the correct number of seats and forbids redistribution. On a running 2026.8.5 server, 11 of the 81 provider, source, stage, property-mapping and policy types report that they require Enterprise — including the Google Workspace and Microsoft Entra providers, Shared Signals Framework, WS-Federation, a mutual-TLS stage and the password-uniqueness policy. Enterprise is priced at $5 per workforce user per month and $0.02 per customer account, billed annually. Keycloak is Apache 2.0 throughout and the project has no paid tier at all.

Can Keycloak do forward auth like authentik's proxy provider?

No. Keycloak is an identity provider and nothing else — there is no proxy provider, no LDAP server, no RADIUS and no remote desktop access in the project. authentik has all four, and its proxy provider runs in full-proxy, single-application forward-auth or domain-level forward-auth mode behind nginx, Traefik or Envoy. The usual Keycloak equivalent is to put a separate authenticating proxy such as oauth2-proxy in front of the applications that cannot speak OIDC, which works well but is another component to run.

Does Keycloak support SCIM?

Yes, as of Keycloak 26.8, and this is the fact most comparisons still get wrong. The SCIM API was a preview feature in 26.7 and is supported in 26.8. It is inbound: other systems provision users and groups into a Keycloak realm. You enable it per realm, call it with a confidential client, and the access token's aud claim has to be the realm's SCIM base URL. Its ServiceProviderConfig reports PATCH and filtering supported, and bulk, sort and ETag not supported. Outbound provisioning — Keycloak pushing users to downstream applications — is not in core and comes from our open-source Organizations extension. authentik has both directions in its open-source tier.

Which is lighter to run, Keycloak or authentik?

Keycloak, which surprises people. Idle and immediately after start on a 2-CPU, 8 GB machine, the three containers of authentik 2026.8.5's published compose stack used about 688 MB in total — 371 MB for the server, 266 MB for the worker, 51 MB for PostgreSQL — while Keycloak 26.8.2's quickstart container used about 512 MB under a 1.5 GB limit. Two caveats in Keycloak's disfavour and one in its favour: Keycloak sizes its JVM heap at 70% of the memory limit it is given, so that number rises if you give it more; the Keycloak figure is development mode with an embedded database while authentik's includes a real PostgreSQL; and Keycloak is one container against three. Neither is a production sizing, but "the Java one is the heavy one" is not what the measurement says.

Can I customize the login page in authentik the way Keycloak themes let me?

Not to the same depth, though the trade is more interesting than it sounds. authentik gives you per-domain brands with a title, logo, favicon and arbitrary custom CSS, plus overridable email templates — and, more importantly, a flow builder that lets you rearrange the login journey itself from 25 stage types without writing anything. Keycloak themes override any template, message bundle or asset across the login, account, admin, welcome and email flows, so the markup is yours, but the flow is composed from the authenticators that exist. If you want to change what the loginlooks like, Keycloak goes further; if you want to change what it does, authentik gets you there faster.

Two open-source servers. One decision.

A 30-minute architecture review covering your directory, the applications that cannot speak OIDC, and the custom logic you need — and a straight recommendation.