Skip to main content
 首页 » 编程设计

python之django 中的 LDAP 身份验证错误

2025年05月04日30lonelyxmas

我正在开发一个 Django 应用程序,必须合并 LDAP 身份验证机制。目前我的文件看起来像:

---设置.py

import ldap   
from django_auth_ldap.config import LDAPSearch     
 
AUTHENTICATION_BACKENDS = ( 
        'django_auth_ldap.backend.LDAPBackend', 
        'django.contrib.auth.backends.ModelBackend', 
) 
 
AUTH_LDAP_SERVER_URI = 'ip_address' 
AUTH_LDAP_BIND_DN = 'cn=admin,dc=******,dc=com' 
AUTH_LDAP_BIND_PASSWORD = '*****' 
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Users,dc=*****,dc=com",ldap.SCOPE_SUBTREE,"(uid = (%Users))" ) 
 
AUTH_LDAP_ALWAYS_UPDATE_USER = True 
 
AUTH_LDAP_USER_ATTR_MAP = { 
       "first_name": "givenName", 
       "last_name": "sh", 
       "email": "mail"  
} 
 
import logging 
logger = logging.getLogger('django_auth_ldap') 
logger.addHandler(logging.StreamHandler()) 
logger.setLevel(logging.DEBUG) 

----urls.py

urlpatterns = [     
    url(r'^info/$','django.contrib.auth.views.login',{'template_name': 'auth.html'}), 
    url(r'^info/login/$',login),] 

----auth.html

<html> 
    <head>       
        <title>Login</title> 
    </head> 
    <body> 
        <form action="login/" method="post">{%csrf_token%} 
            Email address: <input type="text" name="email"/> 
            Password: <input type="password" name="password" /> 
            <input type="submit" value="Log in" /> 
        </form> 
    </body> 
</html> 

---- View .py

def login(request):   
     user = authenticate( username= request.REQUEST.get('email'), password= request.REQUEST.get('password')) #email and password supplied through auth.html   
     if user is not None:   
            return getInfo(request) 
     else: 
                return render(request,'invalidUser.html') 

目前我出于测试目的在本地主机上使用它,但是 AUTH_LDAP_SERVER_URI 中的 LDAP ip_address 对公司是公开的(我从管理员那里得到了这个)。当我尝试登录时,使用相同设置抛出的错误是:
1. 验证 anshul 时捕获 LDAPError: LDAPError(0, 'Error')
或者
2. 验证anshul时捕获LDAPError: LDAPError(2, 'No such file or directory')

我的问题是:
1. 为什么第一个错误的错误和含义?是因为 LDAP 没有我的访问权限吗?
2.

的目的是什么
    import logging 
    logger = logging.getLogger('django_auth_ldap') 
    logger.addHandler(logging.StreamHandler()) 
    logger.setLevel(logging.DEBUG) 

在 settings.py 中?

这是我第一次使用 Django。是因为配置不当还是我无法通过本地主机访问 AUTH_LDAP_SERVER_URI 并使用当前设置直接部署到实际服务器上?

请您参考如下方法:

AUTH_LDAP_SERVER_URI是一个 URI,而不是一个裸 IP 地址。例如,ldap://localhost/。如果您不确定某个值,请打开 Python shell 并对其进行测试:

> import ldap 
> conn = ldap.initialize('ldap://<host-or-ip>/') 

此外,AUTH_LDAP_USER_SEARCH应该包含 %(user)s,而不是 %(Users)。

日志记录配置只是将 django_auth_ldap 调试输出连接到您的控制台,以便您可以看到它。 Python/Django 中的默认日志记录设置只会吃掉输出。现在,您还可以在 Django 的 LOGGING 中进行设置设置。