Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] jAuth: Authentification via un SSO

Posted by Yann.L on 08/12/2008 17:14

Bonjour,

Dans mon application je dois utiliser un système d'authentification basé sur un SSO ,AccessMaster (pour ceux qui connaissent). Pour sécuriser mes applications PHP, j'ai à ma disposition un applet Java Authent.jar et plusieurs petits programmes qui permettent d'exploiter la réponse sous forme de jeton renvoyé par le Authent.jar.

  • SECJAVA_checkToken : permet de vérifier si le jeton est correct.
  • SECJAVA_getParam : permet de récupérer la valeur d'un attribut.
  • SECJAVA_getAllServ : permet de récupérer la liste des services auxquels la personne est inscrite, pour l'application.
  • SECJAVA_getIndex : permet de récupérer l'index contenu dans le jeton. Cet index correspond à celui qui a été inclut dans la page d'authentification contenant l'applet.

Voici normalement comment cela fonctionne:

  1. L'utilisateur accède à l'application par la page d'authentification.
  2. L'application reçoit la demande, exécute l'applet Authent.jar.
  3. Authent.jar renvoi un jeton avec les informations sur les habilitations de l'utilisateur.

La page d'authentification doit contenir les information suivantes pour exécuter l'applet:

 <APPLET CODE="Authent.class" ARCHIVE="Authent.jar" WIDTH=800 HEIGHT=400>
 <param name="CABBASE" value="Authent.cab">
 <param name="SSO_SYSTEM" value="NOM_SYSTEM">
 <param name="ALEA" value="123456789ABCDEF2">
 <param name="INDEX" value="1">
 <param name="WEB_SERVER" value="xx.xx.xx.xx">
 <param name="SEC_ATTRIB" value="FGHB">
 <param name="WEB_ADDRESS" value="page_reponse">
 <param name="WEB_END" value="">
 </APPLET>

Les données suivantes doivent être paramétrées en fonction de l'application:

  • SSO_SYSTEM : le nom sous lequel est déclarée l'application dans AccessMaster.
  • ALEA : 16 caractères alphanumériques déterminés aléatoirement par l'application. Cette donnée contribue à rendre l'échange entre le poste et le serveur non re-jouable.
  • INDEX : référence de la session ouvert par l'utilisateur. Il permet de retrouver l'aléa envoyé au poste, pour la vérification des données reçues.
  • WEB_SERVER : adresse du serveur applicatif.
  • SEC_ATTRIB : définition des données AccessMaster que l'application veut rapatrier.
  • WEB_ADRESS : page à laquelle devront être retournées les données AccessMaster.
  • WEB_END : Permet de passer une chaîne de caractère qui sera ajoutée à la fin du jeton.

J'aimerai pouvoir créer un driver JAuth pour utiliser cette méthode d'authentification mais je rencontre plusieurs problèmes:

  • L'applet fait passer sa réponse par l'URL (je n'ai pas accès au code source de l'applet) comment faire pour la récupérer sans passer par $_GET ?
  • Où dois-je placer dans l'arborescence pour accéder à Authent.jar et Authent.cab ?
  • La balise APPLET est elle reconnu par jTpl ?
  • Dois-je avoir les mêmes méthodes que dans jAuth.class.php ou puis-je en créer de nouvelle par exemple getService() qui me retournerai le service auquel est inscrit mon utilisateur ?

J'espère avoir été clair, et merci d'avance pour les renseignements .

  [Opened] Re: jAuth: Authentification via un SSO

Reply #1 Posted by laurentj on 08/13/2008 00:31

Salut,

L'applet fait passer sa réponse par l'URL

je ne comprend pas, quelle url ?

Où dois-je placer dans l'arborescence pour accéder à Authent.jar et Authent.cab ?

en principe, dans le répertoire www de l'application, puisque c'est en principe uniquement dans ce répertoire que doit se trouver toutes les ressources des pages web du site, visibles donc de "l'exterieur"

La balise APPLET est elle reconnu par jTpl ?

tu met ce que tu veux dans les templates. Par contre, APPLET n'est pas une balise standard, et je pense que tu devrais plutôt essayer d'utiliser la balise object, ça sera plus propre et fonctionnera mieux sur tout les navigateurs.

Dois-je avoir les mêmes méthodes que dans jAuth.class.php ou puis-je en créer de nouvelle par exemple getService() qui me retournerai le service auquel est inscrit mon utilisateur ?

Tu dois implémenter toutes les méthodes de l'interface jIAuthDriver. Tu peux ajouter d'autres méthodes, mais tu ne pourras pas les appeler de l'exterieur car il n'y a pas moyen dans la classe jAuth d'accéder directement à la classe du driver (on pourrait toutefois changer ça dans les prochaines versions de jelix).

  [Opened] Re: jAuth: Authentification via un SSO

Reply #2 Posted by Yann.L on 08/13/2008 11:19

Re bonjour,

Pour faire un essai j'ai créé une nouvelle application authent mais j'ai un petit souci :

Voici mon contrôleur default.classic.php

  • L'action index :
 function index() {
  $rep = $this->getResponse('html');
  $rep->bodyTpl = 'main';
  $tpl = new jTpl();
  $chemin = jUrl::get("authent~authent@classic", array("jeton"=>""));
  $tpl->assign('systeme', "ZY_ASS"); //nom du service systeme
  $tpl->assign('adresse', "xx.xx.xx.xx"); //ip du server d'application
  $tpl->assign('chemin', $chemin); //le chemin générer par jUrl.
  $tpl->assign('attrib', "EFG"); // défini les informations sur l'utilisateur que je veux recupérer
  $rep->body->assign('MAIN', $tpl->fetch('authent~authent'));
  return $rep;
 }

jeton = '' car c'est l'applet qui doit générer le jeton

  • Le template authent.tpl: (je sais c'est mieux <object>:D)
 <applet code="Authent.class" archive="Authent.jar">
 <param name="CABBASE" value="Authent.cab">
 <param name="SSO_SYSTEM" value="{$systeme}">
 <param name="WEB_SERVER" value="{$adresse}">
 <param name="WEB_ADDRESS" value="{$chemin}">
 <param name="SEC_ATTRIB" value="{$attrib}">
 <param name="WEB_END" value="">
 <param name="ALEA" value="CAFECAFECAFECAFE">
 <param name="INDEX" value="1">
 </applet>

Seulement voilà quand je fait :

 http://localhost/jelix/authent/www/index.php

Après exécution de l'action index et de l'applet l'url devient :

 http://55.86.4.97/jelix/authent/www/index.php?jeton=&module=authent&action=default:authentMONJETONAVECPLEINDECARACTEREPARCEQUECESTCRYPTER

au lieu de :

 http://55.86.4.97/jelix/authent/www/index.php?jeton=MONJETONAVECPLEINDECARACTEREPARCEQUECESTCRYPTER&module=authent&action=default:authent

Donc Jelix me renvoi un gentil message d'erreur (normale).

Une idée peut être pour contourner ce problème ?

EDIT: En faite j'ai trouvé: voici comment j'ai fait

 function index() {
  $rep = $this->getResponse('html');
  $rep->bodyTpl = 'main';
  $tpl = new jTpl();
  $chemin = jUrl::get("authent~authent@classic");
  $chemin .= '&jeton=';    
  $tpl->assign('systeme', "ZY_ASS");
  $tpl->assign('adresse', "xx.xx.xx.xx");
  $tpl->assign('chemin', $chemin);
  $tpl->assign('attrib', "EFG");      
  $rep->body->assign('MAIN', $tpl->fetch('authent~authent'));
  return $rep;
 }

Je sais pas si c'est très propre de construire une url comme ça mais ça marche ^^

  [Opened] Re: jAuth: Authentification via un SSO

Reply #3 Posted by Yann.L on 08/14/2008 09:50

Le paramètre $what permet de choisir le type retourner par jUrl::get, mais je dois impérativement avoir &jeton= à la fin de mon url parce que mon applet ajoute le contenu du jeton a la fin de l'url. Je comprend pas trop comment faire ...

 
Page
  1. Re: jAuth: Authentification via un SSO