<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Auth on slash-root.fr</title><link>https://beta.slash-root.fr/tags/auth/</link><description>Recent content in Auth on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Thu, 04 Nov 2021 17:33:31 +0100</lastBuildDate><atom:link href="https://beta.slash-root.fr/tags/auth/index.xml" rel="self" type="application/rss+xml"/><item><title>Keycloak : Integration LDAP externe</title><link>https://beta.slash-root.fr/keycloak-integration-ldap-externe/</link><pubDate>Thu, 04 Nov 2021 17:33:31 +0100</pubDate><guid>https://beta.slash-root.fr/keycloak-integration-ldap-externe/</guid><description>&lt;img src="https://beta.slash-root.fr/keycloak-integration-ldap-externe/cover.png" alt="Featured image of post Keycloak : Integration LDAP externe" /&gt;&lt;h2 id="introduction"&gt;&lt;a href="#introduction" class="header-anchor"&gt;&lt;/a&gt;Introduction
&lt;/h2&gt;&lt;p&gt;La solution Keycloak est embarqué avec la possibilité de joindre un annuaire LDAP/AD. Il est possible de fédérer plusieurs serveurs d'annuaires au sein d'un même royaume keycloak. Les attributs utilisateurs de l'annuaire LDAP peuvent être mappé dans un model d'utilisateur keycloak. Par défaut, les attributs &lt;code&gt;username&lt;/code&gt;, &lt;code&gt;email&lt;/code&gt;, &lt;code&gt;first name&lt;/code&gt;, &lt;code&gt;last name&lt;/code&gt; sont mappés mais d'autres attributs peuvent l'être également.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cet article fait suite à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://beta.slash-root.fr/2021/10/25/keycloak-installation-avec-docker-et-reverse-proxy-ssl-nginx/"&gt;Keycloak : Installation avec Docker et reverse-proxy SSL Nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://beta.slash-root.fr/2021/11/04/openldap-installation-avec-fusiondirectory/"&gt;OpenLDAP : Installation avec FusionDirectory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="prérequis"&gt;&lt;a href="#pr%c3%a9requis" class="header-anchor"&gt;&lt;/a&gt;Prérequis
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Un serveur Keycloak fonctionnel&lt;/li&gt;
&lt;li&gt;Un serveur OpenLDAP/FusionDirectory fonctionnel&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Toute la procédure fera référence aux configuration déployées dans les articles cités en introduction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="configuration"&gt;&lt;a href="#configuration" class="header-anchor"&gt;&lt;/a&gt;Configuration
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Se rendre sur la WebUI du serveur Keycloak : &lt;a href="https://keycloak.example.com"&gt;https://keycloak.example.com&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se rendre dans la partie &lt;code&gt;User Federation&lt;/code&gt; et ajouter &lt;code&gt;ldap&lt;/code&gt; en provider :&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="user_fede.png" alt="" /&gt;&lt;/p&gt;
&lt;h3 id="paramétrage---1ère-partie"&gt;&lt;a href="#param%c3%a9trage---1%c3%a8re-partie" class="header-anchor"&gt;&lt;/a&gt;Paramétrage - 1ère partie
&lt;/h3&gt;&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="fed1.png" alt="" /&gt;&lt;/p&gt;
&lt;h4 id="stockage"&gt;&lt;a href="#stockage" class="header-anchor"&gt;&lt;/a&gt;Stockage
&lt;/h4&gt;&lt;p&gt;Par défaut, Keycloak importe les utilisateurs de l'annuaire LDAP dans sa base locale d'utilisateurs. Cette copie des utilisateurs peut être synchronisée soit manuellement soit automatiquement toutes les x minutes par exemple. Seul les mots de passes ne sont pas synchronisés. Dans le processus d'identification de l'utilisateur, la validation du mot de passe est délégué au serveur LDAP. L'avantage de cette approche est que toutes les fonctionnalités de Keycloak fonctionneront avec des attributs utilisateurs supplémentaires qui sont stockés localement sur Keycloak. Cela permet également de réduire la charge sur le serveur LDAP.&lt;/p&gt;
&lt;p&gt;Il est possible de ne pas importer les utilisateurs de l'annuaire LDAP dans Keycloak en décochant &lt;code&gt;Import Users&lt;/code&gt;. Cela aura pour effet d'augmenter les requêtes vers le serveur LDAP car aucune information utilisateur ne sera stockée localement sur Keycloak. L'autre conséquence de ce choix est que si une fonctionnalité de Keycloak repose sur une partie non supporté par l'annuaire LDAP, celle-ci ne fonctionnera pas. En revanche, l'avantage est de ne pas avoir à gérer la synchronisation des comptes.&lt;/p&gt;
&lt;h4 id="edition"&gt;&lt;a href="#edition" class="header-anchor"&gt;&lt;/a&gt;Edition
&lt;/h4&gt;&lt;p&gt;L'&lt;code&gt;Edit Mode&lt;/code&gt; permet aux utilisateurs et aux administrateurs, à travers leurs consoles respectives sur Keycloak, de modifier les metadas utilisateur.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;READONLY&lt;/code&gt; : Les attributs utilisateurs resteront inchangés. Une erreur apparaitra si une modification d'attribut est faites. Cela est également valable pour la modification d'un mot de passe utilisateur.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WRITABLE&lt;/code&gt; : Tous les attributs utilisateurs modifiés seront synchronisés automatiquement avec l'annuaire LDAP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UNSYNCED&lt;/code&gt; : Tous les changements d'attributs seront stockés localement dans la base de Keycloak. La synchronisation des modifications au sein de Keycloak vers l'annuaire LDAP devra être faites manuellement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="vendor"&gt;&lt;a href="#vendor" class="header-anchor"&gt;&lt;/a&gt;Vendor
&lt;/h4&gt;&lt;p&gt;Plusieurs choix sont possibles suivant le type d'annuaire LDAP en face :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Active Directory&lt;/li&gt;
&lt;li&gt;Red Hat Directory Server&lt;/li&gt;
&lt;li&gt;Tivoli&lt;/li&gt;
&lt;li&gt;Novell eDirectory&lt;/li&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L'annuaire installé étant OpenLDAP, &lt;code&gt;other&lt;/code&gt; est le choix à faire.&lt;/p&gt;
&lt;h3 id="paramétrage---2nd-partie"&gt;&lt;a href="#param%c3%a9trage---2nd-partie" class="header-anchor"&gt;&lt;/a&gt;Paramétrage - 2nd partie
&lt;/h3&gt;&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="fed2.png" alt="" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Connection URL&lt;/code&gt; : Indiquer le chemin d'accès au serveur LDAP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Users DN&lt;/code&gt; : Indiquer le chemin d'accès aux utilisateurs dans l'annuaire.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Bind DN&lt;/code&gt; : Indiquer un compte dans l'annuaire ayant des droits d'écriture.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Bind Credential&lt;/code&gt; : Le mot de passe du compte spécifié dans &amp;quot;Bind DN&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synchronisation"&gt;&lt;a href="#synchronisation" class="header-anchor"&gt;&lt;/a&gt;Synchronisation
&lt;/h3&gt;&lt;p&gt;Un peu plus bas de la page de configuration de la connexion au serveur LDAP, un menu &lt;code&gt;Sync Settings&lt;/code&gt; est disponible :&lt;/p&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="sync_set.png" alt="" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Batch Size&lt;/code&gt; : Le nombre de compte utilisateurs qui seront traités en une synchronisation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Periodic Full Sync&lt;/code&gt; : La planification en secondes de la synchronisation totale / complète.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Periodic Changed Users Sync&lt;/code&gt; : La planification en secondes de la synchronisation des changements apportés aux attributs utilisateurs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Après avoir sauvegarder tous les paramètres, il est possible de déclencher manuellement une première synchronisation des utilisateurs de l'annuaire LDAP dans Keycloak :&lt;/p&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="sync_manuel.png" alt="" /&gt;&lt;/p&gt;
&lt;h3 id="mappers"&gt;&lt;a href="#mappers" class="header-anchor"&gt;&lt;/a&gt;Mappers
&lt;/h3&gt;&lt;p&gt;Par défaut, des &lt;code&gt;Mappers&lt;/code&gt; sont mis en place. Un mapper va permettre de mapper un attribut utilisateur de l'annuaire LDAP à un attribut utilisateur de Keycloak :&lt;/p&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="mappers.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Dans mes différents essais, en déployant cette solution de SSO avec un OpenLDAP, il est apparu que l'attribut &lt;code&gt;firstName&lt;/code&gt; de Keycloak est mappé avec l'attribut &lt;code&gt;cn&lt;/code&gt; de l'annuaire LDAP. L'attribut &lt;code&gt;cn&lt;/code&gt; dans l'annuaire (avec la couche FusionDirectory) est une concaténation du prénom et du nom de l'utilisateur :&lt;/p&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="cn_ldap.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Au lieu de modifier la configuration de l'annuaire LDAP, modifier le mapper &lt;code&gt;first name&lt;/code&gt; dans Keycloak :&lt;/p&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="first_name.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Modifier &lt;code&gt;LDAP Attribute&lt;/code&gt; pour indiquer &lt;code&gt;givenName&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;givenName&lt;/code&gt; est le nom de l'attribut prénom au sein de l'annuaire LDAP dans notre configuration.&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>