Partage
  • Partager sur Facebook
  • Partager sur Twitter

Migration de Symfony 5 à 6... Probleme de salt

Use->rGetSalt() n'est plus appelé....

    14 mars 2023 à 17:35:44

    Bonjour,

    J'ai migré un de mes projet de Symfony 5.4 à 6.2.7.

    Impossible de me connecter avec les utilisateurs presents en base (invalid credentials)

    security:
        providers:
            app_user_provider:
                entity:
                    class: App\Entity\User
                    property: username
        password_hashers:
           App\Entity\User:
                algorithm: sha512
                iterations: 6421
                encode_as_base64: true

    Si je créer un utilisateur ou modifie le mot de passe d'un existant, cela fonctionne. par contre...

    Après quelques essais, j'ai remarqué que symfony n'utilisait  par mon User->GetSalt()

    J'ai essayé les 3 lignes suivantes, il me valide quand même les nouveaux mot de passe...

     public function getSalt(): string|null
        {
            dd("GetSalt");
        	return null;
        	return $this->salt;
        }

    Quelqu'un sait ce que je peux faire ?  Pourquoi Synf 6  n'utilise plus User->GetSalt() ?   Est-ce que je peux le forcer à le prendre en compte ?

    Sinon (je suppose que non), il y a t-il moyen d'enlever les salt des encoded password des utilisateurs déja crées ?





    -
    Edité par Antoine 336 14 mars 2023 à 17:37:53

    • Partager sur Facebook
    • Partager sur Twitter
      14 mars 2023 à 19:54:32

      Salut

      Es-tu sûr que tes mots de passe sont stockés en base 64 ? Pour ma part, ayant dû migrer une application qui utilisait SHA1, les mots de passe n'étaient pas stockés en binaire, mais pas en base 64 non plus, donc j'ai encode_as_base64: false.

      Edit

      J'ai aussi une série d'instructions qui précisent que le système de hachage migre depuis une vieille version. Regarde cet autre sujet sur le même thème.

      -
      Edité par Ymox 14 mars 2023 à 20:18:10

      • Partager sur Facebook
      • Partager sur Twitter
        15 mars 2023 à 10:49:03

        Bonjour,

        J'ai été confronté au même problème que Antoine 336 lors de la migration de sf5 à sf6. J'ai des users qui étaient codés avec sha256 du temps ou mon site j'était sous sf3. Jusqu'à sf5, je pouvais identifier les anciens tout en codant avec la dernière technique pour les nouveaux. Cela ne marchait plus avec sf6 pour les utilisateurs qui avaient un salt non null.

        Je n'ai pas réussi à le résoudre :(

        je mets malgré tout la copie de mon fichier security.yaml pour la partie concernée, fichier qui pour cette partie n'a pas bougé entre SF5 et SF6:

        security:
            #enable_authenticator_manager: true
        
            password_hashers:
                legacy:
                    algorithm: sha256
                    encode_as_base64: false
                    iterations: 1
                App\Entity\User:
                    algorithm: 'auto'
                    migrate_from:
                        - legacy

        A vous

        -
        Edité par CarréDas1 15 mars 2023 à 11:14:00

        • Partager sur Facebook
        • Partager sur Twitter
          16 mars 2023 à 9:06:22

          Comme CarreDass1 1.... cela date d'une appli développé sous symf 3

          ce n'est pas un problème de base64....

          Pour faire les tests :

          - j'ai essayé sur la version 5.4 :

          •    - Je me connecte sans probleme
          •    - si je change le salt dans la base : cela ne fonctionne plus

          Sur la nouvelle version 6.2 :(sur un nouvel utilisateur)

          •      si je change le salt dans la base, j'arrive quand même a me connecter...

          Pour moi cela confirme que syfony 6 n'utilise plus le User->GetSalt()

          Mon seul espoir serait qu'il existe un moyen de forcer symfony forcer à utiliser le salt de l’utilisateur....

          • Partager sur Facebook
          • Partager sur Twitter
            16 mars 2023 à 10:00:06

            Il existe une autre solution que je n'ai pas trouvé comment mettre en oeuvre.

            Cela consisterait à balayer l'entité user et à transformer le mot de passe hâché avec salt en un mot de passe haché sans salt.

            Symfony fait automatiquement des opérations de ce type. Quand un ancien utilisateur (dont le mot de passe est codé en sha512 par exemple et sans salt pour sf6, avec salt aussi pour sf5) se connecte, alors automatiquement sont mot de passe est à l'avenir codé en bcrypt (et sans salt). Sans doute, symfony bénéficie de la connaissance du mot de passe non codé (que l'utilisateur envoie pour se connecter) pour faire cette opération.

            Comme je ne conserve pas les mots de passe non codés, ma solution exigerait qu'on puisse faire l'opération en utilisant uniquement les mots de passe codés!

            A vous

            • Partager sur Facebook
            • Partager sur Twitter
              16 mars 2023 à 13:19:01

              SI je me réfère au premier point de la documentation sur les custom password hashers, je me demande si les anciens mots de passe ne pourraient pas être gérés que par un de ces "hacheurs" personnalisés qui implémenterait LegacyPasswordHasherInterface.

              Malheureusement, la documentation ne remonte pas plus loin que la version 5.3 de Symfony, du moins pas avec la même structure. Reste que LegacyPasswordHasherInterface demande l'implémentation d'une méthode qui prend le sel en paramètre supplémentaire, reste à savoir s'il faut un outil d'authentification spécifique pour gérer cela "manuellement" ou si Symfony s'en sort du fait de l'interface.

              -
              Edité par Ymox 16 mars 2023 à 13:19:16

              • Partager sur Facebook
              • Partager sur Twitter
                13 décembre 2024 à 11:07:16

                Je déterre ce sujet ancien car resté sans réponse.

                La solution pour que le hasher utilise le getSalt de l'utilisateur est d'implémenter l'entité User par LegacyPasswordAuthenticatedUserInterface.

                • Partager sur Facebook
                • Partager sur Twitter
                  13 décembre 2024 à 13:08:38

                  C'est bien ce que je disais. J'avais peur de ne pas avoir été lu.

                  Edit

                  Au temps pour moi :honte:

                  -
                  Edité par Ymox 13 décembre 2024 à 13:10:30

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Migration de Symfony 5 à 6... Probleme de salt

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown