Normalmente cuando desarrollas una aplicación web lo haces pensando en colocarla en Internet, abierta a todo el mundo. En estos casos lo que haces es habilitar la autenticación de usuarios bien a través de unas credenciales que introducen en tu aplicación y que validas contra la base de datos, o bien a través de algún servicio de autenticación de terceros (como autenticarse con Facebook, Twitter, Google o GitHub).

Lo que ocurre es que algunas aplicaciones web están pensadas para trabajar en la red interna de una empresa o , aunque sea a través de Internet, utilizando la infraestructura de Directorio Activo para autenticar a los usuarios.

Para estos casos es necesario activar la denominada "Autenticación Windows" en tu servidor Internet Information Server.

Ésta permite validar usuarios del dominio (o de la máquina local) contra la infraestructura de la empresa, de modo que se identifican por el mero hecho de estar autenticados en la máquina local, usando su usuario y clave habituales. La autenticación del usuario además es totalmente transparente, es decir, ni siquiera tienen que introducir sus credenciales.

Enseguida vamos a ver cómo funciona esto, pero antes debes conocer sus limitaciones:

  • Solo funcionará si el ordenador cliente (en el que está el navegador) y el servidor están dentro del mismo dominio.
  • No sirve para acceder con ordenadores que utilicen algún tipo de proxy o que estén detrás de un firewall ya que ambas máquinas (cliente y servidor) necesitan una conexión directa (en el caso de Kerberos) o no soportan proxies HTTP (en el caso de NTLM). Esto hace difícil que funcione a través de Internet. Una solución sería utilizar los servicios de Directorio Activo de Azure, pero implica que la autenticación la haga la aplicación web, no IIS).
  • El navegador que lo soporta mejor es Internet Explorer, aunque también funciona con Chrome/Opera y Safari, y se puede hacer funcionar con Firefox con configuración adicional.

De esto se deduce que el ambiente ideal para esta característica son las Intranets de empresa.

¿Cómo funciona la "autenticación Windows"?

En realidad esta autenticación se basa en dos mecanismos de autenticación diferentes según las posibilidades del cliente que se intenta conectar:

- Kerberos: es un sistema seguro y moderno en el que se basa la autenticación de Directorio Activo. El esquema de funcionamiento es el siguiente (diagrama obtenido de aquí):

Kerberos

El proceso de la figura es bastante ilustrativo y se puede leer con detalle en la referencia anterior pero, en resumen, se basa en el uso de tickets de autenticación y en la comunicación directa con el centro de distribución de claves (KDC) del Directorio Activo. Es muy seguro y es el método recomendado.

- Windows Desafío/Respuesta (o NTLM): Es un protocolo antiguo, heredado de los tiempos de Windows NT. Si el método anterior no se puede utilizar porque el cliente (navegador o Sistema Operativo) no dispone de esa posibilidad, entonces se recurre a este. Su esquema de funcionamiento es el siguiente:

NTLM

En este caso la autenticación contra el Directorio Activo la realiza Internet Information Server, y el proceso de solicitud de claves con el cliente se realiza mediante un mecanismo de desafío/respuesta entre IIS y el navegador. Ninguna clave circula por la red, por lo que es  seguro, pero no es tan potente como el anterior.

Para más detalles sobre los mecanismos consulta el enlace anterior.

¿Cómo instalar y configurar la autenticación Windows en IIS?

Por defecto no viene instalada, por lo que tendremos que añadirla. Para ello abre la administración del servidor de Windows Server y en el nodo de "Roles" localiza el rol de Servidor Web. En la lista de servicios instalados comprueba si tienes o no instalada esta opción:

IIS_Roles

Si no lo está (lo mas probable), pulsa el botón de añadir servicios del rol, y búscalo en la lista de características:

IIS_Anadir_Rol_Autenticacion-Windows

Una vez añadido lo único que tienes que hacer es ir a las propiedades de tu sitio web y entrar en la zona de Autenticación de IIS (OJO, hay una igual en ASP.NET, pero no es esta todavía):

IIS-Nodo-Autenticacion

Al entrar ahí ya tendrás disponible la opción de autenticación Windows y lo único que tendrás que hacer es activarla. ¡Listo!

¿Cómo la activo en ASP.NET o en aplicaciones web en general?

Las aplicaciones ASP.NET disponen de diversos módulos en su "pipeline" de peticiones para autenticar usuarios. Uno de ellos, System.Web.Security.WindowsAuthenticationModule, es el responsable de tomar el estigo de la autenticación realizada por IIS y traspasarla a nuestra aplicación web.

Si en nuestro web.config ponemos la siguiente línea:

<authentication mode="Windows" />

Ya tendremos habilitada la autenticación Windows en nuestra aplicación. El módulo WindowsAuthenticationModule se encargará de crear un WindowsPrincipal y un WindowsIdentity para que sepamos quién es el usuario actualmente autenticado.

¿Cómo la activo en IIS Express?

Lo anterior está bien para cuando la aplicación ya está en producción y lista para ser utilizada por los usuarios. ¿Pero qué pasa durante el desarrollo?

Mientras estamos desarrollando con Visual Studio, en nuestro equipo local está tanto el cliente como el servidor, y además en este caso el servidor es IIS Express, una versión "pelada" del servidor completo de Microsoft.

Bueno, en realidad es "pelada" en cuanto a interfaces de usuario para configuración, porque el servidor es el mismo que se usa en Windows Server para que la experiencia de desarrollo sea lo más parecida posible a la definitiva.

En este caso lo único que tenemos hacer es cambiar el archivo de configuración de IIS Express y añadirle estas líneas:

<system.webServer>
    <security>
        <authentication>
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

Esto podemos añadirlo en dos sitios diferentes:

  • El web.config de nuestra aplicación, y así tendrá efecto en ésta exclusivamente.
  • En el archivo applicationhost.config (ubicado en %userprofile%\documents\IISexpress\config) y que controla la configuración de IIS Express de manera global. De este modo quedaría activado en todas las aplicaciones.

¡Espero que te sea útil!

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA