procedure inter serveur

procedure inter serveur

par gilles vignon,
Nombre de réponses : 3

Bonjour, nous sommes en construction d'un ENT et nous voulons intégrer moodle à cet ENT. Biensur nous ne voulons pas qui ait une connection dans l'ENT et une seconde dans moodle.

Notre solution serait de recuperer le login et le mot de passe une fois connecté à l'ENT donc , si on clique sur un lien dans l'ENT(une ressource ou un cours dans qui se trouve dans moodle) automatiquement le lien "s'ameliore" avec les données necessaires pour arriver dans moodle sans se reconnecter.

Apparement cela s'appelle une procedure inter-serveurs simplifiée avec une notion de token (jeton).

Est ce quelqu'un connait se système, la déjà mis en place ou peux m'indiquer des ressources à ce sujet.

Je vous remercie

Gilles Vignon

Moyenne des évaluations  -
En réponse à gilles vignon

Re: procedure inter serveur

par Valery Fremaux,

Oui, tout à fait, et ça marche plutôt bien, à part quelques situations particulières.

Premièrement :

Moodle permet de rediriger la fonction "login" vers une URL extérieure, Le lien "connexion" pointe alors vers la page de login de votre ENT.

Deuxièmement, vous pouvez effectuer l'identification sur votre ENT. Il faut alors simplement en profiter pour récupérer un cookie Moodle. L'astuce n'est pas très belle mais marche parfaitement :

Dans une IFRAME invisible (style="width : 0px ; height : 0px", vous appelez l'URL de retour de la procédure de login normal de Moodle, en lui répercutant les paramètres demandés par Moodle. Moodle va alors exécuter le login dans la frame et envoyer le cookie. Il considère désormais l'utilisateur connecté.

Voici un boût de code qui fait ça dans un CMS que je développe, sur la page pointée par Moodle :

Avec les trois clefs suivantes dans un fichier de configuration :

$_CFG['modules']['externals']['moodle']['root'] = $_CFG['SITE_URL'] . '/moodle';
$_CFG['modules']['externals']['moodle']['accessUrl'] = $_CFG['SITE_URL'] . '/moodle/login/index.php';
$_CFG['modules']['externals']['moodle']['logoutUrl'] = $_CFG['SITE_URL'] . '/moodle/login/logout.php';
<?
// this is a moodle bridge implementation
if (@$_CXT->hasLoggedIn){
    $login = get('login', 'POST');
    $password = get('password', 'POST');
    if (@$_CFG['modules']['externals']['moodle']['accessUrl'] != ''){
?>
    <form name="moodle_bridge" action="<?= $_CFG['modules']['externals']['moodle']['accessUrl'] ?>" method="POST" target="foo_moodle">
    <input type="hidden" name="username" value="<?= $login ?>">
    <input type="hidden" name="password" value="<?= $password ?>">
    </form>
    <iframe name="foo_moodle" style="display : none ; visibility : hidden ; width : 250px ; height : 200px"></iframe>
    <script type="text/javascript">
    document.moodle_bridge.submit();
    </script>
    <input type="hidden" name="referer" value="<?= get('referer', 'POST') ?>">
<?
        $referer = get('referer', 'REQUEST');
        if (preg_match("/moodle\/login\/index\.php/", $referer)){
?>
    <script type="text/jevescript">
    document.location.href = "<?= $referer ?>";
    </script>
<?
        }
    }
}
?>   

On peut faire un pont identique dans l'autre sens, en modifiant légèrement la page d'arrivée de Moodle. On fait également le même type de wrapping pour le logout :

Voilà l'astuce à la ... que j'utilise, dans la procédure de logout de mon site :

    <img src="<?= $_CFG['modules']['externals']['moodle']['logoutUrl'] ?>" style="width : 0px ; height : 0px">

En rapport aux clefs ci-dessus.

Un peu "tricky" quand même... non ?

En réponse à gilles vignon

Re: procedure inter serveur

par Philippe Chadefaux,
Bonsoir


La solution est d'utiliser CAS (en s'appuyant sur un annuaire LDAP).

Par contre ce n'est certainement pas le mot de passe qui est échangé entre l'ENT et Moodle.

Moodle est capable d'utiliser CAS reste à savoir si l'ENT aussi.


A+


En réponse à Philippe Chadefaux

Re: procedure inter serveur

par Stéphane Goussault,
Bonjour,

Le système CAS m'interresse mais je suis totalement novice en ce qui concerne ce système. J'ai 2 ou 3 applications installées parallélement à Moodle. Toutes nécessitent à chaque fois de s'authentifier.
Je souhaiterais savoir s'il peut s'installer facilement ?
Est-ce une application que l'on peut installer comme Moodle ou bien faut-il l'intervention du gestionnaire du serveur ?

Merci