分享

Django项目如何接入公司LDAP账号认证

 测试开发技术 2022-06-18 发布于广东

一、前言

        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数据库的默认登录验证。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多