En ocasiones necesitamos permitir el acceso a nuestro sitio web a determinados usuarios. Por ejemplo, cuando mostramos el sitio web a nuestro jefe podemos darle un nombre de usuario y una contraseña para que inicie sesión en nuestro sitio.
Para permitir el acceso a nuestro sitio web mediante un usuario y su contraseña podemos modificar el sitio virtual de la siguiente manera:
...
<Directory /home/username/helloworld/public/>
DirectoryIndex index.php
AllowOverride All
AuthType Basic
AuthName "Authentication Required"
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
</Directory>
...
La línea 5 define el método de autenticación, Basic
. El método más común es
Basic
. Es importante ser cuidadosos porque este método de autenticación envía
la contraseña desde el cliente al servidor sin codificar. Por esta razón este
método no se usa para datos altamente sensibles. Apache soporta otro método
de autenticación: AuthType Digest
. Este método es mucho más seguro. Los
navegadores más recientes soportan este último tipo de autenticación.
La línea 6 define el texto que se mostrará al usuario cuanto intente iniciar sesión.
La línea 7 define el archivo donde se guardan las contraseñas. Este archivo
se debe crear con la herramienta htpasswd
.
La línea 8 permite iniciar sesión a cualquiera que este en el archivo de contraseñas y que ingrese correctamente su contraseña.
Para crear el archivo passwords
escribimos el siguiente comando:
htpasswd -c /usr/local/apache/passwd/passwords <username>
En el comando de arriba debemos reemplazar el comodín <username>
con el
nombre del usuario. Podemos elegir un nombre arbitrario, por ejemplo, «admin».
El comando pedirá la contraseña del usuario y la guardará en el archivo:
# htpasswd -c /usr/local/apache/passwd/passwords <username>
New password:
Re-type new password:
Adding password for user <username>
Cuando el usuario intente visitar el sitio web verá un dialogo de autenticación HTTP. Para iniciar sesión en el sitio, el visitante debe ingresar el nombre de usuario y la contraseña correcta.
Para información adicional sobre la autenticación HTTP podemos revisar el tema Authentication and Authorization en la documentación de Apache.