Projet

Général

Profil

Development #24833

Adopter un mode de validation des mots de passe basé sur une liste de critères simples

Ajouté par Benjamin Dauvergne il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
27 juin 2018
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Au lieu de demander "3 classes de caractères différentes" qui est un poil perturbant et difficile à représenter, on devrait pouvoir demander:
  • 1 caractère majuscule
  • 1 caractère minuscule
  • 1 chiffre

A définir ce serait assez simple:

A2_PASSWORD_VALIDATION_RULES = [
   'authentic2.password_validation.LengthRule',
   'authentic2.password_validation.UpperCaseRule',
   'authentic2.password_validation.LowerCaseRule',
   'authentic2.password_validation.DigitRule',
]

chaque critère serait défini ainsi

class UpperCaseRule(object):
     label = _('at least 1 uppercase character')

     def validate(self, password):
          return bool(re.find('[A-Z]', password))

Sur la prod les valeurs définis sont les mêmes que celle par défaut (8 caractères, 3 classes).

Je propose que la nouvelle règle LengthRule reprenne le même setting qu'avant pour compatibilité, par contre le setting sur le nombre de classe disparaît pour être remplacé par la liste des classes de règle.

Je propose une API validate_password(password, user=None, ou=None) qui retourne une liste de tuple (bool, unicode), un par critère. Ça pourra être utilisé par le web-service de validation et le champ mot de passe (validation en frontend via appel ajax au web-service, validation en backend par PasswordField).


Fichiers


Demandes liées

Lié à Authentic 2 - Development #24439: Nouvelle interface de mot de passeFermé

Actions

Révisions associées

Révision 35b3136e (diff)
Ajouté par Benjamin Dauvergne il y a presque 6 ans

add new API to validate passwords (fixes #24833)

POST /api/validate-password/ HTTP/1.1
Conten-Type: application/json

{"password": "whatever"}
200 Ok
Content-Type: application/json

{
"result": 1,
"ok": false,
"checks": [ {"label": "at least 1 digit", "result": false}
]
}

This API is public.

Révision 291dc5e2 (diff)
Ajouté par Benjamin Dauvergne il y a presque 6 ans

convert password validation code to new API (#24833)

Révision f3a80618 (diff)
Ajouté par Benjamin Dauvergne il y a presque 6 ans

update french translation (#24833)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

#2

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

#3

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

Voilà j'ai migré aussi l'ancien code de validation des mots de passe, manque encore les nouvelles traductions. Ça va changer un poil les messages en attendant le patch d'Elias.

#4

Mis à jour par Anonyme il y a presque 6 ans

Benjamin Dauvergne a écrit :

Voilà j'ai migré aussi l'ancien code de validation des mots de passe, manque encore les nouvelles traductions. Ça va changer un poil les messages en attendant le patch d'Elias.

OK pour moi.

#5

Mis à jour par Frédéric Péters il y a presque 6 ans

Dans le ticket #24439 je notais que pour suivre les maquettes GLC il y avait des adaptations aux textes, la phrase d'introduction étant plus douce, "In order to create a secure password, please use at least:", l'affichage des critères perdant alors les "at least" redondants. Mais cela ne marche pas sur une vérification regex où n'importe quel libellé peut être posé. Tant pis alors mais au moins modifier la phrase d'intro.

    @property
    def at_least_one_lowercase(self):
        return app_settings.A2_PASSWORD_POLICY_MIN_CLASSES > 0

    @property
    def at_least_one_digit(self):
        return app_settings.A2_PASSWORD_POLICY_MIN_CLASSES > 1

    @property
    def at_least_one_uppercase(self):
        return app_settings.A2_PASSWORD_POLICY_MIN_CLASSES > 2

Ce recyclage du paramètre de configuration me surprend; je m'attendais plutôt à A2_PASSWORD_VALIDATION_RULES comme dans la description, ou de nouveaux A2_PASSWORD_POLICY_MIN_{LOWERCASE,UPPERCASE,DIGIT,SYMBOL}.

#6

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

Oui j'aimerai bien aller vers ça mais je préférerai d'abord pousser ce patch simple, il permet facilement de passer à mieux ensuite.

#7

Mis à jour par Anonyme il y a presque 6 ans

Benjamin Dauvergne a écrit :

Oui j'aimerai bien aller vers ça mais je préférerai d'abord pousser ce patch simple, il permet facilement de passer à mieux ensuite.

D'autant plus que je reprends ces mêmes textes dans le ticket #24439

#8

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

  • Utilisation du message suggéré par Fred "In order to create a secure
    password, please use at least:" traduit par "Pour la sécurité du mot de passe
    veuillez avoir a minima : %s"
  • Retrait de "at least" en début de chaque critère
  • Simplification et partage du code entre validate_password() et password_help_text()
#9

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

  • Statut changé de Solution proposée à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#10

Mis à jour par Frédéric Péters il y a presque 6 ans

Ces nouveaux patchs ont par erreur été poussés :/

#11

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

Non pas par erreur.

#12

Mis à jour par Anonyme il y a presque 6 ans

Benjamin Dauvergne a écrit :

Non pas par erreur.

C'était Ack pour moi

#13

Mis à jour par Frédéric Péters il y a presque 6 ans

C'était Ack pour moi.

Faut l'écrire dans le ticket alors, en le passant en "solution acceptée".

#14

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF