我想让用户使用Apache访问WebDav,但我想首先验证它们并让每个用户访问特定文件夹。必须对基于Django的数据库进行所有身份验证。我可以自己开始使用Django身份验证,但是我需要帮助我对每个用户进行身份验证,并为他们提供专用的webdav用户特定区域。
任何提示?
答案 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”部分感兴趣。