28 abril 2008

Apache, Windows Server y Firefox

Si hay un problema que se presenta una y otra vez al hacer páginas webs para las Intranets corporativas ese es la validación de usuarios. Mantener una base de datos diferente para cada aplicación diseñada es una tortura. Mantener una tabla de usuarios para un tipo de aplicaciones un suplicio. Sobretodo para los usuarios que, una y otra vez, tienen que recordar y cambiar más y más claves. Lo que provoca múltiples puntos de perdida de seguridad. Es fácil ver notitas con las claves de entrada a las aplicaciones que tanto trabajo nos ha costado asegurar.

Sin embargo, ¿ para que mantener una tabla con los usuarios si ya tienen que validarse cada vez que acceden al ordenador ? Si el Sistema Operativo ya tiene un servicio de gestión de usuarios ¿ para qué reinventar la rueda ?

En redes con servidores Windows podemos solucionar fácilmente el problema usando las características de autenticación a través de los módulos SSPI. Con este módulo permitimos que Apache realize la validación usando los módulos de seguridad proporcionados por Windows Server. Para ponerlo en marcha debemos añadir estas líneas al archivo de configuración de Apache:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
<ifmodule c="">
<location protected="">
AuthName "A Protected Place"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
require valid-user
</location>
</ifmodule>
Una vez realizado esto y reiniciado nuestro servidor podremos obtener el nombre del usuario usando estos métodos desde PHP:
if (isset($_SERVER['REMOTE_USER']))
{
// REMOTE_USER está formado por
// dominio\usuario
$usuario = substr (strrchr ($_SERVER['REMOTE_USER'],
'\\'), 1);
}
Con esto no podrá entrar al servidor quien no esté logueado en dicha máquina. Con esta solución desde Internet Explorer la entrada para el usuario será transparente. Sin embargo, desde Firefox verá que le pide un usuario y una contraseña. Como será difícil explicarle por qué tiene que volver a meter la misma contraseña que al principio será mejor configurarle Firefox para que entre directamente igual que hace Explorer. Para eso abrimos la configuración de Firefox con
about:config
Y buscamos esta línea para cambiar:
network.automatic-ntlm-auth.trusted-uris
Donde pondremos la dirección del servidor con el que tiene que hacer la validación. Y ¡ voilá ! Un problema menos.

5 comentarios:

  1. muy intersante moises se nota que te dedicas a ello :) jijijii

    un saludo

    ResponderEliminar
  2. pero nos ayudas, aunque yo a veces no entienda nada.

    ResponderEliminar
  3. Anónimo11:20 p. m.

    Muchas gracias por aporte, me parece fenomenal

    Pero no me funciona, aún $_SERVER['REMOTE_USER'] me aparece vacio, estoy ejecutando el script en un servidor asociado a Active Directory

    Muchas gracias

    ResponderEliminar
  4. Siento no haber visto tu comentario antes.

    Con la poca información que me das no puedo ayudarte mucho. Has mirado el log de Apache para ver si da algún error ?

    ResponderEliminar