Pregunta

Quiero dar a los usuarios acceso a WebDav usando Apache, pero quiero autenticate ellos primero y dar a cada usuario acceso a una carpeta específica. Toda la autenticación se debe hacer frente a una base de datos basada en Django. Puedo obtener la autenticación de Django-yo trabajo, pero necesito ayuda con la parte donde autentico cada usuario y proporcionarles un área específica del usuario WebDAV dedicado.

¿Alguna pista?

¿Fue útil?

Solución

Usted puede encontrar que el Apache mod_authn_dbd módulo que da lo usted quiere. Este módulo permite Apache comprobar una base de datos SQL para la autenticación y autorización. Se podría utilizar esta directiva en el <Location>, <Directory> (etc) área que usted está tratando de proteger a:

<Directory /usr/www/myhost/private>
    # other config ere
    # mod_authn_dbd SQL query to authenticate a user
    AuthDBDUserPWQuery \
         "SELECT password FROM authn WHERE user = %s"
 </Directory>

En sentido estricto, esto significa que está autenticando contra la base de datos de Django, no en contra de la propia aplicación de Django. Tenga en cuenta que usted tiene el control total de la consulta, por lo que se puede combinar con otros parámetros en cualquier tabla para asegurarse de que el usuario se encuentra en buen estado, o en ciertos grupos, o lo que sea, antes de permitir la autenticación.

Es posible que tenga que molestarse un poco para asegurarse de que los mecanismos de hash utilizados son los mismos tanto en Apache y Django.

Si esto no conviene, considere mover la autenticación de la base de datos de Django en, digamos, un servidor LDAP. Con un motor de autenticación personalizado (Hay implementaciones LDAP para Django por ahí existente), Django usará felizmente LDAP ... y autenticación LDAP / soporte de autenticación en Apache es bastante robusto.

Otros consejos

En primer lugar, para otros lectores, mi autentificación se realiza en contra de Django usando un guión de autenticación WSGI .

A continuación, está el meollo de la cuestión, dando a cada usuario de Django, en este caso, su propia dir WebDav separado de otros usuarios. Suponiendo que la siguiente configuración de WebDAV en la configuración de los sitios virtuales de Apache (normalmente en / etc / apache2 / sites-activado / )

<Directory /webdav/root/on/server>
        DAV On

        # No .htaccess allowed
        AllowOverride None      

        Options Indexes

        AuthType Basic
        AuthName "Login to your webdav area"
        Require valid-user
        AuthBasicProvider wsgi
        WSGIAuthUserScript  /where/is/the/authentication-script.wsgi
   </Directory>

Tenga en cuenta la forma en que no hay megafonía para WebDav creado todavía. Esto, y la cosa zona de usuario, se fija en dos líneas en el archivo de configuración misma (poner éstos después de la cláusula final):

RewriteEngine On
RewriteRule ^/webdav-url/(.*?)$ /webdav/root/on/server/%{LA-U:REMOTE_USER}/$1

Ahora, se accede a WebDAV en http://my-server.com/webdav-url/ el usuario recibe un mensaje de conexión a tierra y entonces en un subdirectorio de la raíz WebDAV, que tiene el mismo nombre que su nombre de usuario. LA-T: hace Apache "mirar hacia adelante" y dejar que la señal de usuario en antes determinar la ruta de montaje, lo que es crucial, ya que la ruta depende del nombre de usuario. Sin un poco de reescritura en reglas no habrá URL, y el usuario no va a obtener un aviso de la conexión. En otras palabras, LA-T evita una trampa-22 para este tipo de manipulación de inicio de sesión.

Precauciones : requiere mod_rewrite habilitado, y los nombres de usuario deben ser válidos como nombres dir sin ninguna modificación. Además, los directorios de los usuarios no se crearán automáticamente por estos comandos, por lo que su existencia se debe asegurar de alguna otra manera.

Sé que esta pregunta es viejo, pero sólo como una adición ... Si está utilizando mod_python, es posible que le interesen también " autenticación contra la base de datos de usuarios de Django de Apache " de la documentación de Django.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top