一、前言
Django项目开发过程中,为了保证安全性,通常都会接入用户帐号认证权限功能,而标题中LDAP是什么呢?当然这个不是本文介绍的重点,简单来说,LDAP是一种目录管理协议,通常公司用于存储员工的计算机登录帐号密码信息用的,而如果Django项目接入LDAP后,相当于登录Django站点时,可以不用再额外为使用该站点的用户去重新注册添加用户,使用者可以直接用各自的计算机登录帐号、密码登录即可。
如果想接入LDAP,前提是你们公司有LDAP服务器,当然我相信一般公司都会有,好了,闲话不说了,直接进入主题。
二、环境准备
1、安装python-ldap、django-auth-ldap
模块版本及下载地址,博主亲测有效!
python-ldap 2.4.12 https://pypi.python.org/pypi/python-ldap/2.4.12
django-auth-ldap 1.1.4 https://pypi.python.org/pypi/django-auth-ldap/1.1.4
或直接在线安装
pip install python-ldap -i https://pypi.douban.com/simple
pip install install django-auth-ldap -i http://pypi.douban.com/simple
三、 配置
1、setting.py配置
安装完成后,打开django项目中settings.py文件,增加ldap配置如下:
##ldap认证接入 AUTH_LDAP_SERVER_URI = 'ldap://ip:port' #ldap服务地址、端口 # AUTH_LDAP_BIND_DN = 'uid=username,ou=xx1,dc=xx2,dc=com' # AUTH_LDAP_BIND_PASSWORD = " AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=xx1,dc=xx2,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)") AUTH_LDAP_ALWAYS_UPDATE_USER = True AUTH_LDAP_USER_ATTR_MAP = { "first_name": "givenName", "last_name": "sn", "email": "mail" } AUTH_USER_MODEL = 'UserManage.Account' AUTHENTICATION_BACKENDS = ( 'django_auth_ldap.backend.LDAPBackend', # ldap认证 'UserManage.auth.UsernamePasswordAuth', ## 本地自定义model的认证方式 )
注意事项:
1、实际接入ldap中,最关键的几个参数,ldap服务器地址、端口号、ou、dc等几个值,可从公司运维部获取得知。
2、实际接入ldap中,AUTH_LDAP_BIND_DN、 AUTH_LDAP_BIND_PASSWORD 可不用配置。
3、上述配置中,博主将ou、dc替换成xx1、xx2,实际使用更改成对应值即中。
四、简要流程
登录时,在默认的django数据库帐号验证之前,会先到LDAP服务器上去验证。 输入的登录帐号到LDAP服务器验证之前,会先用配置文件中的绑定DN、密码去验证,验证通过才能继续用输入的帐号密码去LDAP服务器验证。 若LDAP验证通过,会检查django数据库中是否已存在该帐号,若不存在,则会根据LDAP验证通过后获取的用户信息,来创建django数据库的用户账号。帐号名和输入的一样,密码则会设为一个无效的密码(看了下源码是”!”,无法合法哈希编码),因为该帐号密码验证是从LDAP上进行,所以django中的密码不会被使用到。除了默认的用户姓名、邮件等信息,若要把Group信息也同步过来的话需要进行相应的配置。 若LDAP验证失败,则会使用Django数据库的默认登录验证。