2

我正在使用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(点东西)。

提前感谢您的任何帮助。

4

0 回答 0