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 :

Symfony2, FOSUserBundle et Sonata : "Bad credentials" au login en prod [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut Symfony2, FOSUserBundle et Sonata : "Bad credentials" au login en prod
    J'ai créé mon site en local, tout marche nickel.
    Je l'ai passé en production (OVH), le site marche bien (base mySQL créée correctement), sauf mon accès à l'administration.

    J'ai créé l'utilisateur dans la BDD via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ php/console fos:user:create
    Ensuite, dans mes paramètres, j'ai ça :
    /app/config/security.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        access_control:
    		[]
            # Secured part of the site
            # This config requires being logged for the whole site and having the admin role for the admin part.
            # Change these rules to adapt them to your needs
            - { path: ^/MyAdmin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
            - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
    Avec ce réglage, si je vais sur http://monsite.fr/MyAdmin/ => j'obtiens "Bad credentials." quand je saisi mes identifiants (j'ai même créé un admin/admin pour être sûr de ne pas me tromper dans la saisie).

    Si je désactive l'accès sécurisé en remplaçant par :
    - { path: ^/MyAdmin/, role: IS_AUTHENTICATED_ANONYMOUSLY }

    => J'obtient "Une erreur est intervenue lors de la mise à jour de l'élément "-".
 Le jeton CSRF est invalide. Veuillez renvoyer le formulaire."
    Je ne sais pas si ça peut être une piste.

    Si quelqu'un a déjà été confronté a ce pb, je suis preneur de tout indice !!!

    Merci

  2. #2
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    L'erreur du token n'a rien à voir avec ton erreur d'accées
    Une piste pour débeugguer:

    • Vérifie bien dans ta base que ton admin possede bien le role "ROLE_ADMIN"
    • ou bien lance php/console fos:user:promote et attribue le bon rôle à ton admin
    • essai aussi en ajoutant un $ dans ton pattern



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      access_control:
    		[…]
            # Secured part of the site
            # This config requires being logged for the whole site and having the admin role for the admin part.
            # Change these rules to adapt them to your needs
            - { path: ^/MyAdmin$, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
            - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
    Je suis Développeur Senior ouvert aux opportunités
    Mon blog

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    J'ajouterais:
    - as-tu essayé fos:user:create avec le flag --super-admin ?
    - as-tu vérifié que l'utilisateur est bien créé dans la BDD?

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    et moi j'ajouterai que dans la base de donnée, ta colonne password dans User le varchar est à 45 alors qu'il lui faut au moins 256.

    les paris sont ouvert ...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par dukoid Voir le message
    et moi j'ajouterai que dans la base de donnée, ta colonne password dans User le varchar est à 45 alors qu'il lui faut au moins 256.

    les paris sont ouvert ...
    Non, perdu !
    Ça je l'avais vu dans un de tes autres sujets, j'vais grand espoir que ce soit un truc "bête" comme ça.
    Ceci dit, je suis à 255 (mais c'est aussi le cas en local où ça marche bien).

    Merci en tout cas !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par phpiste Voir le message
    Bonjour,

    L'erreur du token n'a rien à voir avec ton erreur d'accées
    Une piste pour débeugguer:

    • Vérifie bien dans ta base que ton admin possede bien le role "ROLE_ADMIN"

    Oui, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a:1:{i:0;s:16:"ROLE_SUPER_ADMIN";}
    pour l'un, et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a:1:{i:0;s:10:"ROLE_ADMIN";}
    pour l'autre
    • ou bien lance php/console fos:user:promote et attribue le bon rôle à ton admin

    • essai aussi en ajoutant un $ dans ton pattern

    Je viens d'essayer en mettant carrément .* (bonne idée ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      access_control:
            - { path: ^/MyAdmin/.*, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
    ...mais sans plus de succès :-(
    Il y a un truc que je n'ai pas encore testé, c'est de désactiver le SHA512 (temporairement) et repasser en plaintext :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    security:
    #    encoders:
    #        Symfony\Component\Security\Core\User\User: plaintext
        encoders:
            FOS\UserBundle\Model\UserInterface: sha512
    Par contre, si je fais ça, il faut supprimer puis recréer les utilisateurs dans la base je suppose ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    - as-tu essayé fos:user:create avec le flag --super-admin ?
    Je viens d'essayer avec un nouveau nom.
    Citation Envoyé par Tsilefy Voir le message
    - as-tu vérifié que l'utilisateur est bien créé dans la BDD?
    Et ça me crée bien l'utilisateur dans la base (accès via phpmyadmin), avec le "ROLE_SUPER_ADMIN".

    Par contre, j'ai créé un Groupe avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a:7:{i:0;s:10:"ROLE_ADMIN";i:1;s:9:"ROLE_USER";i:2;s:17:"ROLE_SONATA_ADMIN";i:3;s:16:"ROLE_SUPER_ADMIN"; i:4;s:22:"ROLE_ALLOWED_TO_SWITCH";i:5;s:6:"SONATA";i:6;s:32:"ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT";}
    Le nouveau utilisateur n'est pas automatiquement rajouté à ce groupe dans la table users_groups, mais je ne pense pas que cela puisse jouer, si ?

  8. #8
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    security:
    #    encoders:
    #        Symfony\Component\Security\Core\User\User: plaintext

    pour tester tu modifie directement un enregistrement de la table user et tu met un mot de passe en clair dans password: "chouette"
    et puis tu teste avec cet utilisateur ....

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    En passant:
    FOS\UserBundle\Model\UserInterface: sha512
    Ne jamais faire pour un site en ligne.

    Un PC avec Windows 7 et une carte graphique de moyenne gamme peut faire en brute force 104 millions d'essais par seconde pour cracker un hash sha512.

    Il ne faut pas utiliser ce genre d'algorithmes rapides, il faut utiliser un encodeur lent comme bcrypt

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par dukoid Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    security:
    #    encoders:
    #        Symfony\Component\Security\Core\User\User: plaintext

    pour tester tu modifie directement un enregistrement de la table user et tu met un mot de passe en clair dans password: "chouette"
    et puis tu teste avec cet utilisateur ....
    Bon j'ai essayé en mettant plaintext, puis créé un utilisateur via la ligne de commande, et dans le champ mot de passe, il m'a mis "adm2{26nr613isqqswc8sss08kcgoko8c4ww}" = adm2 mon mot de passe, puis entre accolade, le contenu de la colonne salt !?!?
    J'ai essayé de me connecter avec adm2 seul ou la chaine complète, sans succès dans les 2 cas.
    Y a vraiment un truc qui m'échappe... :-(

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    En passant:


    Ne jamais faire pour un site en ligne.

    Un PC avec Windows 7 et une carte graphique de moyenne gamme peut faire en brute force 104 millions d'essais par seconde pour cracker un hash sha512.

    Il ne faut pas utiliser ce genre d'algorithmes rapides, il faut utiliser un encodeur lent comme bcrypt
    OK, bon quand ça marchera, j'essayerais de changer ça !

    Par contre, question bête, mais mon serveur ne supportera sans doute pas 104 millions de tentatives de connexion par seconde ?
    (surtout qu'on doit pouvoir mettre un nb limite de tentatives par IP, mais j'ai pas encore cherché ça...)

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bien sûr que non, ton serveur tombera en moins d'une seconde :-) (sauf si tu as un bon firewall)

    Non, ce risque se pose si quelqu'un parvient à hacker ta base de données utilisateurs et donc détient tous leurs mots de passe hashés. Et le principal danger vient du fait que beaucoup de gens ont la fâcheuse manie de réutiliser les mêmes mots de passe sur tous les sites.

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par ail5urfer Voir le message
    Bon j'ai essayé en mettant plaintext, puis créé un utilisateur via la ligne de commande, et dans le champ mot de passe, il m'a mis "adm2{26nr613isqqswc8sss08kcgoko8c4ww}" = adm2 mon mot de passe, puis entre accolade, le contenu de la colonne salt !?!?
    J'ai essayé de me connecter avec adm2 seul ou la chaine complète, sans succès dans les 2 cas.
    Y a vraiment un truc qui m'échappe... :-(
    Question bête, tu as bien enlevé les # qui désactivent ces lignes, et fait l'inverse (commenté avec un #) sur l'encodeur sha512?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Question bête, tu as bien enlevé les # qui désactivent ces lignes, et fait l'inverse (commenté avec un #) sur l'encodeur sha512?
    Oui, avec le cache:clear qui va bien ensuite...

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Dans la lignée des questions bêtes, tu as bien une page derrière MyAdmin?

    Sinon, peux-tu poster l'intégralité de ton security.yml?

  16. #16
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Dans la lignée des questions bêtes, tu as bien une page derrière MyAdmin?

    Sinon, peux-tu poster l'intégralité de ton security.yml?
    Oui, derrière MyAdmin, j'ai la page Dashboard du Bundle Sonata.

    Mon security.xml :
    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
     
    security:
        encoders:
    #        FOS\UserBundle\Model\UserInterface: sha512
            FOS\UserBundle\Model\UserInterface: plaintext
        acl:
            connection: default
     
        role_hierarchy:
            ROLE_ADMIN:       [ROLE_USER, ROLE_SONATA_ADMIN]
            ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
            SONATA:
                - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT  # if you are using acl then this line must be commented
     
        providers:
            in_memory:
                memory:
                    users:
                        user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                        admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
            fos_userbundle:
                id: fos_user.user_manager
     
        firewalls:
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
     
            admin:
                pattern:            /MyAdmin(.*)
                context:            user
                form_login:
                    provider:       fos_userbundle
                    login_path:     /MyAdmin/login
                    use_forward:    false
                    check_path:     /MyAdmin/login_check
                    failure_path:   null
                logout:
                    path:           /MyAdmin/logout
                anonymous:          true
     
            main:
                pattern:         .*
                context:         user
                form_login:
                    provider:    fos_userbundle
                    login_path:  /login
                    check_path:  /login_check
                    remember_me: true
                remember_me:
                    key:         %secret%
                    lifetime:    3600
                    path:        /
                logout:
                    path:        /logout
                    target:      /
                anonymous:       true
     
        access_control:
     
            # URL of FOSUserBundle which need to be available to anonymous users
            - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
     
            # Admin login page needs to be access without credential
            - { path: ^/MyAdmin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/MyAdmin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/MyAdmin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
     
            # Secured part of the site
            # This config requires being logged for the whole site and having the admin role for the admin part.
            # Change these rules to adapt them to your needs
            - { path: ^/MyAdmin/.*, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
            - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par phpiste Voir le message
    L'erreur du token n'a rien à voir avec ton erreur d'accées
    Oui, je me doute.
    Mais en fait, pour vérifier que le reste de l'admin marche bien, j'aurais voulu supprimer temporairement la protection, et c'est là que je tombe sur cette histoire de CSRF...

    Comment passer outre cette restriction ?

  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Hmm...

    Remplace ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - { path: ^/MyAdmin/.*, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - { path: ^/MyAdmin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
    et supprime les in-memory providers, pour voir?

  19. #19
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut 6 mois plus tard...
    Bonjour à tous,


    Bon après avoir laisser un peu tomber ce projet "bloqué", j'ai décidé de m'y remettre. Et devinez quoi ? Tous mes soucis sont résolus !

    J'ai commencé par faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php composer.phar install
    sur mon serveur OVH (en local aussi)
    Je suis donc passé, entre autre, a la dernière version de Symfony2 : v2.7.6

    => mais toujours les mêmes souci.

    Ensuite, je ne sais pas trop pourquoi, je suis tombé sur mon .ovhconfig (celui dans /web).
    Il était réglé sur PHP 5.4.
    J'ai changé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    app.engine=php
    app.engine.version=5.6
    http.firewall=none
    environment=development
    Et là, miracle, tout marche (plus de bad credential, possibilité de lancer ma page app_dev.php, CRSF Token ne bloque plus...)

    Voilà, donc si jamais ça peut en débloquer d'autres :-)

    Pour info, le site en question est là : http://musique.entre-potes.fr

  20. #20
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bonjour,

    Merci du retour!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/04/2015, 14h53
  2. [2.x] Problème bad credentials Symfony2
    Par Rwilson3 dans le forum Symfony
    Réponses: 3
    Dernier message: 20/02/2015, 11h14

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