Cómo autenticar usuarios vía HTTP

Home / Cómo hacer para... / Cómo autenticar usuarios vía HTTP

La autenticación a nivel de HTTP se activa mediante la configuración del webserver.

Es el nivel más bajo de autenticación que puede tenerse en un entorno web, ya que lo que va a verificar es que el cliente que solicita un determinado recurso (URI) tenga acceso a él, antes de hacer ningún otro tipo de verificación.

De lo que estoy hablando es de lo que sucede cuando querés ingresar a un sitio, por ejemplo http://localhost y, en lugar de ver el contenido del sitio, se abre una ventana como esta:

Por lo general, no es mucho lo que puede validarse (No hay posibilidad de ofrecer diferentes niveles de acceso ni nada parecido), con lo cual, no es algo que suela utilizarse en entornos de acceso público.

La forma de configurar este tipo de acceso depende del web server que uses.

En el caso de Apache, la forma de lograrlo es:

  1. Crear un archivo de autenticaciones (Usando la utilidad htpasswd por ejemplo).
  2. Dentro de la configuración del servidor, definir un bloque para el DocumentRoot:
 <Directory "/var/www/html">
   AuthType Basic
   AuthName "Restricted Content"
   AuthUserFile /etc/apache2/.htpasswd
   Require valid-user
 </Directory>
  1. Reiniciar el servidor (O, menos drástico, recargar la configuración).

A partir de este momento, cualquier usuario que desee ingresar a tu sitio tendrá que identificarse (Ante el webserver).

Otra forma de usar este tipo de autenticación (que no depende de la configuración del webserver), es hacerlo a través de PHP:

La clave aquí es el uso de la función header (y conocer algunos detallitos del protocolo HTTP :)).

Básicamente se trata de un script que será invocado dos veces:

La primera será la que solicite las credenciales y la segunda será la que valide (Lo mismo que podrías hacer si hicieras un login clásico, con la diferencia de que la segunda llamada se produce automáticamente al completar los datos).

El código es este:

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Este texto se ve si el usuario cancela';    
} else {
    echo "<p>Hola {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>Tu password es {$_SERVER['PHP_AUTH_PW']}.</p>";
}

El if está para validar si estás en la primera llamada o en la segunda. Las claves de la variable de $_SERVER se completan automáticamente con lo ingresado por el usuario.

Esta forma puede ser más conveniente ya que te permite independizarte del WebServer con el que estás trabajando (Y por lo tanto, cambiarlo será más sencillo).

Por último, una forma de acceder al sitio sin pasar por el formulario es pasar las credenciales como parte de URL:

http://user:password@localhost

¿Qué forma de autenticación usas en tus aplicaciones?

mchojrin

CEO at Leeway
Mauro es Lic. en Ciencias de la Computación.
Su carrera como docente de programación se inició en el año 1997 en la Escuela Técnica ORT.
Actualmente coordina el desarrollo de proyectos web en Leeway y los cursos dictados en la Leeway Academy

One Comment

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *