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 :

Authentification et entity manager [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut Authentification et entity manager
    Salut,

    j'ai enfin réussi à configurer mon authentification avec LDAP, mon soucis aujourd'hui viens de la gestion des rôles.

    Pour ma gestion des rôles elle doit se faire sur une base de donnée MySQL, donc dans le constructeur de mon User je rentre mes infos tiré du ldap et ensuite je fait une recherche sur ma BDD. (Tous ça pendant l'authentification)

    J'arrive pendant l'authentification à récupérer mon Entity Manager que je stock dans mon ldapmanager mais le problème c'est que ensuite mon ldapmanager se fait serializer et unserializer pour le token et ça pose problème car l'em une fois unserializer ne fonctionne plus...

    Si quelqu'un connais peut être une méthode pour ne pas serializer que un attribut d'un objet ou aurai une solution je suis preneur !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Par défaut
    A mon avis tu es reparti encore dans une usine a gaz et n'applique pas les méthodes normales

    Ce qui est sérialise et stocker dans la session c'est bien ton token, mais celui ci contient déjà tes rôles.

    Normalement tu récupère ton user via le userprovider défini dans la conf et passer en paramètre a ton listener.

    Ex de Listener :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    class NTLMListener implements ListenerInterface
    {
        protected $securityContext;
        protected $authenticationManager;
        protected $adldap;
        protected $groupPattern = "";
     
        public function __construct(SecurityContextInterface $securityContext,
            AuthenticationManagerInterface $authenticationManager,
            Ldap $adldap,
            $groupPattern)
        {
            $this->securityContext = $securityContext;
            $this->authenticationManager = $authenticationManager;
            $this->adldap = $adldap; 
            $this->groupPattern = $groupPattern;
        }
     
        public function handle(GetResponseEvent $event)
        {
            $request = $event->getRequest();
     
            $securityToken = $this->securityContext->getToken();
            if (!isset($securityToken) || !$securityToken->isAuthenticated() )
            {
                if (isset($_SERVER['REMOTE_USER']) && $_SERVER['AUTH_TYPE']=='NTLM') {
                    $userdata = explode('\\',$_SERVER['REMOTE_USER']);
                    $user = $this->adldap->getUser($userdata[1]);
                    if (isset($user)) {
                        $roles = array();
                        if ($this->groupPattern != "") 
                        {
                            $groups = $user->getGroups();
                            foreach ($groups as $group) {
                                if (preg_match($this->groupPattern, $group->getCn(), $matches) == 1)
                                {
                                    $roles[] = 'ROLE_'.strtoupper($matches[1]);
                                }
                            }
                        }
                        $securityToken = new NTLMUserToken($roles);
                        $securityToken->setUser($user->getSamaccountname());
                        $securityToken->setDomain($userdata[0]);
                        $securityToken->setCompany($user->getCompany());
                        $securityToken->setEmail($user->getMail());
                        $securityToken->setName($user->getCn());
                        $securityToken->setSid($user->getObjectsid());
                        $securityToken->setAuthenticated(true);
     
                    } else {
                        $securityToken = new NTLMUserToken();
                    }
                }
            }
     
     
            try {
                $returnValue = $this->authenticationManager->authenticate($securityToken);
                if ($returnValue instanceof TokenInterface) {
                    return $this->securityContext->setToken($returnValue);
                } else if ($returnValue instanceof Response) {
                    return $event->setResponse($response);
                }
            } catch (AuthenticationException $e) {}
     
            $response = new Response();
            $response->setStatusCode(403);
            $event->setResponse($response);
        }
    }
    Les tokens :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
     
    class NTLMUserToken extends AbstractToken
    {
     
        public function getCredentials()
        {
            return md5($this->getUser());
        }
     
        public function getUserId() 
        {
            return $this->getAttribute('userId');
        }
     
        public function setUserId($id) 
        {
            $this->setAttribute('userId', $id);
        }     
     
        public function getSid() 
        {
            return $this->getAttribute('sid');
        }
     
        public function setSid($sid) 
        {
            $this->setAttribute('sid', $sid);
        }    
     
        public function getDomain() 
        {
            return $this->getAttribute('domain');
        }
     
        public function setDomain($domain) 
        {
            $this->setAttribute('domain', $domain);
        }
     
        public function getName() 
        {
            return $this->getAttribute('name');
        }
     
        public function setName($name) 
        {
            $this->setAttribute('name', $name);
        }  
     
        public function getCompany() 
        {
            return $this->getAttribute('company');
        }
     
        public function setCompany($company) 
        {  
            $this->setAttribute('company', $company);
        }  
     
        public function getEmail() 
        {
            return $this->getAttribute('email');
        }
     
        public function setEmail($email) 
        {
            $this->setAttribute('email', $email);
        }  
     
    }
    Le provider ultra simple pour mon cas mais a completer avec ta gestion car il recupere ici ton user provider :

    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
     
    class NTLMProvider implements AuthenticationProviderInterface
    {
        private $userProvider;
     
        public function __construct(UserProviderInterface $userProvider)
        {
            $this->userProvider = $userProvider;
        }
     
        public function authenticate(TokenInterface $token)
        {
           if($token->isAuthenticated())
           {
                $token->setUser($token->getUsername());
                return $token;
           }
     
           throw new AuthenticationException('The NTLM authentication failed.');
        }
     
        public function supports(TokenInterface $token)
        {
            return $token instanceof NTLMUserToken;
        }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    Merci ta réponse m'a bien aidé j'ai tous reconstruis comme il faut ça marche impeccable !!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Par défaut
    Bonjour à vous, serait-il possible d'avoir la source qui t'a permis de mettre en place NTLM?

    Un grand merci d'avance.

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

Discussions similaires

  1. Question JPA Entity manager
    Par fdc.j dans le forum JPA
    Réponses: 0
    Dernier message: 24/04/2009, 21h45
  2. [EJB3 Entity] Gestion d'Entity Manager
    Par NinaSky dans le forum Java EE
    Réponses: 2
    Dernier message: 27/06/2008, 11h57
  3. Réponses: 4
    Dernier message: 01/12/2007, 22h22
  4. Effectuer du JDBC via l'Entity Manager
    Par Claythest dans le forum JPA
    Réponses: 1
    Dernier message: 06/04/2007, 10h22
  5. [EJB3 Entity] Création d'un entity Manager pour transaction
    Par bizet dans le forum Java EE
    Réponses: 4
    Dernier message: 23/02/2007, 08h58

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