Cómo autenticar usuarios vía HTTP usando PHP

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

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

1 comentario

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.