La autenticación Basic, como ya se mencionó, tiene el problema de que la contraseña se transmite en claro desde el cliente al servidor, para evitar esto podemos usar la autenticación Digest. Pero esta a su vez, tiene el problema de que las contraseñas en la base de datos de texto del servidor se almacenan con un algoritmo no muy seguro, MD5, y no podemos elegir ningún otro, como bcrypt, por lo que tendremos que asignar correctamente los permisos para protegerla.
La creación de la base de datos de usuarios se crea con el comando htdigest, que únicamente tiene la opción -c, con la misma funcionalidad que con el comando htpasswd. La sintaxis es la siguiente:
htdigest [ -c ] fichero dominio usuario
Como se ve, hay que asignar un dominio a los usuarios al crearlos. Los dominios funcionan como si fueran grupos de usuarios, y deben coincidir con el valor de la directiva AuthName para que se puedan acceder al recurso. Si un usuario perteneciera a más de un dominio, hay que repetir el comando htdigest una vez para cada dominio y podría tener diferentes contraseñas.
# htdigest -c usuarios.dgt dominio1 u1
Adding password for u1 in realm dominio1.
New password:
Re-type new password:
# htdigest usuarios.dgt dominio2 u1
Adding user u1 in realm dominio2
New password:
Re-type new password:
# htdigest usuarios.dgt dominio1 u2
Adding user u2 in realm dominio1
New password:
Re-type new password:
# htdigest usuarios.dgt dominio3 u3
Adding user u3 in realm dominio3
New password:
Re-type new password:
# cat usuarios
u1:dominio1:a0d18beb3a5c86ab89ba20f9775a68f7
u1:dominio2:5c42d2b8c134419087c500ab378a3d10
u2:dominio1:fed5f96a64300628c3e8e669a5c7741d
u3:dominio3:08baace68d09cb0ef82ba32d938689b8
El método Digest necesita de la habilitación del módulo mod_auth_digest, y las directivas que intervienen son las siguientes:
- AuthType la dejaremos con el valor Digest.
- AuthName contendrá el dominio al que se le permitirá el acceso al recurso, el usuario debe pertenecer a dicho dominio.
- AuthUserFile especificará el fichero de los usuario, dominios y contraseñas creado con htdigest.
La directiva AuthGroupFile no se puede usar, no se permiten los grupos al estilo del método Basic, por lo que tampoco se puede utilizar Require group.
<Directory ...>
...
AuthType Digest
AuthName dominio1
AuthUserFile "/var/www/password/usuarios.dgt"
Require user u1
...
</Directory>