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

Langage PHP Discussion :

Authentification sur deux sites [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut Authentification sur deux sites
    Bonjour à tous,

    ma question vous paraitra peut être simple, mais pour moi là ca bloque ^^

    je souhaiterai tout simplement authentifier un utilisateur sur deux site diffèrent mais hébergés sur un même serveur.

    en fait l'explication est assez simple même si elle parait longue ^^

    j'ai un groupware (Agora-project) dans lequel je souhaiterai rajouter un lien vers un wiki (pour mon cas dokuwiki) car se groupware n'en propose pas.

    l'utilisateur se connecte au groupware mais lorsqu'il clique pour aller sur le wiki, il doit a nouveau se connecter sur le wiki, or je souhaiterai avoir une sorte de login automatique sur le wiki en utilisant le même login et mot de passe que celui du groupware.

    Première étape le login sur le groupware, j'ai un formulaire de ce type
    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
    32
     
    <form action="index.php" method="post" OnSubmit="return controle_connexion('Merci de spécifier un identifiant et un mot de passe','Identifiant','Mot de passe');" class="div_accueil" style="margin-top:50px;position:relative;">
    	<div style="position:absolute;margin-top:-20px;margin-left:-20px;"><img src="./templates/divers/connexion.png" /></div>
     
    	<table style="width:100%;" style="margin:auto;" cellpadding="20px;">
    		<tr>
    			<td style="text-align:center">
    				<input type="text" name="login" style="width:150px" /><script language="JavaScript"> element("login").focus(); </script> &nbsp; 
    				<input type="password" name="password" value="Mot de passe" style="width:130px" onfocus="if(this.value=='Mot de passe') this.value='';" /> &nbsp; 
    				<input type="hidden" name="resolution_width" value="" />
    				<input type="hidden" name="navigateur" value="" />
    				<script type="text/javascript"> set_value('resolution_width',document.documentElement.clientWidth);  set_value('navigateur',navigator.appName); </script>
     
    				<input type="submit" value="Connexion" style="font-size:12px;width:80px;" />
    			</td>
    		</tr>
    		<tr>
    			<td style="text-align:right;font-size:11px;padding:2px;">
    				<span  onMouseOver="bulle('<div style=\'text-align:center;width:250px;\'>Retenir mon identifiant et mot de passe pour une connexion automatique</div>');" onMouseOut="bullefin();"  >
    				<span class="lien" id="txt_connexion" onClick="check_txt_box(this.id,'connexion');">Memoriser</span>
    				<input type="checkbox" name="connexion_auto" value="1" id="box_connexion" onClick="check_txt_box(this.id,'connexion');" />
     
    				</span>
    				&nbsp; &nbsp; 
    				<span onClick="popup('./divers/password_oublie.php');" class="lien"  onMouseOver="bulle('<div style=\'text-align:center;width:300px;\'>Uniquement si une adresse de courriel a été spécifiée sur votre compte</div>');" onMouseOut="bullefin();"  >
    					Identifiant / Mot de passe oublié ?					<img src="./templates/divers/password_oublie.png" />
    				</span>
    			</td>
    		</tr>
    	</table>
     
    </form>
    donc lorsque mon utilisateur va confirmer son authentification, il y a bien une variable $login = le login entré
    et une variable $password = le password entrer

    maintenant mon user est connecté sur mon groupware et que je stock ces variable dans des variable de session.

    maintenant j'ai ajouter un lien qui pointe vers la page de connexion de mon wiki

    cette page de connexion contient ce type de formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <form action="/dokuwiki-2009-02-14/doku.php" method="post" accept-charset="utf-8" id="dw__login"><div class="no">
    <input type="hidden" name="sectok" value="d206519a347a470fcf2349687a784812" /><input type="hidden" name="id" value="start" /><input type="hidden" name="do" value="login" /><fieldset ><legend>Connexion</legend>
    <label class="block" for="focus__this"><span>Utilisateur</span> <input type="text" id="focus__this" name="u" class="edit" /></label><br />
    <label class="block"><span>Mot de passe</span> <input type="password" name="p" class="edit" /></label><br />
    <label class="simple" for="remember__me"><input type="checkbox" id="remember__me" name="r" value="1" /> <span>Mémoriser</span></label>
    <input type="submit" value="Connexion" class="button" />
    </fieldset>
    </div></form>
    donc pour mon raisonnement il faudrait que le champ "u" contiens le login enregistrer dans la session, et que le champ "p" contiens le password enregistré également dans la session

    le problème a ce niveau c'est que je peut modifier ça, mais l'utilisateur devra toujours cliquer sur le bouton "connexion" pour se connecter (même si le user et login sont renseigner)

    il suffirait de remplacer par exemple pour le champ utilisateur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <label class="block" for="focus__this"><span>Utilisateur</span> <input type="text" id="focus__this" name="u" class="edit" /></label><br />
    par ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <label class="block" for="focus__this"><span>Utilisateur</span> <input type="text" id="focus__this" name="u" value="<?php $_SESSION["le login enregistrer"]?>" class="edit" /></label><br />
    comme cela ma variable u contient deja le contenu correspondant a ma variable session, enfin pas sur de ma syntaxe mais cela devrait a peu près correspondre.

    alors les questions sont :

    1) la méthode que j'utilise est-elle bonne (ce que j'avance n'est que de la théorie ^^) ?
    2) comment faire pour que mon user n'ai pas besoin de cliquer sur connexion pour valider la seconde connexion pour que tout reste transparent

    en gros Connexion sur le groupware > clique sur le lien pour le wiki > arrive sur la page de connexion du wiki et validation automatique du login mot de passe > redirection vers l'index du wiki

    comme cela en cliquant sur mon lien, la partie login sur le wiki reste invisible pour l'utilisateur.

    fiouu j'espère ne pas vous avoir perdue en route, pas si simple que ça a expliquer en fait ^^

    si vous n'avez pas bien cerné mon problème , n'hésiter pas a demander, j'essayerai de mieux expliquer tout cela je suis pas très calé en php ^^

    merci d'avance pour toute aide apportée

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Pourquoi ne pas créer mettre ton formulaire (caché) dans la page avec où réside actuellement ton lien et faire un submit au moment du lien, en affectant les bonnes valeurs au différents champs du formulaire ?

    Quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <a href="#" onclick="document.getElementById("dw__login").submit();">vers wiki</a> 
    ...
    <form style="display:none" action="/dokuwiki-2009-02-14/doku.php" method="post" accept-charset="utf-8" id="dw__login"><div class="no">
    <input type="hidden" name="sectok" value="d206519a347a470fcf2349687a784812" />
    <input type="hidden" name="id" value="start" />
    <input type="hidden" name="do" value="login" />
    <input type="text" id="focus__this" name="u" class="edit" />
    <input type="password" name="p" class="edit" />
    <input type="checkbox" id="remember__me" name="r" value="1" /> 
    </form>
    par contre c'est pas top niveau securité...

    ou bien tu fais un lien vers la page de login du wiki, tu y injectes les valeurs login/password et tu renvoies vers le poste client en postant automatiquement dès la page chargée. Là encore la sécurité est très moyenne...

    Le plus simple (pas le plus propre) c'est faire soit la première soit la seconde solution et de modifier les scripts dokuwiki d'authentification pour y substituer tes variables de session aux variables de formualire.

    Le plus propre c'est tout simplement de créer ta propre class d'authentification dans dokuwiki (inc/auth/*.class.php); comme cela tu as toute latitude sur le code et tu ne pollues aucun des 2 softs...


    ERE

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    ok je vais creuser ces différente piste et voir ce que je peut en sortir, merci pour ton aide

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    je retire le résolu pour poser une question sur le niveau de sécurité

    si j'utilise la bête méthode qui consiste a remplacer les variable dans le formulaire par mes données enregistré dans une session

    le problème de sécurité serait alors poser si quelqu'un sniffe la connexion et récupère les donnée envoyé non ?

    par contre si le site est protégé par ssl, cela suffira-t-il a augmenter la sécurité ou cela ne change rien ?

    si je doit juste avoir un formulaire cacher plutôt que re écrire une classe pour l'authentification, cela me permettrai de gagner pas mal de temps surtout pour un novice du php :p

  5. #5
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Citation Envoyé par deglingo592003 Voir le message
    je retire le résolu pour poser une question sur le niveau de sécurité

    si j'utilise la bête méthode qui consiste a remplacer les variable dans le formulaire par mes données enregistré dans une session

    le problème de sécurité serait alors poser si quelqu'un sniffe la connexion et récupère les donnée envoyé non ?

    par contre si le site est protégé par ssl, cela suffira-t-il a augmenter la sécurité ou cela ne change rien ?

    si je doit juste avoir un formulaire cacher plutôt que re écrire une classe pour l'authentification, cela me permettrai de gagner pas mal de temps surtout pour un novice du php :p
    Oui, la sécurité viendrait du fait que login/password serait accessible à un moment ou un autre (par exemple en regardant le source de la page web...)

    ERE

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    ok je comprend mieux, effectivement c'est vraiment pas "top" comme solution, je vais donc me pencher vers la solution "propre" et plonger dans l'authentification de docuwiki

    merci beaucoup pour tes précieuse réponse

  7. #7
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Re,
    Citation Envoyé par deglingo592003 Voir le message
    ok je comprend mieux, effectivement c'est vraiment pas "top" comme solution, je vais donc me pencher vers la solution "propre" et plonger dans l'authentification de docuwiki

    merci beaucoup pour tes précieuse réponse
    Dans dokuwiki va voir ici inc/auth/*.class.php : c'est assez facile à réaliser sachant que ce sont des class. L'idée étant que tu puisse encore administrer dokuwiki en donnant des droits selon les utilisateurs; perso j'étendrais la class utilisée pour l'authentification (par défaut plain.class.php) en redéfinissant uniquement la fonction checkPass. En tout cela doit pas prendre plus de 5 lignes de code

    Et si tu ne veux pas étendre la class, modifie directement la méthode dans la class originale, c'est moins propre, mais bon, c'est à usage interne alors...

    ERE

  8. #8
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    j'étendrais la class utilisée pour l'authentification (par défaut plain.class.php) en redéfinissant uniquement la fonction checkPass. En tout cela doit pas prendre plus de 5 lignes de code

    ERE
    c'est exactement ce que j'étais entrain de regarder, pas si compliquer que ça en fait :p

  9. #9
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    c'est exactement ce que j'étais entrain de regarder, pas si compliquer que ça en fait :p

    C'est pour cela qu'il vaut mieux consacrer un peu de temps à réfléchir/découvrir les choses car ce sera bien plus propre et donc bien plus stable et évolutif.

    ERE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. repliquer sur deux sites avec un seul cluster (slony)
    Par fridi_mourad dans le forum Requêtes
    Réponses: 0
    Dernier message: 14/02/2009, 14h12
  2. Zend_auth - Avoir deux authentification sur deux appli Zend
    Par Jonathan.b dans le forum Zend_Acl & Zend_Auth
    Réponses: 16
    Dernier message: 07/08/2008, 21h10
  3. [web] authentification sur un site via VBA
    Par cafeine dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/04/2008, 16h47
  4. Authentification sur un site
    Par johnson95 dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2008, 17h18
  5. [Conception] Inscription simultanée sur deux sites différents
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/04/2006, 10h28

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