Study: OIDC Providers and replacement of LemonLDAP

Home » Guidelines

Expectations

See here.

Study

This is a QSOS study.
We evaluate every solution against the criteria and get a final grade. The solution with the highest score is retained.

Please, refer the to expectations to see how to evaluate every criteria.

LemonLDAP

Presentation

LemonLDAP Architecture

LemonLDAP :: NG is made up of 3 main bricks:

The primary functionalities are:

The project site mentions good references mainly in France: National Gendarmerie, Nantes Métropole, etc. with several thousand users.

Notice that LemonLDAP is not certified by the Open ID Foundation. Therefore, if it was a real candidate in this study, it would not be evaluated at all.

Screenshots

LemonLDAP portal

LemonLDAP portal applications

LemonLDAP manager

Scores

Criteria Score Comment
Development history 2 Created in 2004.
Development team 1 6 regular active developers for the last version.
Popularity 1 Few stars on GitHub, but LINAGORA has seen several companies using it, in particular for Administration services.
Contributors community 1 Developers are active around OW2 tools.
Bugs activity 1 Bugs get answers rather quickly but are not all solved.
Roadmap 2 Managed in GitLAB with tags and milestones.
Project Management 2 Managed by several persons.
Intellectual Property 2 Owned by OW2.
Distribution 2 Totally open source.
Single Sign-On (SSO) 2 -
Single Log-Out (SLO) 2 Even if we know there are bugs, SLO is an official feature.
OIDC: support for Auth Code flow with PKCE 2 (x3) = 6 Supported thanks to a patch LINAGORA submitted in Fall 2020.
Support of JWT 1 (x3) = 3 Only supports JWT for ID tokens, not access tokens.
Specifics for mobile devices 2 Thanks to the Auth Code flow with PKCE.
Groups information 2 Feasible, although the configuration is complex to setup.
Identity brokering 2 (x2) = 4 See here.
Default identity provider (brokering) 2 (x2) = 4 -
Native identity management 1 (x2) = 2 Feasible if we store users in a database, but no user interface to manager users or groups.
Users management 1 Feasible if we store users in a database, but management is done independently of LemonLDAP (e.g. direct edit on the DB).
Groups management 0 Nothing mentioned in the documentation.
Multi-factor authentication 2 (x3) = 6 See here.
Password reset 2 Supported.
Password policy 2 Supported.
Theme customization 2 Already used by LINAGORA.
LDAP synchronization 2 LemonLDAP can directly authenticate from a LDAP server.
SAML support 2 LemonLDAP can delegate authentication to a CAS server.
Ease of configuration 1 The configuration is spread in different locations and remains complicated.
Official Docker images 1 No official image, just several ones from the community. Linagora managed its own Docker images for it.
Compliance with Docker best practices 1 (x3) = 3 LINAGORA created a better one.
Scaling 2 (x3) = 6 Configuration is local, only sessions are stored in DB.
Configuration 0 Configuration cannot be edited through web services or in a gitops fashion.
HTTPS 2 No issue with that.
Logging 2 Logging works overall.
Statistics 2 Available in the manager console.
Multi-tenancy 0 (x2) = 0 It is not designed for multi-tenancy.
Database 2 (x2) = 4 LemonLDAP can work with MongoDB.
Monitoring 1 Complicated to setup.
Software Dependencies 2 A database is enough.
K8s 2 LINAGORA created a Helm package that works well.
Documentation 1 Lots of documentation, but not easy to understand.
Resource Consumption 2 It can work with less than 2 GB of memory and 2 CPUs. But under heavy loads, it needs more.

KeyCloak

Presentation

https://www.keycloak.org/

https://github.com/keycloak/keycloak

https://github.com/keycloak/keycloak-community/

Keycloak is made up of 1 Java webapp:

Keycloak runs on Wildfly application server. JGroups is the library used by Wildfly to discover the nodes and manage the replication of data.

By default JGroups use the multicast to manage the nodes. If the multicast is not available on your network you have to change for another protocol.

Keycloak use Infinispan natively to handle caching mechanism . See Here

Keycloak comes with its own embedded Java-based relational database called H2.

A shared external database like PostgreSQL, MySQL, Oracle, etc. Keycloak requires an external shared database if you want to run in a cluster

The primary functionalities are:

Screenshots

Keycloak login

Keycloak clients

Keycloak realm

Scores

Criteria Score Comment
Development history 2 First commit on github (Jun 30, 2013)
Development team 2 Red Hat company and community
Popularity 2 8600 stars on GitHub - Lot of people are using Keycloak
Contributors community 2 See here
Bugs activity 2 See here
Roadmap 1 See here
Project Management 1 Managed by Red Hat
Intellectual Property 1 Apache 2 Licence for community version
Distribution 2 Open source
Single Sign-On (SSO) 2 -
Single Log-Out (SLO) 2 -
OIDC: support for Auth Code flow with PKCE 2 (x3) = 6 -
Support of JWT 2 (x3) = 6 -
Specifics for mobile devices 2 Thanks to the Auth Code flow with PKCE.
Groups information ? -
Identity brokering 2 (x2) = 4 See here
Default identity provider (brokering) ? (x2) = ? -
Native identity management 2 (x2) = 4 Feasible if we store users in a database
Users management 2 Feasible if we store users in a database
Groups management 2 -
Multi-factor authentication 2 (x3) = 6 Mainly 2 FA with OTP See here
Password reset 2 Supported.
Password policy 2 Supported.
Theme customization 2 See here
LDAP synchronization 2 Supported.
SAML support 2 Supported.
Ease of configuration 2 -
Official Docker images 2 See here
Compliance with Docker best practices 2 (x3) = 6 -
Scaling 2 (x3) = 6 -
Configuration 2 -
HTTPS 2 No issue with that.
Logging 2 Logging works overall.
Statistics 0 Not a real module dedicated to it, you can retrieve session usage
Multi-tenancy 2 (x2) = 4 Configuration per Realm. The current storage layer is complex, especially when deployed to multiple-sites. It has a number of scalability issues like the number of realms and clients. Sessions are only kept in-memory, which can be good for performance, but not so great for scaling when you consider a large portion of sessions are idle and unused most of the time. See Here
Database 1 (x2) = 2 can work with SQL dbs, NoSQL dbs are not supported
Monitoring 2 Support Prometheus Keycloak Metrics SPI plugin
Software Dependencies 2 A database is enough.
K8s 2 See here
Documentation 2 See here
Resource Consumption 2 It can work with less than 2 GB of memory and 2 CPUs. But under heavy loads, it needs more.

KeyCloak-X

KeyCloak-X looks really promising focusing on scaling to millions of sessions and scaling to large number of realms and clients Since he is in preview, it breaks a study constraint and will thus not be evaluated.

Hydra (ORY)

Hydra looks really promising focusing on OAuth 2.0 and OpenID Connect but he is not a real IDP neither support SAML It breaks a study constraint and will thus not be evaluated.

Kratos (ORY)

Kratos is not certified.
It breaks a study constraint and will thus not be evaluated.

OpenAM

Presentation

https://www.openidentityplatform.org/openam

https://github.com/OpenIdentityPlatform/OpenAM

Screenshots

OpenAM admin

OpenAM dashboard

OpenAM datastores

Scores

Criteria Score Comment
Development history 2 Created in 2008 (OpenSSO).
Development team 0 2 regular active developers for the last version.
Popularity 0 345 stars on GitHub, the project seems not to be used a lot since ForgeRock stop supporting it.
Contributors community 1 Gitter and Github issues with few activity
Bugs activity 0 There are opened issues without activity
Roadmap 0 There are only tags but no roadmap
Project Management 1 Seems to be managed by 3a systems
Intellectual Property 2 CDDL
Distribution 2 Open source
Single Sign-On (SSO) 2 -
Single Log-Out (SLO) 2 -
OIDC: support for Auth Code flow with PKCE 2 (x3) = 6 -
Support of JWT 2 (x3) = 6 -
Specifics for mobile devices 2 Thanks to the Auth Code flow with PKCE.
Groups information ? -
Identity brokering 2 (x2) = 4 See here
Default identity provider (brokering) ? (x2) = ? -
Native identity management 2 (x2) = 4 Feasible if we store users in a database
Users management 2 Feasible if we store users in a database
Groups management 2 -
Multi-factor authentication 2 (x3) = 6 See here
Password reset 2 Supported.
Password policy 2 Supported.
Theme customization 1 Maybe limited customization
LDAP synchronization 2 Supported.
SAML support 2 Supported.
Ease of configuration 2 -
Official Docker images 2 See here
Compliance with Docker best practices 1 (x3) = 3 -
Scaling 2 (x3) = 6 -
Configuration 2 -
HTTPS 2 No issue with that.
Logging 2 Logging works overall.
Statistics 2 -
Multi-tenancy 2 (x2) = 4 Configuration per Realm.
Database 2 (x2) = 4 can work with Cassandra and SQL
Monitoring 1 isAlive.jsp healthcheck exists
Software Dependencies 2 A database is enough.
K8s 2 See here
Documentation 1 Documentation is hard to find
Resource Consumption 1 -

oxAuth (Gluu Server)

Presentation

https://gluu.org/docs/ce/

https://github.com/GluuFederation/oxAuth

Gluu architecture

Note: SAML is supported through Shibboleth IDP extra dependency

Screenshots

Gluu admin

Gluu admin edit user

Gluu admin search

Scores

Criteria Score Comment
Development history 2 First commit on github (Mar 23, 2014) and company (2009)
Development team 0 Only 1 active developer since the beginning of 2021
Popularity 0 309 stars on GitHub - Seems not a lot of people are using Gluu
Contributors community 1 -
Bugs activity 1 -
Roadmap 1 See here
Project Management 1 Managed by Gluu company
Intellectual Property 1 -
Distribution 2 Open source
Single Sign-On (SSO) 2 -
Single Log-Out (SLO) 2 -
OIDC: support for Auth Code flow with PKCE 2 (x3) = 6 -
Support of JWT 2 (x3) = 6 -
Specifics for mobile devices 2 Thanks to the Auth Code flow with PKCE.
Groups information ? -
Identity brokering 2 (x2) = 4 See here
Default identity provider (brokering) ? (x2) = ? -
Native identity management 2 (x2) = 4 Feasible if we store users in a database
Users management 2 Feasible if we store users in a database
Groups management 2 -
Multi-factor authentication 2 (x3) = 6 See here
Password reset 2 Supported via oxTrust (only works if password are in backend)
Password policy 0 Not really Supported.
Theme customization 2 -
LDAP synchronization 2 Supported.
SAML support 2 Supported.
Ease of configuration 1 -
Official Docker images 2 See here
Compliance with Docker best practices 2 (x3) = 6 See here
Scaling 2 (x3) = 6 -
Configuration 2 -
HTTPS 2 No issue with that.
Logging 1 Logging split in different modules (oxTrust)
Statistics 2 -
Multi-tenancy 0 (x2) = 0 Gluu was not built to support multi-tenancy
Database 0 (x2) = 0 can work with Couchbase and LDAP
Monitoring 0 See here
Software Dependencies 0 Lot of dependencies see here
K8s 2 See here
Documentation 2 See here
Resource Consumption 1 -

WSO2 Identity Server

Presentation

https://wso2.com/identity-and-access-management/

https://github.com/wso2/product-is

Screenshots

WSO2 home

WSO2 portal

WSO2 account

Scores

Criteria Score Comment
Development history 2 First commit on github (Apr 20,2014) and company (2005)
Development team 2 Mainly WSO2 company and community
Popularity 2 442 stars on GitHub - Lot of people behind the WSO products https://wso2.com/team/all/
Contributors community 1 Slack https://wso2is.slack.com/ with few activity, there are also webinars and events
Bugs activity 1 -
Roadmap 1 See here
Project Management 1 Managed by WSO2 company
Intellectual Property 1 Apache 2 Licence for community version
Distribution 2 Open source
Single Sign-On (SSO) 2 -
Single Log-Out (SLO) 2 -
OIDC: support for Auth Code flow with PKCE 2 (x3) = 6 -
Support of JWT 2 (x3) = 6 -
Specifics for mobile devices 2 Thanks to the Auth Code flow with PKCE.
Groups information ? -
Identity brokering 2 (x2) = 4 See here
Default identity provider (brokering) ? (x2) = ? -
Native identity management 2 (x2) = 4 Feasible if we store users in a database
Users management 2 Feasible if we store users in a database
Groups management 0 Support only roles
Multi-factor authentication 2 (x3) = 6 See here
Password reset 2 Supported.
Password policy 2 Supported.
Theme customization 1 Maybe limited customization
LDAP synchronization 2 Supported.
SAML support 2 Supported.
Ease of configuration 1 The configuration is spread in different locations but they work on a new console in last version
Official Docker images 2 See here
Compliance with Docker best practices 2 (x3) = 6 -
Scaling 2 (x3) = 6 -
Configuration 2 -
HTTPS 2 No issue with that.
Logging 2 Logging works overall.
Statistics 2 -
Multi-tenancy 2 (x2) = 4 Configuration per Tenant.
Database 1 (x2) = 2 can work with SQL dbs
Monitoring 2 Support Prometheus via JMX
Software Dependencies 2 A database is enough.
K8s 2 See here
Documentation 2 See here
Resource Consumption 1 -

Synthesis

Open Source Criteria

About the criteria related to Open Source…

Solutions Scores
LemonLDAP 14
KeyCloak 15
Hydra (ORY) Constraint-breaker
Kratos (ORY) Constraint-breaker
WSO2 Identity Server 13
oxAuth (Gluu) 9
OpenAM 8

Functional Requirements

About the criteria related to functional requirements…

Solutions Scores
LemonLDAP 40
KeyCloak 42
Hydra (ORY) Constraint-breaker
Kratos (ORY) Constraint-breaker
WSO2 Identity Server 39
oxAuth (Gluu) 40
OpenAM 41

Technical Requirements

About the criteria related to technical requirements…

Solutions Scores
LemonLDAP 4
KeyCloak 4
Hydra (ORY) Constraint-breaker
Kratos (ORY) Constraint-breaker
WSO2 Identity Server 4
oxAuth (Gluu) 4
OpenAM 4

Requirements for Developers

About the criteria related to requirements for developers…

Solutions Scores
LemonLDAP 1
KeyCloak 2
Hydra (ORY) Constraint-breaker
Kratos (ORY) Constraint-breaker
WSO2 Identity Server 1
oxAuth (Gluu) 1
OpenAM 2

Requirements for Operations

About the criteria related to requirements for operations…

Solutions Scores
LemonLDAP 28
KeyCloak 36
Hydra (ORY) Constraint-breaker
Kratos (ORY) Constraint-breaker
WSO2 Identity Server 37
oxAuth (Gluu) 26
OpenAM 34

Global Scores

Solutions Scores
LemonLDAP 87
KeyCloak 99
Hydra (ORY) Constraint-breaker
Kratos (ORY) Constraint-breaker
WSO2 Identity Server 94
oxAuth (Gluu) 80
OpenAM 89

Conclusion

Given the context, KeyCloak gets the best score.
It does not mean it is perfect: it is not the best solution for multi-tenancy (no native design for that, the internal model must be tweaked) and it will meet scalability issues. It can handle thousands of connections but not millions.

Anyway, it is suitable and will already solve issues that LINAGORA had with LemonLDAP.
The way it will be deployed (K8s or VM) is not decided yet.