Get Firefox

Firefox 4.0

stopsoftwarepatents.eu petition banner Manifiesto por la liberación de la cultura 
No a la traza privada
Últimos cambios
Últimos Cambios
Vote for Public Maps - Reject INSPIRE! Geocaching
Mi estado actual en Jabber/XMPP: - jabberES - jabber.org

Autentificación y autorización con mod_python

Ú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.


Historia



Firefox 4.0 Python Zope ©2003 jcea@jcea.es