我想让用户使用 Apache 访问 WebDav,但我想先对他们进行身份验证并让每个用户访问特定文件夹。所有身份验证都必须针对基于 Django 的数据库进行。我可以让 Django 身份验证自己工作,但我需要帮助我对每个用户进行身份验证并为他们提供专用的 webdav 用户特定区域。
有什么提示吗?
首先,对于其他读者,我的身份验证是使用WSGI 身份验证脚本针对 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,并且用户名必须作为目录名有效,无需任何修改。此外,这些命令不会自动创建用户目录,因此必须以其他方式确保它们的存在。
您可能会发现 apache mod_authn_dbd模块可以满足您的需求。该模块让 apache 检查 SQL 数据库的身份验证和授权。<Location>
您可以在要保护的, <Directory>
(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 支持非常强大。
我知道这个问题很老,但只是作为补充......如果您使用的是 mod_python,您可能还对Django 文档的“从 Apache 对 Django 的用户数据库进行身份验证”部分感兴趣。