Quiero limitar el acceso a ciertos directorios atendidos por Apache. Quiero que el cliente tenga que escribir un nombre de usuario y una contraseña, pero luego quiero que Apache tome el nombre de usuario y la contraseña que la persona escribió y los pase como argumentos a un script de Python que escribí para realizar la autenticación. Luego, según el resultado de dicho script, quiero que Apache permita o niegue el acceso. es posible?
Respuesta1
La única forma que conozco de hacer esto es usandomod_auth_external
o mod_python
. El primero le permite implementar sistemas de autenticación personalizados; este último le da a Apache un intérprete Python incorporado, que puede usarse paraescribir un script de autenticación personalizado. Tampoco lo son los módulos estándar o muy populares.
Sin embargo...
lo más fácil sería simplemente hacer que su sistema de autenticación actualice la lista de contraseñas que utiliza Apache. Apache viene con todas las herramientas que necesita para agregar/actualizar/eliminar usuarios desde un archivo .htpasswd o .htdigest (debería ser trivial conectar los comandos htpasswd
o htdigest
a cualquier sistema de administración de usuarios).
O, puede hacer que mod_auth
(el sistema de autenticación predeterminado de Apache) lea desde una base de datos a través de los siguientes módulos:
mod_auth_dbm
- un módulo estándar que le permite utilizar elfamilia dbm de bases de datos pre-relacionalesmod_auth_mysql
- un módulo de terceros que le permite utilizar bases de datos MySQL- También puede utilizar PostgreSQL y otras bases de datos SQL utilizando
mod_dbd
ymod_authn_dbd
.
Personalmente, seguiría este camino, ya que es más elegante que duplicar los hashes de contraseñas de usuario (con suerte, no estás almacenando las contraseñas) en un archivo de texto separado, y crear un nuevo sistema de autenticación parece reinventar la rueda.
Respuesta2
Puede utilizar .htaccess para limitar el acceso a determinados directorios.
http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/
Debe crear un archivo htpasswd al que haga referencia desde el archivo .htaccess
http://www.htaccesstools.com/htpasswd-generator/
Python: parece haber una biblioteca que puede manejar archivos htpasswd:
http://pacopablo.com/wiki/pacopablo/blog/htpasswd-with-python
Más sobre Python y htpasswd:
http://packages.python.org/passlib/lib/passlib.apache.html
No estoy familiarizado con Python y no puedo ofrecerle una solución completa. Sin embargo, creo que es posible, y probablemente no demasiado complicado, si estás familiarizado con Python y buscas un poco en Google.