django_auth_ldap引发OPERATIONS_ERROR

时间:2012-02-13 14:03:53

标签: django ldap django-authentication python-ldap

我正在尝试针对我们的LDAP构建用户身份验证:

settings.py:

AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
    )

AUTH_LDAP_SERVER_URI = "ldap://********-dc01.*******.ru"

import ldap
from django_auth_ldap.config import LDAPSearch

AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch("cn=users,dc=*********,dc=ru",ldap.SCOPE_SUBTREE,"(uid=%(user)s)")

AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

import logging

logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)

views.py:

@login_required
def project_list(request):
...

urls.py:

(r'^accounts/login/$', 'django.contrib.auth.views.login',{'template_name':'login.html'}),

,模板为from this example

我需要使用auth表单并获得以下调试输出:

search_s('cn=users,dc=********,dc=ru', 2, '(uid=bolotnov)') raised OPERATIONS_ERROR({'info': '000004DC: LdapErr: DSID-0C0906DC, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db0', 'desc': 'Operations error'},)
search_s('cn=users,dc=**********,dc=ru', 2, '(uid=bolotnov)') raised OPERATIONS_ERROR({'info': '000004DC: LdapErr: DSID-0C0906DC, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db0', 'desc': 'Operations error'},)
Authentication failed for bolotnov
Authentication failed for bolotnov

我尝试使用谷歌搜索,但没有找到任何可以帮助我进一步发展的东西,也许是社区的暗示 - 也许有一些简单的我遗漏或要检查?我似乎可以通过Softerra LDAP浏览器匿名绑定到我们的ldap,也许ldap_auth_user_search应该有所不同?

4 个答案:

答案 0 :(得分:3)

虽然ldap_simple_bind_s()会返回一个成功的绑定,但它是关于我必须禁用的引用选项才能使其工作:

ldap.set_option(ldap.OPT_REFERRALS, 0)

答案 1 :(得分:1)

您需要绑定到服务器,即使它是匿名绑定。

因此您必须具有

的实际值
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""

答案 2 :(得分:1)

我不知道我是否可以在这篇文章中提出另一个问题。 在views.py中我有这样的东西:

  

def登录(请求):

c = {}
c.update(csrf(request))
return render_to_response('login.html', c)
     

def auth_view(请求):

     

username = request.POST.get('username','')      password = request.POST.get('password','')      user = auth.authenticate(username = username,password = password)

     

如果用户不是None:          auth.login(请求,用户)          返回HttpResponseRedirect('/ loggedin')      其他:          返回HttpResponseRedirect('/ invalid')

我的问题是如何将其与ldap服务器绑定? 在django文档中有一个用于记录的模板:

  

导入日志记录

     

logger = logging.getLogger('django_auth_ldap')   logger.addHandler(logging.StreamHandler())   logger.setLevel(logging.DEBUG)

但我不知道如何在rhis代码中实现它

答案 3 :(得分:0)

是的,我已经在settings.py中找到了它:

  

AUTH_LDAP_SERVER_URI =“ldap:// myldapadress”

     

AUTH_LDAP_BIND_DN =“”   AUTH_LDAP_BIND_PASSWORD =“”   AUTH_LDAP_USER_SEARCH = LDAPSearch(“我的搜索配置”,       ldap.SCOPE_SUBTREE,“uid = uid”)

     

AUTHENTICATION_BACKENDS =(      'django_auth_ldap.backend.LDAPBackend',      'django.contrib.auth.backends.ModelBackend',   )

     

logger = logging.getLogger('django_auth_ldap')

     

logger.addHandler(logging.StreamHandler())   logger.setLevel(logging.DEBUG)

但我的问题是我应该在哪里以及如何实现ldap loggins,所以views.py中的这个funcktion会使用它。 对不起任何英语错误和太普通的问题