IMAPs como alternativa a la autenticación LDAP
Para conseguir centralizar la gestión de usuarios con LDAP es imprescindible que todos los servicios implicados nos dejen autenticar contra un servidor LDAP. Parece evidente :).
En nuestro caso tuvimos bastante suerte y fue relativamente fácil de conseguir en todos los casos, menos uno.
El modelo de desarrollo Open Source
de OrangeHRM es cuanto menos curioso (aunque yo diría muy ineficiente, porque se cargan el release early, release often).
Rompen completamente la posibilidad de tener una comunidad de desarrolladores, porque la actualización de una versión a la siguiente no está soportada: necesitamos una subscripción de pago.
Así que, bajo la condición de reinstalar y no poder migrar datos fácilmente, veo complicado que se contribuyan parches para ser integrados en la rama principal de desarrollo, porque mucha gente no actualizará.
La verdad es que esta política de subscripciones me ha decepcionado bastante, así que cuando vi que la única opción de soporte LDAP
es mediante un add-on, que luego no sabemos si podremos modificar legalmente en caso de que no se ajuste a nuestras necesidades.
Para una empresa los $99
es una cantidad despreciable, pero pensé: voy a mirar el código, y como esté claro... lo implemento en llegar a casa. Pues ha sido muy fácil :D.
Lo único que me daba pereza era el API de LDAP que tiene PHP, que no lo conozco y atendiendo a los ejemplos, me iba a llevar más tiempo del que le quería dedicar al invento.
Así que me vino a la cabeza otra posibilidad: las funciones para acceder a IMAP desde PHP. Es un API sencillo, el servicio está disponible en nuestro Zimbra (que ya va con LDAP
), soporta SSL
, y solo necesitamos hacer login ;).
Supongamos un esquema sencillo:
/* intentamos hacer login */ $mbox = @imap_open("{imap.mydomain.dom:993/imap/ssl/novalidate-cert}Drafts", "usuario@mydomain.dom", "secretpassword", OP_HALFOPEN); /* evaluamos el resultado */ if($mbox) { echo "La autenticación se ha realizado con éxito :)\n"; imap_close($mbox); } else echo "Ha fallado la autenticación :(\n";
Es bastante sencillo el ejemplo, aunque hay algunas particularidades:
- /imap/ssl/novalidate-cert: indicamos que queremos trabajar con el protocolo
IMAPs
(imap
conssl
). Si usamos un certificado firmado por nosotros mismos, deberemos indicar elnovalidate-cert
(lo digo porque es un poco oscura la opción y se trata de un caso bastante frecuente). - Indicamos la carpeta Drafts: aunque gracias a
OP_HALFOPEN
dará igual porque no vamos a abrir el buzón, solo queremos hacer login. Esto es porque realmente es lo que necesitamos y para asegurarnos de que no hay problemas de rendimiento (si el buzón tiene muchos mensajes, imagino que puede ser lento). - Usamos la
@
delante de la función: porque, aunque se abra la sesión con éxito,imap_open
es demasiado detallista en lo que respecta a warnings. A fin de cuenta solo queremos saber si todo funciona o no, para más detalles está imap_errors (PHP5+
).
Después de ojear un rato el login.php
de nuestro OrangeHRM 2.2.2.2
, fue realmente fácil pasar a usar IMAPs
para la autenticación.
No obstante hay que tener un par de detalles en cuenta: que la autenticación se realiza con IMAPs
, pero hay que seguir obteniendo el usuario de OrangeHRM
(en mi caso dejo el usuario tal cual, y concateno el dominio para hacer login en Zimbra
), y que para validar el hack hay que tener claro qué ocurre en las distintas posibilidades:
Login IMAPs | Usuario en OrangeHRM | Resultado |
OK | OK | OK |
OK | Deshabilitado | FAIL |
FAIL | OK | FAIL |
OK | No existe | FAIL |
FAIL | No existe | FAIL |
Con OrangeHRM
ha sido bastante fácil, y el hack ha quedado muy limpio (la única cosa rara es deshabilitar temporalmente el gestor de errores que instala OrangeHRM
, por si el login falla, porque parece que ignora la @
). Por si a alguien le interesa, aquí hay un diff
contra el login.php
de la versión 2.2.2.2
: login_imap_orangeHRM-2.2.2.2.diff.
En resumen: es fácil autenticar contra IMAPs
, y puede ser un complemento sencillo si solo queremos eso de un servicio tan complejo de utilizar como es LDAP
.
Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.