
一、前言 Django项目开发过程中,为了保证安全性,通常都会接入用户账号认证权限功能,而标题中LDAP是什么呢?当然这个不是本文介绍的重点,简单来说,LDAP是一种目录管理协议,通常公司用于存储员工的计算机登录账号密码信息用的,而如果Django项目接入LDAP后,相当于登录Django站点时,可以不用再额外为使用该站点的用户去重新注册添加用户,使用者可以直接用各自的计算机登录账号、密码登录即可。 如果想接入LDAP,前提是你们公司有LDAP服务器,当然我相信一般公司都会有,好了,闲话不说了,直接进入主题。 二、环境准备 1、安装python-ldap、django-auth-ldap 模块版本及下载地址,博主亲测有效! python-ldap 2.4.12 https://pypi./pypi/python-ldap/2.4.12 django-auth-ldap 1.1.4 https://pypi./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数据库的默认登录验证。
|