使用Python控制对WebDav / Apache的访问

时间:2009-03-31 07:58:06

标签: python django apache webdav

我想让用户使用Apache访问WebDav,但我想首先验证它们并让每个用户访问特定文件夹。必须对基于Django的数据库进行所有身份验证。我可以自己开始使用Django身份验证,但是我需要帮助我对每个用户进行身份验证,并为他们提供专用的webdav用户特定区域。

任何提示?

3 个答案:

答案 0 :(得分:1)

首先,对于其他读者,我使用WSGI authentication script对Django进行了身份验证。

然后,问题的关键在于,给每个Django用户,在这种情况下,他们自己的WebDav目录与其他用户分开。假设在Apache虚拟站点配置中设置了以下WebDAV(通常在 / etc / apache2 / sites-enabled / 中)

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

请注意,WebDav尚未设置公共地址。这个和用户区域的东西在同一个配置文件中用两行固定(把这些放在结束子句之后):

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

现在,在http://my-server.com/webdav-url/上访问webdav用户获得登录提示,然后登陆到webdav根目录的子目录,其名称与用户名相同。 LA-U:使Apache“向前看”并让用户在确定安装路径之前登录,这是至关重要的,因为该路径取决于用户名。没有一些重写规则就没有URL,用户也不会得到登录提示。换句话说,LA-U避免了这种登录处理的catch-22。

注意事项:要求启用mod_rewrite,并且用户名必须作为dir名称有效而不做任何修改。此外,这些命令不会自动创建用户dirs,因此必须以其他方式确保它们的存在。

答案 1 :(得分:0)

您可能会发现apache mod_authn_dbd模块可以为您提供所需内容。该模块允许apache检查SQL数据库以进行身份​​验证和授权。您可以在要保护的<Location><Directory>(等)区域中使用此指令:

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

严格来说,这意味着您要对Django的数据库进行身份验证,而不是针对Django应用程序本身。请注意,您可以完全控制查询,因此您可以将其与任何表中的其他参数结合使用,以确保用户信誉良好,或者在某些组中,或等等,然后才允许进行身份验证。

您可能需要稍微大概一点,以确保在apache和django中使用的散列机制相同。

如果这不合适,请考虑将您的身份验证从django数据库移到LDAP服务器中。使用自定义身份验证后端(django现有LDAP实现),django将很乐意使用LDAP ...而Apache中的LDAP auth / auth支持非常强大。

答案 2 :(得分:0)

我知道这个问题已经过时了,但是作为一个补充...如果您使用mod_python,您可能也对Django文档的“Authenticating against Django’s user database from Apache”部分感兴趣。