【问题标题】:Control access to WebDav/Apache using Python使用 Python 控制对 WebDav/Apache 的访问
【发布时间】:2010-10-16 13:47:36
【问题描述】:

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

有什么提示吗?

【问题讨论】:

    标签: python django apache webdav


    【解决方案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,并且用户名必须作为目录名有效,无需任何修改。此外,这些命令不会自动创建用户目录,因此必须通过其他方式确保它们的存在。

    【讨论】:

      【解决方案2】:

      您可能会发现 apache mod_authn_dbd 模块可以满足您的需求。该模块让 apache 检查 SQL 数据库的身份验证和授权。您可以在您要保护的&lt;Location&gt;&lt;Directory&gt; (etc) 区域中使用此指令:

      <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 支持非常强大。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-27
          • 2011-09-11
          • 2016-12-05
          • 2015-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多