我使用django身份验证后端django-auth-ldap对LDAP服务进行身份验证。当试图设置包含ssl证书的目录的路径时;
ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, '/etc/ssl/certs')我得到了一个ValueError异常:
File "/Users/liz/web_application/work/ldap_settings.py", line 5, in <module>
ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, '/etc/ssl/certs')
File "/Users/liz/.envs/dev/lib/python3.6/site-packages/ldap/functions.py", line 139, in set_option
return _ldap_function_call(None,_ldap.set_option,option,invalue)
File "/Users/liz/.envs/dev/lib/python3.6/site-packages/ldap/functions.py", line 66, in _ldap_function_call
result = func(*args,**kwargs)
ValueError: option error我尝试了这个前一次如此张贴的公认答案,它建议卸载python(虽然我使用的是python的一个分支),并通过运行一个brew安装openldap重新安装:
LDFLAGS="-L/usr/local/brew/opt/openldap/lib" CPPFLAGS="-I/usr/local/brew/opt/openldap/include" pip install python-ldap这似乎没有任何效果。我还遵循了本指南,在本地构建了一个带有openldap更新版本(通过brew)的pyldap版本,但我仍然看到了同样的错误。我不确定是否有什么方法可以验证我的本地构建是否使用了较新的openldap库,还是这里缺少了什么?任何建议都是非常感谢的!
关于SO的其他现有问题
对这个问题的回答对我没有影响;设置AUTH_LDAP_GLOBAL_OPTIONS而不是set_option会导致相同的ValueError
AUTH_LDAP_GLOBAL_OPTIONS = {ldap.OPT_X_TLS_CACERTDIR: '/etc/ssl/certs'}发布于 2017-06-27 14:06:00
好的,我有一些关于LDAP的工作。所以如果这对你有帮助的话,我会为你提供我的代码。首先,我将cert放入django procject。
BASE_DIR = Djando base dir
def returnPaths():
return {'dn_full_path': 'CN=Person,CN=Schema,CN=your_con,DC=your_dc,DC=your_dc',
'cert': 'path_to_cert_file',
'host': 'ldaps://x.x.x.:636'
}
class LdapBackend(object):
@classmethod
def authenticate(cls, username=None, password=None):
try:
setup = returnPaths()
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, BASE_DIR + setup['cert'])
domain = 'your_doman'
l = ldap.initialize(setup['host'])
l.set_option(ldap.OPT_REFERRALS, 0)
l.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND)
l.set_option(ldap.OPT_X_TLS_DEMAND, True)
try:
l.simple_bind_s('%s@%s' % (str(username.encode('utf-8')), domain),
password.encode('utf-8'))
return True
except ldap.INVALID_CREDENTIALS as e:
return False
except Exception as e:
return False
except ldap.INVALID_CREDENTIALS as e:
return Falsehttps://stackoverflow.com/questions/44755646
复制相似问题