Study: OIDC Providers and replacement of LemonLDAP

Home » Guidelines

Goal (in few lines)

LINAGORA has used LemonLDAP as the SSO solution for several years now.
From Summer 2020, most of the solutions were upgraded to work with OIDC, and LemonLDAP’s configuration was updated to become an OIDC provider.

However, LINAGORA keeps on having issues with LemonLDAP (configuration remains complicated) and some features are not well-supported (no JWT access tokens) or well-documented.

The goal of this study is to find a replacement solution to LemonLDAP and use another OIDC provider. This solution will work with several Software components, from Twake to LinShare, Apache James, etc.

Current Situation

Here is how we use LemonLDAP as an OIDC provider:

Methodology and Criteria

This study is only about the choice of a technical solution.
Since we look for a solution for both our SaaS and on-premise deployments, it cannot be a SaaS solution. We are looking for an open source technical component we can install and manage on our own.

So, we can use the QSOS methodology, already used by LINAGORA for many customers. This methodology relies on a grid with invariant criteria (related to open source and maturity). It is completed by other criteria we will list below.

Every criteria is evaluated and results in a grade.
Some criteria can be more important than others and this is why each criteria gets a weight. It allows to give a global grade to every solution. The one with the highest score is retained.

There are few tools we can use.
LINAGORA generally uses Libre Office spreadsheets for the grid. One solution is to manage everything in our OnlyOffice instance. Another one would be to only trust what we put here, and generate the grid with Markdown.

Let’s detail the additional criteria.
There are several categories.

Constraints

Constraints are not part of QSOS studies but are often used in architecture documents. Constraints are rules solutions cannot break. If one constraint is not fulfilled, then the solution is excluded and not evaluated.

There are 2 constraints here:

Open Source Criteria

Normally, there are 16 criteria about open source.
We here only retain the few ones that matter for LINAGORA.

Here is the scoring table for these criteria.

Criteria Weight Scoring
Development history 1 0 if it is less than 3 months old, 1 if it is between 3 months and 3 years old, 2 if it is older than 3.
Development team 1 0 if there are very few developers, 1 if there are some active developers, 2 if there are several active developers.
Popularity 1 0 if no known user, 1 if there are known users, 2 if there is a lot of users.
Contributors community 1 0 if no community or activity on forums, mailing-lists…, 1 if there exists a community with few activity, 2 if there is a community with several solution supporters.
Bugs activity 1 0 for a weak activity or no bug tracking or release note with bug fixes, 1 if there is activity around bugs but no clear process, 2 if bugs are managed and their resolution governed by a clear process.
Roadmap 1 0 if no published roadmap, 1 for a roadmap without planning, 2 for a roadmap that is published along with a planning.
Project Management 1 0 for no clear management, 1 if the project is managed by a single person or company, 2 if the project is managed by a community.
Intellectual Property 1 0 if it is owned by few persons or companies, 1 if it is owned by several persons or companies in an homogenous manner, 2 if it is owned by a Foundation or neutral legal entity trusted by developers.
Distribution 1 0 if there is a free version with limited features only, 1 if the core is fully open source but extensions are proprietary, 2 if it is fully open source.

Functional Requirements

Notice the management of technical accounts (machine to machine) is out of the scope of this study. This would be part of the global design for identity management.

Here is the scoring table for these criteria.

Criteria Weight Scoring
Single Sign-On (SSO) 1 0 if we cannot protect application, 1 if we can protect only one, 2 if there is no limit.
Single Log-Out (SLO) 1 0 if the solution does not support, 1 if we can log out from only one application, 2 otherwise.
OIDC: support for Auth Code flow with PKCE 3 0 if not supported, 2 if fully-supported.
Support of JWT 3 0 if not supported, 1 if only supported for ID or access tokens, 2 if fully-supported.
Specifics for mobile devices 1 0 if nothing is planned, 1 if it is only available for Android or iOS, 2 if there are solutions for both platforms.
Groups information 1 0 if not supported, 2 if supported.
Identity brokering 2 0 if not supported, 1 if supported for SAML or OIDC, 2 if supported for both SAML and OIDC.
Default identity provider (brokering) 2 0 if not supported, 1 if it possible indirectly, 2 if supported.
Native identity management 2 0 if not supported, 2 if supported.
Users management 1 0 if not supported, 1 if possible indirectly, 2 if supported directly by the tool.
Groups management 1 0 if not supported, 1 if possible indirectly, 2 if supported directly by the tool.
Multi-factor authentication 3 0 if not supported, 2 if supported.
Password reset 1 0 if not supported, 2 if supported.
Password policy 1 0 if not supported, 2 if supported.
Theme customization 1 0 if not supported, 1 if feasible but requires to overwrite files in the distribution, 2 if theming is natively designed (through configuration or a specific themes folder).

Sure, a solution that does not support native identity management will get a bad score. But this is a feature that would simplify test in development environments (see farther).

Technical Requirements

Here is the scoring table for these criteria.

Criteria Weight Scoring
LDAP synchronization 1 0 if not supported, 2 if supported.
SAML support 1 0 if not supported, 2 if supported.

Requirements for Developers

Native identity management is also very appreciated for tests, but this criteria is already defined in the functional requirements. Here is the scoring table for these criteria.

Criteria Weight Scoring
Ease of configuration 1 0 if there is no web administration console, 1 if it exists but the OIDC configuration is spread under different root menus, 2 if it is located under a same menu.

Requirements for Operations

Here is the scoring table for these criteria.

Criteria Weight Scoring
Official Docker images 1 0 if no official Docker image is provided, 1 if it exists but is not maintained or from the community (no release over the last 6 months), 2 otherwise.
Compliance with Docker best practices 3 0 if no existing Docker image, 1 if LINAGORA should create a better one, 2 if it looks good.
Scaling 3 0 if the solution only supports 1 instances, 1 if the solution requires specific environment constraints (such as multicast), 2 if the solution itself is stateless (e.g. the state is in the DB or another shared component).
Configuration 1 0 if the solution can only be customized from a web console, 1 if it supports either REST services and configuration files, 2 if it supports both.
HTTPS 1 0 if HTTPS cannot be configured, 1 if certificates are mandatory for the solution to work, 2 otherwise.
Logging 1 0 if logging cannot be configured, 1 if logging’s configuration is spread in different locations, 2 otherwise.
Statistics 1 0 if not supported, 2 otherwise.
Multi-tenancy 2 0 if it only supports a single organization, 2 if several ones.
Database 2 1 if it requires a relational DB, 2 if it can work with MongoDB or Cassandra. 0 otherwise.
Monitoring 1 0 if there is no existing health probe, 1 if possible but to implement by LINAGORA, 2 if they exist and the solution is compliant with Prometheus. Tip: for Java solutions, the JMX exporter exists.
Software Dependencies 1 2 if it only requires a database, 1 if it requires a 2 components, 0 if it requires more than 2.
K8s 1 0 if no package exists, 1 if the only package that exists is an operator (black-box), 2 if there is a Helm package.
Documentation 1 0 if there is no documentation, 1 if documentation is not clear or help hard to find, 2 if documentation and support are clear and easy to find.
Resource Consumption 1 0 if it requires more than 4 CPU and 16 GB of RAM, 2 if it requires less than 2 CPU and 2 GB of RAM, 1 if it is between these two levels.

Solutions to Compare

All the solutions below must be evaluated against the defined criteria.
Evaluation is based on information available on Internet. The goal is to get a short-list of solutions to experiment in a second time.

In addition to scoring, every solution should be veridied against an overlap with the Twake Console. Indeed, some solutions go beyond just being an OIDC provider. They manage identities in a more global fashion.

Here are the solutions:

Other candidates could be found here.

Notice we are only interested in open source features.

Study

See here.