OpenProject : Mise en place du SSO avec Keycloak

OpenProject : Mise en place du SSO avec Keycloak

Table of Contents

Introduction

Par défaut, OpenProject utilise une base locale d'utilisateurs pour gérer l'authentification. Afin de centraliser l'authentification sur un serveur dédié (avec OpenID-Connect) Keycloak, une configuration SSO est nécessaire sur OpenProject.

OpenProject va utiliser OpenID-Connect pour faire du SSO. Ca tombe bien Keycloak aussi ! Un paramétrage concernant cela est disponible via la web UI d'administration d'OpenProject mais celle-ci ne concerne que Google et Azure. Fort heureusement, c'est tout de même possible en éditant un fichier.

Référence :

Pré-requis

Pour mener à bien cette procédure, il faut :

  • Un serveur OpenProject installé avec une licence Entreprise
  • Un serveur Keycloak installé

Pour la licence OpenProject Entreprise, il est possible de faire un essai de 14 jours gratuitement. Sans licence Entreprise, le SSO n'est pas pris en charge par OpenProject. Lorsque l'essai de la version Entreprise arrive à son terme et que celle-ci n'est pas prolongé, alors la licence repasse automatique en Community Edition (Free).

Configuration partie Keycloak

  • Création d'un royaume :

  • Création d'un client :

Root URL : L'URL d'accès au serveur OpenProject.

  • Dans les propriétés du client nouvellement créer, définir l' Access Type sur confidential afin de générer un secret :

Bien penser à sauvegarder la modification en bas de la page.

  • Un nouvel onglet Credentials est apparu dans les propriétés du client. Un secret a été généré :

  • Créer un compte utilisateur si le serveur Keycloak est fraichement installé :

Attention : Sur l'illustration, seul le champ Username est indiqué comme obligatoire. Lorsque qu'un utilisateur s'authentifiera avec son compte Keycloak sur OpenProject, les champs Email , First Name , Last Name seront obligatoires. Ces propriétés ne peuvent en cas cas être communes à un autre compte.

  • Une fois l'utilisateur créé, dans l'onglet Credentials , définir son mot de passe :

Configuration partie OpenProject

Pour qu'un utilisateur puisse utiliser son compte Keycloak pour s'authentifier sur OpenProject, celui-ci doit être activé dans OpenProject. Par défaut l'activation se fait manuellement. Pour automatiser ce processus, une option d' activation automatique du compte existe dans OpenProject.

  • Se connecter en admin sur OpenProject puis "Administration -> Authentification", modifier l'option Auto-enregistrement comme suit :

Pour la suite des opérations, se connecter en SSH sur le serveur OpenProject.

  • Modifier le fichier /opt/openproject/config/configuration.yml afin d'ajouter la possibilité de s'authentifier sur OpenProject au travers du serveur SSO Keycloak. Ajouter les lignes suivantes dans la section default :
default:

# omniauth_direct_login_provider: openid

  openid_connect:
    openid:
      host: "keycloak.example.fr"
      identifier: "MonOpenProject"
      secret: "af90aced-0000-0000-0000-0959e6fd5226"
      icon: "openid_connect/auth_provider-google.png"
      display_name: "SSO"
      authorization_endpoint: "https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/auth"
      token_endpoint: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/token'
      userinfo_endpoint: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/userinfo'
      end_session_endpoint: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/logout'
      check_session_iframe: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/login-status-iframe.html'
      sso: true
      issuer: 'https://keycloak.example.fr/auth/realms/MonRoyaume'
      discovery: false

Adapter les valeurs suivantes :

host : Le FQDN du serveur Keycloak
identifier : Le nom du client créé dans Keycloak
secret : Le secret du client généré dans Keycloak

# Les URLS suivantes peuvent facilement être obtenues dans Keycloak
# Realm Settings -> Endpoints : OpenIP Endpoint Configuration

authorization_endpoint: "https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/auth"
token_endpoint: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/token'
userinfo_endpoint: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/userinfo'
end_session_endpoint: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/logout'
check_session_iframe: 'https://keycloak.example.fr/auth/realms/MonRoyaume/protocol/openid-connect/login-status-iframe.html'
issuer: 'https://keycloak.example.fr/auth/realms/MonRoyaume'

La directive omniauth_direct_login_provider indique que seul l'authentification passera par keycloak. Commenter cette directive pour avoir le choix d'authentification entre keycloak (SSO) ou la base locale d'OpenProject.

  • OpenProject : Redémarrer le service openproject
sudo systemctl restart openproject

Vérification du fonctionnement

  • Dorénavant lors de la connexion sur OpenProject, une option de connexion SSO est disponible :

  • Le serveur Keycloak prends le relais pour demander les credentials :

  • Après la 1ère connexion d'un utilisateur au travers du SSO, celui-ci est présent dans OpenProject avec un fournisseur d'authentification OpenID :

Les commentaires sont fermés.