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

Symfony PHP Discussion :

SSO Single Sign On avec Symfony


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut SSO Single Sign On avec Symfony
    Salut,

    J'ai une classe utisateur que j'ai récupéré d'une vielle application qui utilise ADLDAP pour authentifier les utilisateurs directement depuis l'Active Directory. Dans cette vieille application, les utilisateurs n'avaient donc pas besoin de saisir de nom d'utilisateur et de mot de passe. Il suffisait ensuite de tester le groupe AD des utilisateurs pour leur donner plus ou moins de droits.

    Comment vous y prendriez vous pour intégrer ça dans une application symfony ?

    Est-ce que vous auriez une recette générale pour me donner un coup de main.

    Merci

    Voici comment fonctionnait le code php de mon ancienne application :

    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
     
     
    // Constructeur
    function __construct($utilisateur_login){
     
    	$ldap = Utilisateur::initLdap();
     
    	$result=$ldap->user_info($utilisateur_login,array("samaccountname"));
    	if (!$result){
    		return false;
    	}
    	$this->utilisateur_login = utf8_decode($result[0][samaccountname][0]);
     
    	$result=$ldap->user_info($utilisateur_login,array("sn")); // Requete LDAP sur AD
    	$this->utilisateur_nom = utf8_decode($result[0][sn][0]);
     
    	$result=$ldap->user_info($utilisateur_login,array("givenname")); // Requete LDAP sur AD
    	$this->utilisateur_prenom = utf8_decode($result[0][givenname][0]);
     
    	$result=$ldap->user_info($utilisateur_login,array("mail")); // Requete LDAP sur AD
     
    	$this->utilisateur_adresseEmail = $result[0][mail][0];
    	}
    }
    Here's the initLdap method :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static function initLdap(){
    	if (Utilisateur::$ldap == null){
    			$ldap = new adLDAP();
    			Utilisateur::$ldap = $ldap;
    	} else {
    			$ldap = Utilisateur::$ldap;
    	}
    	return $ldap;
    }

    Here is my connection method :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function connexionUtilisateur(){
     
    	$utilisateur_login = substr($_SERVER['REMOTE_USER'],0,strpos($_SERVER['REMOTE_USER'],"@"));
     
    	$_SESSION['UTILISATEUR'] = new Utilisateur($utilisateur_login);
    	$login = $_SESSION['UTILISATEUR']->getUtilisateur_login();
    	if ($login != "")
    		return true;
    	else 
    		return false;
     
    }
    Merci du coup de main !

  2. #2
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Bonjour,

    Utilises-tu le protocole NTLM pour cela ? Si oui, mon plugin devrait fonctionner aussi pour toi : vjAuthPlugin (ne gère que l'authentification via l'AD et le SSO) ou mon dernier plugin vjGuardADPlugin (gère l'authentification AD + SSO + gestion des droits des users de l'AD + gestion groupes et permissions).

    Je pars en vacances demain et reviens dans une semaine donc si tu as besoin d'aide avec ces plugins, il faudra attendre mais normalement, la doc sur le site est suffisante
    symfony power user !

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Salut,

    Je crois que le sfGuardPlugin pourrais aussi résoudre ton problème :


    Check the user password with an external method

    If you don't want to store the password in the database because you already have a LDAP server, a .htaccess file or if you store your passwords in another table, you can provide your own checkPassword callable (static method or function) in app.yml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    all:
      sf_guard_plugin:
        check_password_callable: [MyLDAPClass, checkPassword]
    When symfony will call the $this->getUser()->checkPassword() method, it will call your method or function. Your function must takes 2 parameters, the first one is the username and the second one is the password. It must returns true or false. Here is a template for such a function:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function checkLDAPPassword($username, $password)
    {
      $user = LDAP::getUser($username);
      if ($user->checkPassword($password))
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    Issu de cette documentation :

    http://www.symfony-project.org/plugins/sfGuardPlugin

    A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Merci pour vos réponses !
    J'utilise Kerberos. Mon serveur est sous linux, je crois que le paquet c'est krb ou quelque chose comme ça.
    Pareil pour moi, vancances pour une semaine, je teste ça de retour au taf; Merci et bonnes fêtes !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Salut sacricri,

    Es-tu rentré de vacances ?

    Est ce que tu penses que ton plugin peut marcher avec une authentification Kerberos ? Si non, est ce que je peux me débrouiller manuellement dans symfony pour l'authentification et la gestion des groupes via l'AD ?

    Je n'ai pas mis l'intégralité de mon code source mais je checkais aussi l'appartenance des users à des groupes (ton plugin a l'air de le gérer aussi d'ailleurs).

    Bref, aurais tu quelques pistes pour m'aider ?

    Salut mathieu44800, en fait, j'ai pas l'impression qu'on puisse faire du SSO avec sfGuardPlugin... Ca a l'air dêtre une authentification via l'AD mais manuelle ? Je me trompe ?

  6. #6
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Salut, je suis bien de retour :p

    Peux-tu m'expliquer brièvement le principe du SSO avec Kerberos pour avoir une idée de la cohabitation avec mon plugin stp ?
    symfony power user !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Salut,

    Merci pour ta réponse.
    Le SSO est entièrement géré au niveau d'Apache. Pour vérifier si un user est connecté ou non, j'utilise ce code :

    $utilisateur_login = substr($_SERVER['REMOTE_USER'],0,strpos($_SERVER['REMOTE_USER'],"@"));

    Si utilisateur_login vaut "", c'est que le user n'est pas authentifié.

    Pour les groupes, c'est dans ma classe Utilisateur, j'utilise la classe ADLDAP pour interroger facilement l'AD avec la fonction user_in_group.

    Bon réveillon !


  8. #8
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Ok, ça devrait s'intégrer facilement au plugin, j'essayerai de regarder la semaine prochaine.

    Sinon, j'utilise également ADLDAP donc ça ne devrait pas poser de problème
    symfony power user !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Trop bien ! Merci beaucoup pour le coup de main !

  10. #10
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Peux-tu m'envoyer en MP ton mail que je t'envoie un package test avec les modifications (sans doute pas ce soir :p)
    symfony power user !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Salut sacricri,

    J'ai un souci pour installer ton plugin... J'ai tapé la commande suivante :

    ./symfony plugin:install /usr/local/src/vjGuardADPlugin-1.0.2.tgz

    ça me met cette erreur :

    >> plugin installing plugin "/usr/local/src/vjGuardADPlugin-1.0.2.tgz"
    >> sfPearFrontendPlugin symfony/vjGuardADPlugin requires package
    >> sfPearFrontendPlugin "symfony-plugins/vjGuardADPlugin" (version >= 1.3.0, version
    >> sfPearFrontendPlugin <= 1.5.0, excluded versions: 1.5.0)

    Plugin "/usr/local/src/vjGuardADPlugin-1.0.2.tgz" installation failed: No valid packages found

    Tu as une idée ? chuis désolé, je suis pas très très doué....

Discussions similaires

  1. Single Sign On avec SOAP
    Par Arjuna dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 21/10/2012, 05h02
  2. Simuler du Single Sign On (SSO)
    Par nuke_y dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 15/04/2010, 11h23
  3. sso (Single Sign-On) avec cognos
    Par Archimede35 dans le forum Cognos
    Réponses: 7
    Dernier message: 11/09/2009, 09h49
  4. [SSO] Single Sign On en LDAP pour une appli web
    Par imsory dans le forum Sécurité
    Réponses: 4
    Dernier message: 21/05/2008, 21h58
  5. [Portlet] Single Sign On possible avec une appli en JSP
    Par osmoze dans le forum Portails
    Réponses: 4
    Dernier message: 16/03/2006, 17h45

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