Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 13 de Febrero de 2003 - Jueves
mod_python es un interesante proyecto que permite integrar scripts Python en Apache. Y no sólo como medio para acelerar la ejecución de scripts Python a modo de CGI, sino también para definir "handlers" internos de Apache.
En este artículo describiré cómo implementar un "handler" Python de autentificación y autorización para Apache 1.3.*, con la característica especial de que las claves de acceso de los usuarios sólo son válidas en un intervalo horario determinado.
Antes de pasar a la "chicha", me gustaría concretar los términos "autentificación" y "autorización":
Veamos el código fuente en sí:
# Autentificacion controlada por horarios # y con acceso directorio a directorio from mod_python import apache # Autorizacion def authzhandler(request) : return verifica_usuario(request) # Autentificacion def authenhandler(request) : return verifica_usuario(request) def verifica_usuario(request) : try : usuarios={"Usuario1":("Clave1","Comentario1"), "Usuario2":("Clave2","Comentario2"),} # Para que nos de el usuario, primero hay que pedir la clave clave=request.get_basic_auth_pw() usuario=request.connection.user if not usuarios.has_key(usuario) : return apache.HTTP_UNAUTHORIZED if usuarios[usuario][0]!=clave : return apache.HTTP_UNAUTHORIZED import time now=time.localtime() tiempo_minimo=(2002, 12, 10, 8, 0) # Hora local tiempo_maximo=(2002, 12, 17, 8, 0) # Hora local if (now<tiempo_minimo) or (now>tiempo_maximo) : return apache.HTTP_UNAUTHORIZED return apache.OK except : # Si ocurre algo raro, nos curamos en salud return apache.HTTP_UNAUTHORIZED
El script es evidente y poco hay que comentar, salvo:
En cuanto a la configuración Apache en sí, hay que añadir lo siguiente:
<Directory el que sea> Auth_MySQL off PythonAuthenHandler nombre del script de autentificación/autorización PythonAuthzHandler nombre del script de autentificación/autorización AuthType Basic AuthName Realm que queramos usar #AuthUserFile "/dev/null" #AuthGroupFile "/dev/null" #AuthAuthoritative off require user </Directory>
El único detalle a señalar aquí es deshabilitar la autentificación vía MySQL para que no se peguen entre ellas. Si no usas el módulo de autentificación MySQL, no necesitas esa línea de configuración.
De hecho, con la flexibilidad de mod_python y este modulillo, tengo pendiente eliminar el módulo de autentificación MySQL y sustituirlo por un módulo Python que haga la consulta directamente a la base de datos, sin módulos adicionales. Eso sería infinitamente más flexible.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS