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 :

Security role et password


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 39
    Points : 34
    Points
    34
    Par défaut Security role et password
    Bonjour à tous

    J'utilise la partie Security de Symfony pour gérer l'authentification de mes utilisateurs http://symfony.com/doc/current/book/security.html

    Je n'utilise pas le FOSUserBundle car seule l'utilisation des rôles m'intéresse dans mon applis et d'après la doc c'est faisable.

    Mes users sont stocker dans une base de donnée dans l'entité Personnel.

    J'ai suivi la doc et j'ai d'abbord essayé avec 2 utilisateurs créer en dure dans security.yml... Et ça marche.

    Comme j'ai plus de 2 utilisateurs, je voulais me servir d'une base de données et c'est là que les problèmes commencent

    A chaque fois que je me connecte, j'ai le message d'erreur suivant : <gras>The presented password is invalid.</gras>. Il est devenu impossible de se connecter

    Voici mon code


    le code security.yml

    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
     
    security:
        encoders:
            Symfony\Component\Security\Core\User\User: plaintext
     
        role_hierarchy:
            ROLE_ADMIN:       ROLE_USER
            ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
     
        providers:
            main:
                entity: { class: Dosicalu\PedagicielBundle\Entity\Personnel, property: idPersonne }
     #       in_memory:
     #           users:
     #               minus:  { password: minus, roles: 'ROLE_USER' }
     #               cortex: { password: cortex, roles: 'ROLE_ADMIN' }
     
        encoders:
            Dosicalu\PedagicielBundle\Entity\Personnel: sha1
     
        firewalls:
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
     
            login:
                pattern:  /connexion$
                security: false
     
            secured_area:
                pattern:    ^/
                form_login:
                    check_path: /login_check
                    login_path: /connexion
                logout:
                    path:   /demo/secured/logout
                    target: /demo/
                #anonymous: ~
                http_basic:
                    realm: "Secured Demo Area"
     
        access_control:
            - { path: ^/admin, roles: ROLE_ADMIN }
            - { path: ^/, roles: ROLE_USER }
            #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
            #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
    et voici le code de mon entité Personnel


    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
     
    <?php
    namespace Dosicalu\PedagicielBundle\Entity;
     
    use Symfony\Component\Security\Core\User\UserInterface;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * @ORM\Entity
     * @ORM\Table(name="personnels")
     */
    class Personnel implements UserInterface
    {
        const ROLE_USER        = 'user';
        const ROLE_ADMIN       = 'admin';
        const ROLE_SUPERADMIN  = 'superadmin';
     
        /**
         * @ORM\Id
         * @ORM\Column(type="string", length="15")
         */
        protected $idPersonne;
     
        /**
         * @ORM\Column(type="string", length="50")
         */
        protected $password;
     
        /**
         * @ORM\Column(type="string", length="50")
         * @Assert\NotBlank()
         */
        protected $nom;
     
        /**
         * @ORM\Column(type="string", length="50")
         * @Assert\NotBlank()
         */
        protected $prenom;
     
        /**
         * @ORM\Column(type="string", length="60")
         * @Assert\Email()
         */
        protected $email;
     
        /**
         * @ORM\Column(type="string", length="100")
         */
        protected $ufr;
     
        /**
         * @ORM\Column(type="string", length="15")
         * @Assert\Choice(
         *     choices = { "user", "admin", "superadmin" },
         *     message = "Choisir un rôle valide."
         * )
         */
        protected $role;
     
        /**
         * @ORM\OneToMany(targetEntity="Demande", mappedBy="personnel")
         */
        protected $demande;
     
        /**
         * Set idPersonne
         *
         * @param string $idPersonne
         */
        public function setIdPersonne($idPersonne)
        {
            $this->idPersonne = $idPersonne;
        }
     
        /**
         * Get idPersonne
         *
         * @return string 
         */
        public function getIdPersonne()
        {
            return $this->idPersonne;
        }
     
        /**
         * Set nom
         *
         * @param string $nom
         */
        public function setNom($nom)
        {
            $this->nom = $nom;
        }
     
        /**
         * Get nom
         *
         * @return string 
         */
        public function getNom()
        {
            return $this->nom;
        }
     
        /**
         * Set prenom
         *
         * @param string $prenom
         */
        public function setPrenom($prenom)
        {
            $this->prenom = $prenom;
        }
     
        /**
         * Get prenom
         *
         * @return string 
         */
        public function getPrenom()
        {
            return $this->prenom;
        }
     
        /**
         * Set email
         *
         * @param string $email
         */
        public function setEmail($email)
        {
            $this->email = $email;
        }
     
        /**
         * Get email
         *
         * @return string 
         */
        public function getEmail()
        {
            return $this->email;
        }
     
        /**
         * Set role
         *
         * @param string $role
         */
        public function setRole($role)
        {
            if (!in_array($role, array(self::ROLE_USER, self::ROLE_ADMIN, self::ROLE_SUPERADMIN))) {
                throw new \InvalidArgumentException('Role non valide');
            }        
     
            $this->role = $role;
        }
     
        /**
         * Get role
         *
         * @return string 
         */
        public function getRole()
        {
            return $this->role;
        }
     
        public function __construct()
        {
            $this->demande = new \Doctrine\Common\Collections\ArrayCollection();
        }
     
        /**
         * Add demande
         *
         * @param Dosicalu\PedagicielBundle\Entity\Demande $demande
         */
        public function addDemande(\Dosicalu\PedagicielBundle\Entity\Demande $demande)
        {
            $this->demande[] = $demande;
        }
     
        /**
         * Get demande
         *
         * @return Doctrine\Common\Collections\Collection 
         */
        public function getDemande()
        {
            return $this->demande;
        }
     
        /**
         * Set ufr
         *
         * @param string $ufr
         */
        public function setUfr($ufr)
        {
            $this->ufr = $ufr;
        }
     
        /**
         * Get ufr
         *
         * @return string 
         */
        public function getUfr()
        {
            return $this->ufr;
        }
     
        public function equals(\Symfony\Component\Security\Core\User\UserInterface $user){}
     
        public function eraseCredentials(){}
     
        public function getPassword(){
     
     
            return 'cortex';
    }
     
        public function getSalt(){}
     
        public function getUsername(){}
     
        public function getRoles() {}
    }

    Est-ce que quelqu'un sait comment utiliser la partie Security de Symfony avec une base de donnée ?

    D'avance merci pour vos retour d'expérience.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Tu entres bien "cortex" comme password, car ton getPassword renvoie cette valeur en dur...

    As-tu mis en place un cryptage du password ?
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Merci pour ta réponse

    Alors pour répondre à tes questions


    1)J'entre bien "cortex" comme mot de passe (comme dans le provider in_memory)

    J'ai egalement supprimer "cortex" en dur dans ma méthode getPassword()

    2) Dans ma bdd le mot de passe cortex est passé à la moulinette sha1. Donc normalement c'est ce qui est défini dans l'attribut encoders:

    Résultat j'ai toujours le même message d'erreur

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    J'ai également inséré dans la bdd l'utilisateur minus avec un mot de passe vide (pour tester)

    J'obtient alors le message d'erreur suivant : The presented password cannot be empty.

    Ce qui peut se comprendre : un mot de passe vide c'est pas très sécurisé. Mais si on ne peut pas récupérer un simple mot de passe...

    Bref l'enquête continue

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Juste au cas où, mais je suis loin d'être un spécialiste :

    je vois dans ta config un encoders: "Dosicalu\PedagicielBundle\Entity\Personnel: sha1"

    Peut-être qu'il y a un problème à ce niveau et qu'il interprète le mot de passe que tu saisies comme une chaîne encodée avec sha1 ?

    Essaie de mettre en "plaintext"...

Discussions similaires

  1. security-role-mapping qui se remet tout seul
    Par FishNyx dans le forum Glassfish et Payara
    Réponses: 0
    Dernier message: 21/02/2012, 11h29
  2. Spring Security Login Role
    Par g25452 dans le forum Spring
    Réponses: 0
    Dernier message: 12/05/2009, 14h38
  3. Security roles - sysadmin
    Par barnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/12/2008, 12h57
  4. Failed to load users/passwords/role files
    Par paolo2002 dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 23/07/2007, 09h19
  5. Role, security constraint: best practice ?
    Par jfourment dans le forum Struts 1
    Réponses: 1
    Dernier message: 26/10/2006, 19h57

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