我正在尝试通过公司的Active Directory服务器对我的用户进行身份验证。 我无法正确配置它,我知道LDAP工作我有一个配置和工作的MediaWiki 在Active Directory服务器上进行身份验证。
系统:
Active Directory 2008
Django (1, 3, 0, 'final', 0)
django-auth-ldap 1.0.9
这是我在settings.py中的配置
from django_auth_ldap.config import LDAPSearch
import logging
# makes sure this works in Active Directory
ldap.set_option(ldap.OPT_REFERRALS, 0)
LDAP_SERVER_URI = 'ldap://ad.exemple.com'
AUTH_LDAP_BIND_DN = 'my_user'
AUTH_LDAP_BIND_PASSWORD = 'my_pass'
AUTH_LDAP_USER_SEARCH = LDAPSearch('dc=exemple,dc=com', ldap.SCOPE_SUBTREE, '(SAMAccountName=%(user)s)')
# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
# This is the default, but I like to be explicit.
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
我还通过添加新URI
尝试了ssl方式 LDAP_SERVER_URI = 'ldaps://ad.exemple.com:636'
我使用主要用户组来搜索我不需要任何我要认证的特定组。
它返回错误消息:
WARNING 2011-05-31 16:50:19,429 backend 3968 140632428340992 Caught LDAPError while authenticating my_user: INVALID_CREDENTIALS({'info': '80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 525, v1772', 'desc': 'Invalid credentials'},)
[31/May/2011 16:50:19] "POST /admin/ HTTP/1.1" 200 9648
看到此错误并查找LDAP错误DSID-0C0903AA我发现我应该尝试设置这样的用户名
my_user@exemple.com
它不起作用,它返回错误:
ERROR 2011-05-31 16:55:38,947 config 6505 139868662060800 search_s('dc=ubilium,dc=loc', 2, '(SAMAccountName=my_user)') raised OPERATIONS_ERROR({'info': '000004DC: LdapErr: DSID-0C0906DD, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1772', 'desc': 'Operations error'},)
DEBUG 2011-05-31 16:55:38,947 backend 6505 139868662060800 Authentication failed for my_user
有没有人知道如何连接它?
答案 0 :(得分:1)
您获得的第一个错误是LDAP 49,子代码为525,这意味着找不到用户。即您的绑定DN不正确。
使用userPrincipalName格式的第二次尝试将失败,因为您的配置说:
AUTH_LDAP_USER_SEARCH = LDAPSearch('dc=exemple,dc=com', ldap.SCOPE_SUBTREE, '(SAMAccountName=%(user)s)')
因此,您尝试在以下过滤器中使用传入的用户名:(SAMAccountName=%(user)s)
我想知道在每一端都是额外的s
吗?即(SAMAccountName=%(user))
会更正确吗?
它正在做的是,对于$(user)变量,找到我在AD中的对象,其sAMAccountName属性与该值匹配,然后使用作为绑定DN返回的DN。但是你没有得到正确的DN,因此LDAP 49 - 525错误。