Les utilisateurs sont des êtres humains normaux. Ils ont donc des problèmes de mémoire comme tout le monde. Ainsi ils leur arrivent d’oublier leur mot de passe de temps en temps Le but de cet article est de montrer comment leur redonner un accès à votre application.

Comment faire ?

Pourquoi faire quelque chose ? Après tout, c’est de la faute de l’utilisateur. S’il avait mangé un peu plus de poisson, il n’aurait peut-être pas de problème de mémoire… Il aurait également pu écrire son mot de passe sur un post-it collé à l’écran… ou utiliser 123456 sur tous ses comptes…

Comme sur la plupart des sites, on ajoute une page permettant de récupérer son mot de passe. Cet écran se résume bien souvent à un champ texte pour y saisir son pseudo ou son adresse email accompagné d’un bouton pour valider.

Petite remarque : à choisir il vaut mieux demander l’email de l’utilisateur plutôt que son pseudo. Et oui, s’il a oublié son mot de passe, il a peut-être également oublié son pseudo. S’il a oublié son email, il a peut-être d’autres problèmes…

Très bien, l’écran est réalisé, mais que faire lorsque l’utilisateur appuie sur le bouton valider (si ce n’est vérifier que l’utilisateur est bien présent dans la base de données) ?

Renvoyer le mot de passe par email

Si vous envisagez cette solution, c’est que vous ne gérez pas les mots de passe de la bonne façon. Je vous laisse lire mon précédent article sur la gestion des mots de passe.

Questions / Réponses

Vous avez surement vu des sites demandant de saisir une question et la réponse associée lors de l’inscription. Qui est assez fou pour penser que l’utilisateur se souviendra de la réponse (au caractère près) quelques mois / années plus tard.

Bref cette solution n’est pas très pratique et son résultat n’est vraiment pas garanti.

Créer un nouveau mot de passe et l’envoyer à l’utilisateur par mail

Cette solution consiste à remplacer le mot de passe actuel par un nouveau mot de passe généré aléatoirement.

1er problème : Rien ne nous garantit que ce soit l’utilisateur du compte qui effectue la demande. Il est donc possible d’empêcher quelqu’un de se connecter en réinitialisant son mot de passe régulièrement (il suffit de connaitre son adresse email). Pour résoudre ce problème on peut penser garder les 2 mots de passe valides => c’est donc 2 fois plus simple de brute forcer le compte…

2ème problème : Le mot de passe est visible en clair dans la boite mail. Pour un peu que le PC de l’utilisateur ne soit pas verrouillé (ce qui est assez fréquent) et que Outlook soit ouvert, ses collègues ou amis bien intentionnés pourront lire son mot de passe et se connecter en son nom. On peut facilement contrer cela en forçant l’utilisateur à changer son mot de passe dès la première connexion avec le nouveau mot de passe. Ainsi le mot de passe présent dans l’email ne sera plus valide après la réinitialisation (à condition d’avoir une politique de sécurité empêchant de réutiliser d’anciens mots de passe).

Créer un Token de réinitialisation de mot de passe

En combinant les idées évoquées plus-haut on peut imaginer une solution consistant à créer un token utilisable une fois sur la page de réinitialisation. Une fois le token saisi, la seule chose possible est de changé son mot de passe. Pour faire simple, on envoie par email un lien type « https ://monsite. com/Account/PasswordLost ? token=467dc4ad9acf4f63ba64916b14c786d2 » puis le site vérifie que le token est valide et affiche la page de changement de mot de passe.

Cette solution se rapproche de la précédente dans le sens où l’on va générer un Token qui sera ensuite envoyé par mail à l’utilisateur. La différence fondamentale est que ce Token ne remplace pas son ancien mot de passe, ne correspond pas à un nouveau mot de passe et est suffisamment long pour être brute forcer. Après avoir saisi ce Token dans un écran prévu à cet effet l’utilisateur se verra obligé de changer son mot de passe. Pour ajouter un peu plus de sécurité il est possible de limiter la durée de validité du Token : une dizaine de minutes sont largement suffisantes. Une fois utilisé, le Token ne doit plus être utilisable.

Avec cette méthode il n’est donc plus possible d’empêcher un autre utilisateur de se connecter, par contre il est toujours possible de le spammer 😉

Conclusion

La problématique des mots de passe oubliés n’est pas très compliquée à gérer. Cependant je pense que la question à se poser est pourquoi les utilisateurs oublient-ils leur mot de passe ? Pensez-vous qu’il soit humainement possible de se rappeler de 10 mots de passe ressemblant à “ T#k$gbéUI0 ”. Il y  actuellement des débats sur les FastWords ou les PassPhrases. Une autre pratique émergeante est le BYOI (Bring Your Own Identity) qui consiste à se connecter à une application en utilisant un compte externe (Google, Facebook, Windows Live, etc) : il n’y a donc plus à se rappeler de 36 mots de passe différents. Mais qu’en est-il de la sécurité avec ces solutions ?