Outils pour utilisateurs

Outils du site


braveo:blogauthentification

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

braveo:blogauthentification [2016/07/19 15:36] (Version actuelle)
Ligne 1: Ligne 1:
 +====== authentification ldap ======
 +
 +Bon l'​idée est d'​interroger le ldap à la connexion et si la personne existe dans le ldap de créer localement l'​utilisateur. C'est d'​ailleurs ce que propose la doc officiel dotclear
 +
 +http://​fr.dotclear.org/​documentation/​2.0/​resources/​authentication
 +
 +pour cela nous allons redeclarer la class DcAuth dans le fichier dotclear/​inc/​config.php
 +  // Ajout du la classe pour le ldap
 +  $__autoload['​myDcAuth'​] = dirname(__FILE__).'/​class.auth.ldap.php';​
 +  define('​DC_AUTH_CLASS','​myDcAuth'​);​
 +
 +ensuite dans notre fichier dotclear/​inc/​class.auth.ldap.php
 +<code PHP>
 +  <?php
 +  class myDcAuth extends dcAuth
 +  {
 +        # L'​utilisateur n'a pas le droit de changer son mot de passe
 +        protected $allow_pass_change = true;
 +  ​
 +        # La méthode de vérification du mot de passe
 +        public function checkUser($user_id,​ $pwd=null, $user_key=null)
 +        {
 +                # Pas de mot de passe, on appelle la méthode parente.
 +                if ($pwd == ''​) {
 +                        return parent::​checkUser($user_id,​null,​$user_key);​
 +                }
 +  ​
 +                # On démarre une transaction et on ouvre un curseur sur la
 +                # table utilisateur de Dotclear pour créer ou modifier
 +                # l'​utilisateur.
 +                $this->​con->​begin();​
 +                $cur = $this->​con->​openCursor($this->​user_table);​
 +  ​
 +                # paramètres de configuration pour l'​interface PHP pour administrer
 +                # notre annuaire LDAP
 +                $server = "​X.X.X.X";​
 +                $port = "​389";​
 +                $racine = "​dc=XX,​dc=XX";​
 +  ​
 +                #connexion au serveur ldap
 +                $ds=@ldap_connect($server) ​ or die("​Could not connect to LDAP server."​);​
 +                ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION,​ 3);
 +                if (ldap_bind($ds,"​uid="​.$user_id.",​ou=Users,​dc=XX,​dc=XX",​$pwd))
 +                {
 +  ​
 +                        # On définit le mot de passe, il est inséré dans tous les cas.
 +                        $cur->​user_pwd = $pwd;
 +  ​
 +                        # Si l'​utilisateur existe, nous allons uniquement mettre à jour
 +                        # son mot de passe dans la table utilisateur de Dotclear.
 +                        if ($this->​core->​userExists($user_id))
 +                        {
 +                                $this->​sudo(array($this->​core,'​updUser'​),​$user_id,​$cur);​
 +                                $this->​con->​commit();​
 +                        }
 +  ​
 +                        # Si l'​utilisateur n'​existe pas, nous allons le créer.
 +                        # Afin qu'il puisse se connecter, il est nécessaire de lui donner
 +                        # au moins une permission "​usage"​ sur le blog "​default"​.
 +                        else
 +                        {
 +  ​
 +  ​
 +  ​
 +                        # Si l'​utilisateur n'​existe pas, nous allons le créer.
 +                        # Afin qu'il puisse se connecter, il est nécessaire de lui donner
 +                        # la  permission "​admin"​ sur le blog par "​default"​.
 +                        else
 +                        {
 +                                $sr=ldap_search($ds,​$racine,"​cn=$user_id",​array( "​dn",​ "​cn",​ "​sn",​ "​mail",​ "​givenName"​));​
 +                                $info = ldap_get_entries($ds,​ $sr);
 +  ​
 +                                #on recherche l'​utilisateur dans le ldap pour recuperer toutes les informations
 +                                $sr=ldap_search($ds,​$racine,"​cn=$user_id",​array( "​dn",​ "​cn",​ "​sn",​ "​mail",​ "​givenName"​));​
 +                                $info = ldap_get_entries($ds,​ $sr);
 +  ​
 +  ​
 +                                #si le ldap ne ramene qu'un seul utilisateur
 +                                if ($info["​count"​] ==1)
 +                                {
 +                                        $cur->​user_id = $info[0]['​cn'​][0];​
 +                                        $cur->​user_email = $info[0]['​mail'​][0];​
 +                                        $cur->​user_name = $info[0]['​givenName'​][0];​
 +                                        $cur->​user_firstname = $info[0]['​sn'​][0];​
 +                                        $cur->​user_lang = '​fr';​
 +                                        $cur->​user_tz = '​Europe/​Paris';​
 +                                        $cur->​user_default_blog = '​default';​
 +                                        $this->​sudo(array($this->​core,'​addUser'​),​$cur);​
 +                                        $this->​sudo(array($this->​core,'​setUserBlogPermissions'​),​$user_id,'​default',​array('​admin'​=>​true));​
 +                                        $this->​con->​commit();​
 +                                }
 +                        }
 +  ​
 +                        # Les opérations précédentes se sont déroulées sans erreur, nous
 +                        # pouvons maintenant appeler la méthode parente afin d'​initialiser
 +                        # l'​utilisateur dans l'​object $core->​auth
 +                        return parent::​checkUser($user_id,​$pwd);​
 +                }
 +                # En cas d'​erreur on annule la transaction et on renvoie "​false"​
 +                $this->​con->​rollback();​
 +                return false;
 +        }
 +  }
 +  ?>
 +</​code>​
 +et voila notre blog utilise le ldap
 +
 +  ​
 +
  
braveo/blogauthentification.txt · Dernière modification: 2016/07/19 15:36 (modification externe)