Pregunta

Para una aplicación interna Tomcat / Java / Struts, nos estamos convirtiendo código de autenticación personalizado por escrito para usar jdbcRealm. La base de datos es MySQL 5.0, y las contraseñas se almacenan como cadenas PASSWORD()-encriptado. En nuestra versión de MySQL, el PASSWORD() función es un no-estándar (propietario?) 41 bytes hash. (Ahora sé que no debemos usarlo para nuestras contraseñas, pero en su lugar debería usar SHA1() o MD5(). Pero aquí estamos.)

¿Hay alguna manera de utilizar JDBMRealm sin obligar a todos nuestros usuarios que volver a introducir sus contraseñas para que podamos volver a codificarlos? ¿Hay un jdbcRealm compendio que nos va a permitir la autenticación en una columna contraseña PASSWORD() codificados?

¿Fue útil?

Solución

proporcionar una función llama OLD_PASSWORD() que digiere la contraseña de una manera compatible hacia atrás con 4.0 y anteriores.

Lo que puede hacer, por tanto, es configurar jdbcRealm de tal manera que:

  1. No se utiliza ningún tipo de digestión por sí mismo. Esto obviamente no es perfecto incluso en un entorno seguro y es francamente peligroso si su servidor de base de datos vive al otro lado de conexión no es de confianza. Para ello, no se especifica el atributo digest.
  2. Utiliza la función OLD_PASSWORD() arriba para cifrar la contraseña antes de compararlo con el de la base de datos. Usted tendrá que extender jdbcRealm, esta funcionalidad no está provisto de la caja. Para Tomcat 6.0 que tendrá que reemplazar el método authenticate(Connection c, String username, String credentials).

También puede utilizar el método anterior como parte de la estrategia de migración: tener el apoyo reemplazado método tanto el OLD_PASSWORD() y digerir y los usuarios que han autenticado mediante OLD_PASSWORD() cambiar su contraseña vigor. Con el tiempo usted entonces espera que sea capaz de cambiar a enfoque basado en el compendio estándar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top