我正在为我的公司构建一个 django 项目,当我只使用没有 SSL 的简单绑定时,我有如下设置:
AUTH_LDAP_SERVER_URI = 'ldap://some.example.server:389'
AUTH_LDAP_BASE_DN = 'some-base-dn'
AUTH_LDAP_BIND_DN = 'some-bind-dn'
AUTH_LDAP_BIND_PASSWORD = 'some-password'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
AUTH_LDAP_BASE_DN, ldap.SCOPE_SUBTREE, '(sAMAccountName=%(user)s)')
它工作得很好。
但是,由于我们公司的 LDAP 服务器的安全性增强,我们被要求使用 LDAP over SSL。所以我获得了证书并像这样更改我的代码:
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_X_TLS_REQUIRE_CERT: True,
ldap.OPT_X_TLS_DEMAND: True,
ldap.OPT_REFERRALS: 0,
ldap.OPT_X_TLS_CACERTFILE: '/etc/ssl/certs/mycertfile.pem'
}
AUTH_LDAP_SERVER_URI = 'ldaps://some.example.server:636'
AUTH_LDAP_BASE_DN = 'some-base-dn'
AUTH_LDAP_BIND_DN = 'some-bind-dn'
AUTH_LDAP_BIND_PASSWORD = 'some-password'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
AUTH_LDAP_BASE_DN, ldap.SCOPE_SUBTREE, '(sAMAccountName=%(user)s)')
它不再起作用了。它一直说search_s(xxx)返回0个对象:身份验证失败:无法将用户名映射到DN。
但是,如果我将 LDAPSearch() 的过滤器字符串从
'(sAMAccountName=%(user)s)'
至
'(sAMAccountName=<hard-coded-id>)'
有用。
我一直在试图找出为什么会发生这种情况,但到目前为止还没有运气。有谁知道为什么会这样?
非常感激。