Comment nous avons créé une architecture SSO : Nextcloud + Keycloak + YubiKey

 

[fusion_builder_container type="flex" hundred_percent="no" equal_height_columns="no" menu_anchor="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" background_color="" background_image="" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" parallax_speed="0.3" video_mp4="" video_webm="" video_ogv="" video_url="" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" overlay_color="" video_preview_image="" border_color="" border_style="solid" padding_top="" padding_bottom="" padding_left="" padding_right=""][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" background_position="left top" background_color="" border_color="" border_style="solid" border_position="all" spacing="yes" background_image="" background_repeat="no-repeat" padding_top="" padding_right="" padding_bottom="" padding_left="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="small-visibility,medium-visibility,large-visibility" center_content="no" last="true" min_height="" hover_type="none" link="" border_sizes_top="" border_sizes_bottom="" border_sizes_left="" border_sizes_right="" first="true"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" content_alignment_medium="" content_alignment_small="" content_alignment="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" margin_top="" margin_right="" margin_bottom="" margin_left="" font_size="" fusion_font_family_text_font="" fusion_font_variant_text_font="" line_height="" letter_spacing="" text_color="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset=""]

Ces derniers temps, nous avons de plus en plus une problématique qui remonte dans les besoins : celle de l'authentification SSO. Le concept est de mettre en place une architecture web, composée de plusieurs applications (par exemple : Rocket.Chat, Nextcloud, BigBlueButton).

En se connectant sur une, les utilisateurs seront connectés à toutes les autres, c'est le principe de SSO (Single Sign-On). Il permet de gagner un temps précieux aux collaborateurs d'une entreprise, ainsi qu'une sécurité supplémentaire.

1. Qu'est-ce que le SSO ?

Selon Wikipedia, l'authentification unique est une méthode qui permet à un utilisateur d'accéder à plusieurs applications, en ne procédant qu'à une seule authentification.

L'authentification unique offre plusieurs possibilités, notamment :

  • L'utilisation d'une seule et unique combinaison login/password.

  • Un gain de temps lors de toutes les connexions.

  • Une journalisation centralisée de l'authentification.

2. La notion de client

Tout au long de cet article, on va parler de "client". Mais à ne surtout pas confondre avec la personne physique derrière son écran !

Nous pouvons définir un client de la manière suivante : Une application qui fait la demande d'authentification au fournisseur d'identité.

Ici, le client que nous évoquerons sera Nextcloud, car elle a un connecteur compatible SSO (à travers le protocole OpenID Connect). Quasiment toutes les applications que l'on propose à nos clients (cette fois-ci les utilisateurs 😉) ont un connecteur SSO. Ce sont les applications suivantes (liste non-exhaustive) :

  • Nextcloud

  • Rocket.Chat

  • BigBlueButton (à travers Greenlight)

  • Moodle

3. Le SSO en pratique avec Keycloak

Pour les utilisateurs, au lieu de rentrer leurs identifiants sur le formulaire de chaque application, ils auront le bouton suivant : Connexion avec Keycloak (en l'occurence notre fournisseur d'identité) :

 

C'est exactement le même mécanisme que la connexion avec un compte Facebook, Twitter, Apple, Google... que l'on retrouve déjà sur beaucoup de sites.

Keycloak est une solution développée par Red Hat, et qui permet d'implémenter une solution de SSO au sein d'une entreprise. On peut parler d'un composant de type IAM (Identity Access Management).

Keycloak est compatible avec les principaux standards d'authentification (dont OpenID-Connect, ce qui signifie qu'il est relativement simple d'intégration et d'installation). Il est également possible de l'intégrer à un domaine LDAP (interne ou externe).

4. Mise en place de l'intégration Nextcloud + Keycloak

Pour interconnecter Nextcloud avec Keycloak, cela se déroule en deux phases :

  1. La création du client côté Keycloak

  2. La connexion via le connecteur Keycloak sur Nextcloud

Pour créer le client sur Keycloak, rien de plus simple, on va dans Clients > Create, puis on le paramètre :

Et... C'est tout figurez-vous ! La configuration du côté de Keycloak est déjà terminée ! Il faut juste obtenir le secret généré, pour l'enregistrer sur Nextcloud. Vous voyez, ça a été rapide ! 😁

Maintenant on va connecter le tout sur Nextcloud, on va télécharger le plugin "Social Login" (disponible ici). Puis dans les paramètres, on renseigne notre instance Keycloak (de type Custom OpenID Connect) :

Et c'est tout aussi ! Le tout ne prend que très peu de temps.

Il ne reste plus qu'à créer (ou importer...) les utilisateurs. Si l'on fait le test en conditions réelles, voici ce que ça donne :

5. Bonus : Double authentification avec YubiKey

Une YubiKey est un dispositif d'authentification physique, rendant l'authentification en deux facteurs simple et adaptée au grand public.

Nous avons réussi à intégrer une YubiKey lors d'une authentification Keycloak, comme vous pouvez le constater ici via cette vidéo : https://peertube.aukfood.net/w/7n18rpFaWwxb2hegQ57LKW

Nous en ferons un article plus poussé prochainement, mais l'idée est de créer un nouveau "flow" d'authentification, autrement dit une suite d'opérations lors d'une authentification, et nous venons l'assigner à l'action "Browser Flow" :

Il est même possible de synchroniser avec des applications mobiles, délivrant un code unique, par exemple Google Authenticator, ou privacyIDEA, mais c'est toujours en phase de R&D chez nous.

 

[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]