我正在使用django-auth-ldap(v1.1.4)来允许LDAP目录中的用户登录我的Django Web应用程序。这非常有效,但是,我还希望我的用户能够通过他们的Django凭据访问一些静态资源,包括LDAP登录。
我正在遵循this page of the Django documentation中记录的模式,使用WSGI身份验证脚本来允许用户进入。
我遇到的问题是我的WSGI脚本似乎调用了所选身份验证提供程序的check_password方法。这适用于纯Django用户,但LDAP用户运气不好,因为他们的密码在Django数据库中是空白的。
即使使用有效的LDAP凭据,也会导致静态资源出现401 Unauthorized错误。在日志中,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(点什么)。
提前感谢您的任何帮助。