我正在使用django-auth-ldap (v1.1.4) 来允许 LDAP 目录中的用户登录到我的 Django Web 应用程序。这很好用,但是,我也希望我的用户能够通过他们的 Django 凭据访问一些静态资源,包括 LDAP 登录。
我正在遵循Django 文档的这个页面中记录的模式,使用 WSGI 身份验证脚本来允许用户进入。
我遇到的问题是我的 WSGI 脚本似乎调用了所选身份验证提供程序的 check_password 方法。这对于纯 Django 用户来说很好用,但 LDAP 用户不走运,因为他们的密码在 Django 数据库中是空白的。
这会导致静态资源出现 401 Unauthorized 错误,即使使用有效的 LDAP 凭据也是如此。在日志中,Apache 报告密码不匹配,因为(有效)输入的密码与空字符串不匹配。
同时,在 Django 的主要身份验证数据库中的用户可以毫无问题地访问资源。
这是我针对静态资源的 Apache 指令的净化版本:
<Location "/secure/">
AuthType Basic
AuthName "Authentication Required"
Require valid-user
AuthBasicProvider wsgi
WSGIAuthUserScript /path/myapp/wsgi.py
</Location>
这是“/path/myapp/wsgi.py”中的内容:
import os
import os, sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.contrib.auth.handlers.modwsgi import check_password
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
我意识到一个可能的解决方法是让 Apache 直接绑定到 LDAP,但这会阻止我的非 LDAP Django 用户访问静态资源。
我正在使用 Django 1.5.1 和 Apache 2(点东西)。
提前感谢您的任何帮助。