IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[eZ Publish 4.3] Central Authentication Service (CAS)


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut [eZ Publish 4.3] Central Authentication Service (CAS)
    Bonjour,

    Alors voilà, je suis en train de tester le CMS eZPublish et je souhaite mettre en place une authentification CAS. Malheureusement il n'y a que très peu de doc sur ce type d'authentification, et encore moins sur ce type d'authentification avec eZPublish... Pour le moment j'ai testé deux choses (pas très concluantes ^^) :

    1) D'après ce que j'ai compris, lorsque l'on se logue à eZPublish via la page login, il appelle une première fois "login.php", puis une deuxième fois lorsque l'on clique sur "valider". A chaque appel, eZ regarde dans des variables s'il n'y a pas les paramètres de connexion. J'ai donc modifié les templates de manière a ce que lorsque l'on clique sur "login" l'on soit redirigé vers la d'authentification CAS, et je passe en paramètre la page de login (http://...service=http://siteez/inde...fre/user/login). Puis j'ai modifié "login.php" afin de récupérer et de traiter le ticket. A ce niveau CAS renvoi un ticket invalide... En revanche, si je passe à CAS en paramètre la page d'accueil (http://...service=http://siteez/index.php), le ticket renvoyé est valide...
    Voilà ou j'en suis de cette solution.

    Deuxième essais :

    2) J'ai testé le patch suivant : http://projects.ez.no/cas_with_ezpublish_4_0_1. L'un des problèmes ici est que l'on est redirigé sur le serveur CAS dès la connexion au site, mais ca ne devrais pas être trop dur à changer. Le problème un peu plus grave c'est qu'une fois authentifié, le site renvoi une erreur "Fatal error: eZ Publish did not finish its request"...


    Donc mes questions sont : avez-vous déjà utilisé ce type d'authentification pour eZPublish, si oui comment avez-vous fait ?
    Avez-vous des avis sur les deux solutions ?
    Et pouvez-vous m'éclairer un peu plus sur le parcours effectué lorsque l'on se connecte ?

    Merci beaucoup de votre aide.

    PS : pour ceux que ca intéresse j'ai joins une doc expliquant le CAS.

  2. #2
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Bonjour,

    As-tu regardé ces documentations sur la création d'un gestionnaire sso dans eZ :

    http://www.lolart.net/blog/ez-publish/utilisation-d-un-sso-dans-ez-publish

    http://osmojo.fr/Blog/Creer-un-gesti...-sur-eZpublish

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    oui j'ai regardé les sites indiqués, j'ai fait le tour de la toile ^^ Enfin je crois.
    En fait je crois qu'un éclairage sur le fonctionnement même d'eZpublish lorsque l'on se connecte au site serait déjà bien utile.
    Je suis en train de passer au peigne fin le fichier ezuser.php pour essayer de mieux comprendre, mais si quelqu'un à des réponses cela me ferait gagner pas mal de temps je pense.

    Merci.

    [edit]
    En fait, je crois que j'ai pas bien compris cette histoire de SSO. Déjà je ne vois pas quoi mettre dans le constructeur...
    Ensuite dans le corps de la fonction, est-ce que je peux faire un algo du style :

    SI l'utilisateur dispose d'un ticket CAS
    on vérifie l'utilisateur
    return de l'utilisateur
    SINON
    renvoi sur la page CAS

    Et dernière petite question, à quelle moment cette extension est-elle appelée ?

  4. #4
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Théoriquement en créant un gestionnaire SSO en suivant la procédure décrite dans ce tuto, tu n'as pas besoin de gratouiller dans le kernel... Non ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    voir [edit]

  6. #6
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Je pense que cette méthode est appelée à la place du script de login original.
    Elle sert à avertir eZ que l'utilisateur a été authentifié par un autre système, et retourne l'utilisateur eZ correspondant.

    Il faudrait faire des tests pour plus de précision, avec par exemple une méthode simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    /* Sur eZpublish 4 plus besoin d'inclure ces fichiers ils sont automatiquement inclus à la demande par le mécanisme standard de php5
        include_once( 'kernel/classes/ezpersistentobject.php' );
        include_once( 'kernel/classes/datatypes/ezuser/ezuser.php' );
        include_once( 'lib/ezutils/classes/ezini.php' );
    */
        class eZMysqlssohandler
        {
            function eZMysqlssohandler()
            {
    //constructeur
            }
     
            /*!
    Cette méthode doit retourner l'objet ezuser à connecter, false sinon
             
            */
            function handleSSOLogin()
            {
     
              $currentUser =eZUser::fetchByName('admin');
     
                return $currentUser;
            }
        }
    ?>
    En créant cette méthode, tu pourras voir à quel moment l'authentification se fait.
    A mon avis le test est effectué lorsque l'utilisateur veut accéder au site.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    Ok je vais tester ça, je te remercie.
    Et pour le constructeur alors ? Une idée de ce qu'il y a à lui lettre dans le ventre ?

    [edit]
    Alors après avoir essayé ça, il se trouve que je suis toujours loguer en admin, quoiqu'il arrive. Ce qui est plutôt une bonne chose étant donné que c'est ce que l'on demande Je vais continuer de creuser un peu par là. Je posterais mon résultat si jamais je trouve comment faire

  8. #8
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Apparemment, le constructeur sert à mettre des commandes pour l'initialisation, si besoin.
    Par contre pour faire saisir à l'utilisateur son login et son mot de passe, je ne sais pas trop... Il faut peut-être créer une page faisant appel au SSO ? (en l'occurence, CAS ?)

    Tiens-nous au courant, ça m'intéresse

  9. #9
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Salut,

    @grozaloumek : Juste une petite erreur glissé dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function handleSSOLogin()
    {
       $currentUser = eZUser::fetchByName( 'admin' ); 
       return $currentUser;
    }

  10. #10
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Merci, c'est corrigé.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    Alors voilà ou j'en suis :

    Ici le code de l'extension SSO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    
        include_once( 'lib/CAS/CAS.php' );
        class eZssoupsSSOHandler
        {
            public function __construct()
            {
            }
    
            public function handleSSOLogin()
            {
    		$host_CAS='<votreHost>';
    		$port_CAS=443;    //Port par défaut
    		$uri_CAS='<votreURI>';
                    $currentUser = false;    //Si authentification échoue l'utilisateur doit être "false".
    			
                    //Initialisation de la connexion au serveur CAS
                    phpCAS::client(CAS_VERSION_2_0,$host_CAS,$port_CAS,$uri_CAS, false);
                    phpCAS::setNoCasServerValidation();
    
                    //Si l'utilisateur s'est déjà authentifié quelque part on le récupère, sinon on fait rien.
                    if (phpCAS::isAuthenticated())
                    {
                        $currentUser=eZUser::fetchByName(phpCAS::getUser());
                    }
    
                    return ($currentUser);
            }
        }
    ?>

    Et là la partie du code concernant le template, lorsque l'on clique sur "login" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {if $pagedesign.data_map.login_label.has_content}
    <li id="login"><a href={concat("http://<votreCAS>/cas/login?service=","/"|ezurl('no', 'full'))} title="{$pagedesign.data_map.login_label.data_text|wash}">{$pagedesign.data_map.login_label.data_text|wash}</a></li>
    {/if}
    Donc c'est deux parties permettent :
    un utilisateur se rend sur le site, s'il est déjà logué à un autre endroit grâce à CAS, il se logue automatiquement sur le site, sinon rien ne se passe.
    Lorsque l'utilisateur non logué clique sur "login", il est redirigé vers la page de connexion CAS qui le renvoi, une fois rentré un identifiant et un mot de passe valide, sur la page d'accueil (ou presque).

    Les problèmes actuels du code :
    - Un utilisateur ne peut se connecter QUE s'il est déjà enregistré dans eZpublish (le lien entre eZPublish et le LDAP que j'avais avant ne marche plus). S'il n'est pas enregistré dans eZPublish : message d'erreur.
    - Lorsque le serveur CAS redirige sur le site, la fin de l'URL (tout ce qui se situe après le ?) est traitée, et je ne comprend pas pourquoi... du coup "Fatal error: eZ Publish did not finish its request" (je commence à m'y habituer ). Par contre une fois supprimé la fin de l'URL, l'utilisateur est logué normalement...
    http://<lesite>.fr?ticket=ST-31613-Fst1oqDDzdDYSwostAxR-cas

    Petites questions :
    - A quel moment, par qui et surtout ou les fonction php sont appelée ? En fait je ne vois pas le lien entre les templates et le php
    - J'imagine que pour régler le premier problème je dois créer un nouvel utilisateur, ou faire un appel à une fonction qui le créera, une idée de quelle fonction il s'agit ?

  12. #12
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Dans eZ, le php est exécuté :
    • via des modules (ex: /user/login, /content/view, /module/vue)
    • via des opérateurs de templates (ex: {$variable|wash()}, {fetch}, etc...)


    Pour ce qui est des extensions, les modules sont dans le dossier "modules", et les opérateurs de templates dans le dossier "autoload".
    Pour ce qui est du noyau eZ, je crois que les modules sont listés dans le dossier "kernel", mais le reste est encore un peu obscur pour moi.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    Petite question, quelle fonction permet de récupérer le mot de passe d'un utilisateur ?

  14. #14
    Membre émérite Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Par défaut
    Je ne pense pas que ce soit possible, les mots de passe étant cryptés avant d'être stockés.
    Par contre s'ils sont cryptés avec la fonction md5, tu peux peut-être faire un test pour le comparer à un autre mot de passe, si c'est ça que tu veux....

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    Alors, le CAS marche maintenant parfaitement, disons presque parfaitement dans le sens ou si un utilisateur n'est pas connu dans eZpublish, il n'y a plus d'erreur, il ne se passe juste rien quand il essaye de se loguer.

    Ce que je voudrais arriver à faire maintenant c'est, si mon utilisateur est connu dans le LDAP, l'importer dans eZPublish. La fonction de connection au LDAP est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static function loginUser( $login, $password, $authenticationMatch = false )
    Sauf que par définition CAS ne renvoi pas le mot de passe, mais juste l'utilisateur. J'aimerais donc récupérer le mot de passe de l'utilisateur pour pouvoir le passer en paramètre afin d'aller le chercher dans le LDAP.

    Je posterais toute les modifs que l'on a faite dès que je peux.

  16. #16
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    salut,

    Dans tous le cas il suffit juste de bien vérifier que l'utilisateur est bien authentifié sur ta plateforme (CAS) donc tu peux toujours créer des utilisateurs "à la volée" s'il existent bien dans ton serveur LDAP et non pas dans eZ Publish

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public function handleSSOLogin()
    {
       $host_CAS = '<votreHost>';
       $port_CAS = 443;    //Port par défaut
       $uri_CAS = '<votreURI>';
       $currentUser = false;    //Si authentification échoue l'utilisateur doit être "false".
     
       //Initialisation de la connexion au serveur CAS
       phpCAS::client(CAS_VERSION_2_0,$host_CAS,$port_CAS,$uri_CAS, false);
       phpCAS::setNoCasServerValidation();
     
       //Si l'utilisateur s'est déjà authentifié quelque part on le récupère, sinon on fait rien.
        if ( phpCAS::isAuthenticated() )
        {
          if( !$currentUser=eZUser::fetchByName(phpCAS::getUser()); )
          {
            //création du user
          }
          return $currentUser
     
        }
     
         return $currentUser;
    }

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Par défaut
    ce qui en revient à ma question :

    - J'imagine que pour régler le premier problème je dois créer un nouvel utilisateur, ou faire un appel à une fonction qui le créera, une idée de quelle fonction il s'agit ?

    De plus je ne veux pas créer n'importe-quel utilisateur, je veux le créer que s'il est dans le bon groupe LDAP, d'ou le désir de récupérer le mdp. A l'appel de la fonction loginUser(...), je crois qu'il crée l'utilisateur dans eZPublish s'il n'existe pas déjà.

    [edit]
    En fait ce que je dis n'a pas de sens... si je veux récupérer un utilisateur dans le LDAP qui n'existe pas dans eZPublish, je ne peux pas le faire grâce au mot de passe de l'utilisateur vu qu'il n'existe pas encore ^^

Discussions similaires

  1. [Python 3.X] Connexion Site web Python3 / CAS (Central Authentication Service)
    Par Yves94 dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 15/06/2018, 13h21
  2. Intégrer Central Authentication Service avec Spring
    Par franco9 dans le forum Spring
    Réponses: 0
    Dernier message: 03/01/2014, 17h53
  3. GWT et Central Authentication Service
    Par Lorenzaccio dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 06/04/2009, 12h44
  4. Central Authentication Service
    Par linniesurf dans le forum Sécurité
    Réponses: 4
    Dernier message: 31/05/2007, 14h28
  5. API CAS (Central Authentication Service)
    Par linniesurf dans le forum Sécurité
    Réponses: 1
    Dernier message: 20/06/2006, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo