« Frankiz » : différence entre les versions

De WikiBR
(Page créée avec « Frankiz est le portail interne des élèves. La version actuelle (3) a été lancée par le BR2k8 juste avant son départ du plateau. Elle est principalement destinée à po... »)
 
Ligne 20 : Ligne 20 :
Frankiz permet à des sites externes (binets en particulier) d'utiliser sa base de données pour authentifier les utilisateurs.
Frankiz permet à des sites externes (binets en particulier) d'utiliser sa base de données pour authentifier les utilisateurs.


Le webmaster du site en question doit auparavant faire une demande de mise en place de ce système en envoyant un mail à l'équipe frankiz (frankiz@frankiz@frankiz.polytechnique.fr).
Le webmaster du site en question doit auparavant faire une demande de mise en place de ce système en envoyant un mail à l'équipe frankiz (frankiz@frankiz.polytechnique.fr).
Il doit alors donner :
Il doit alors donner :
* l'url complète de la page de login de son site
* l'url complète de la page de login de son site

Version du 7 juillet 2011 à 10:38

Frankiz est le portail interne des élèves.

La version actuelle (3) a été lancée par le BR2k8 juste avant son départ du plateau. Elle est principalement destinée à pouvoir ouvrir l'utilisation de Frankiz aux écoles arrivant progressivement sur le plateau, et à devenir ainsi un portail de la vie associative du campus.

Le code de Frankiz3 est libre, et utilise git comme système de versionnement. Il est intégralement disponible à l'adresse suivante : http://git.frankiz.net/frankiz/

Développement

Les principaux projets de développement sont actuellement (juillet 2001) :

  • l'élargissement effectif aux autres écoles, en travaillant notamment sur :
    • la simplicité de création de nouveaux comptes, avec nomination de modérateurs dans chaque école
    • le cloisonnement des données et la possibilité de définir des champs de visibilité
  • la création de mini-forums qui remplaceraient à la fois les annonces et les newsgroups


Outils pour les développeurs

Authentification sur des sites externes

Frankiz permet à des sites externes (binets en particulier) d'utiliser sa base de données pour authentifier les utilisateurs.

Le webmaster du site en question doit auparavant faire une demande de mise en place de ce système en envoyant un mail à l'équipe frankiz (frankiz@frankiz.polytechnique.fr). Il doit alors donner :

  • l'url complète de la page de login de son site
  • les informations auxquelles il souhaite accéder
  • une justification de la demande (et oui, on ne partage évidemment pas notre base de données avec n'importe qui !)

Si la demande est acceptée, l'équipe frankiz renvoie alors une clé permettant d'authentifier les échanges d'informations entre frankiz et le site externe. Le site est alors inscrit dans notre base de données, et peut utiliser le système d'authentification externe.

Ci dessous un exemple commenté de script d'authentification, à mettre sur le site externe :

<?php
   header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
   //première étape, côté client
   $timestamp = time(); // prendre le timestamp permet d'éviter le rejeu de la requête
   $site = 'http://monsite/login'; // url de la page de login, doit correspondre *exactement* à celle entrée dans la base de données de frankiz (définie lors de l'inscription)
   $location  = "..." 
   // Champ non utile pour l'authentification et retransmis tel quel par frankiz. 
   // Il est prévu pour pouvoir mettre en place un système de redirection après 
   // authentification, vers la page à partir de laquelle le client avait tenté de se connecter.
   $request = json_encode(array('names', 'rights'));
   // Nature de la requête.
   // Fkz renverra ici à la fois les noms de la personne mais aussi ses droits dans différents groupes.
   // Il faut cependant que le site ait les droits sur les informations en question (à définir lors de son inscription).
   $key = "..."; // clé fournie par l'équipe frankiz lors de l'inscription du site
   $hash = md5($timestamp . $site . $key . $request);
   // On hash le tout authentifier les données
   $remote  = $globals->frankiz->url . '/remote?' . 'timestamp=' . $timestamp . '&site=' . $site . '&location=' . $location . '&hash=' . $hash . '&request=' . $request;
   header("Location:" . $remote); // et on redirige
   // 2nd étape, côté frankiz :
   // regarder sur git.frankiz.net si le code le code vous intéresse


   // 3ème étape, côté client :
   $timestamp = $_GET['timestamp'];
   // On récupère le timestamp envoyé la première fois
   if (abs($timestamp - time()) < 600)
   { // On vérifie qu'il est cohérent
       $response = $_GET['response']; // On vérifie le hash de la réponse
       if (md5($timestamp . $globals->frankiz->key . $response) == $_GET['hash'])
       {
           $response = json_decode($response, true); // On décode la réponse qui est en json
           if (in_array('admin', $response['rights']['my_group']))
           { // On peut vérifier le niveau de droit de l'utilisateur dans certains groupes renvoyés
               echo 'gagné !';
           }
       }
   }
        
    
?>