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
surconfidential
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 champsFirst 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 sectiondefault
:
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
: