Question

Pour une application interne Tomcat / Java / Struts, nous convertissons code d'authentification écrit sur mesure pour utiliser JDBCRealm. La base de données est MySQL 5.0, et les mots de passe sont stockés sous forme de chaînes cryptées PASSWORD(). Dans notre version de MySQL, la fonction PASSWORD() est un non-standard (propriétaire?) de hachage de 41 octets. (Je sais maintenant que nous ne devrions pas l'utiliser pour nos mots de passe, mais devrait plutôt être en utilisant SHA1() ou MD5(). Mais nous sommes.)

Est-il possible d'utiliser JDBMRealm sans forcer tous nos utilisateurs à entrer de nouveau leur mot de passe afin que nous puissions les re-encoder? Y at-il un condensé JDBCRealm qui nous permettra d'authentifier contre une colonne de mot de passe codé PASSWORD()-?

Était-ce utile?

La solution

Les nouvelles versions de MySQL fournir une fonction appelée OLD_PASSWORD() qui digère le mot de passe de manière rétrocompatible avec 4.0 et antérieures.

Qu'est-ce que vous pouvez faire est donc configure JDBCRealm de telle sorte que:

  1. Ne pas utiliser toute sorte de digest par lui-même. Ceci est évidemment pas idéal, même dans un environnement sûr et est carrément dangereux si vit votre serveur de base de données sur une connexion non sécurisée. Pour ce faire, ne pas spécifier l'attribut digest.
  2. Utilise la fonction OLD_PASSWORD() ci-dessus pour chiffrer le mot de passe avant de la comparer avec celle de la base de données. Vous devrez étendre JDBCRealm, cette fonctionnalité n'est pas fournie hors de la boîte. Pour Tomcat 6.0, vous devrez remplacer la méthode de authenticate(Connection c, String username, String credentials).

Vous pouvez également utiliser l'approche ci-dessus dans le cadre de la stratégie de migration: le soutien de la méthode surchargée à la fois la OLD_PASSWORD() et digérer et les utilisateurs qui ont la force authentifiées à l'aide OLD_PASSWORD() changer leur mot de passe. Avec le temps, vous serez alors en mesure de nous espérons passer à l'approche basée sur digest standard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top