详解Django-auth-ldap 配置方法


Posted in Python onDecember 10, 2018

使用场景

公司内部使用Django作为后端服务框架的Web服务,当需要使用公司内部搭建的Ldap 或者 Windows 的AD服务器作为Web登录认证系统时,就需要这个Django-auth-ldap第三方插件

插件介绍

Django-auth-ldap是一个Django身份验证后端,可以针对LDAP服务进行身份验证。有许多丰富的配置选项可用于处理用户,组和权限,便于对页面和后台的控制 插件介绍地址:Django-auth-ldap

安装方法

注意:需先正确安装python3环境、pip3 和 Django环境

前提: 需要先安装python-ldap > = 3.0

第一步:安装Django-auth-ldap

pip install django-auth-ldap

第二步:在setting.py中配置django-auth-ldap 模块

要在Django项目中使用auth认证,请将django_auth_ldap.backend.LDAPBackend添加 到AUTHENTICATION_BACKENDS。不要向INSTALLED_APPS添加任何内容。 添加完效果如下:

AUTHENTICATION_BACKENDS = [

'django_auth_ldap.backend.LDAPBackend' ,

]

第三步:在django项目的settings.py中配置如下代码:

#Django-auth-ldap 配置部分
import ldap
from django_auth_ldap.config import LDAPSearch,GroupOfNamesType
 
#修改Django认证先走ldap,再走本地认证
AUTHENTICATION_BACKENDS = [
 'django_auth_ldap.backend.LDAPBackend',
 'django.contrib.auth.backends.ModelBackend',
]
 
#ldap的连接基础配置
AUTH_LDAP_SERVER_URI = "ldap://xxx.xxx.xxx.xxx:389" # ldap or ad 服务器地址
AUTH_LDAP_BIND_DN = "CN=administrator,CN=Users,DC=test,DC=com" # 管理员的dn路径
AUTH_LDAP_BIND_PASSWORD = 'testpassword' # 管理员密码
 
#允许认证用户的路径
AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=test,DC=test,DC=intra",
     ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)")
 
#通过组进行权限控制
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=groups,ou=test,dc=test,dc=intra",
 ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
 
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
 
#is_staff:这个组里的成员可以登录;is_superuser:组成员是django admin的超级管理员;is_active:组成员可以登录django admin后台,但是无权限查看后台内容
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
 "is_staff": "cn=test_users,ou=groups,OU=test,DC=test,DC=com",
 "is_superuser": "cn=test_users,ou=groups,OU=tset,DC=test,DC=com",
}
#通过组进行权限控制end
 
#如果ldap服务器是Windows的AD,需要配置上如下选项
AUTH_LDAP_CONNECTION_OPTIONS = {
 ldap.OPT_DEBUG_LEVEL: 1,
 ldap.OPT_REFERRALS: 0,
}
 
#当ldap用户登录时,从ldap的用户属性对应写到django的user数据库,键为django的属性,值为ldap用户的属性
AUTH_LDAP_USER_ATTR_MAP = {
 "first_name": "givenName",
 "last_name": "sn",
 "email": "mail"
}
 
#如果为True,每次组成员都从ldap重新获取,保证组成员的实时性;反之会对组成员进行缓存,提升性能,但是降低实时性
# AUTH_LDAP_FIND_GROUP_PERMS = True

以上配置完毕后,登录服务器后台地址:http://serverurl:8080/admin 使用ldap or ad中指定的group里的用户进行登录认证。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中bisect的用法
Sep 23 Python
Linux下编译安装MySQL-Python教程
Feb 02 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
python实现的简单FTP上传下载文件实例
Jun 30 Python
Python之Web框架Django项目搭建全过程
May 02 Python
Python 对象中的数据类型
May 13 Python
Python 读写文件的操作代码
Sep 20 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
pandas通过索引进行排序的示例
Nov 16 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
如何利用python实现列表嵌套字典取值
Jun 10 Python
Python网页正文转换语音文件的操作方法
Dec 09 #Python
python 使用 requests 模块发送http请求 的方法
Dec 09 #Python
Python实现八皇后问题示例代码
Dec 09 #Python
python中的tcp示例详解
Dec 09 #Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 #Python
Python发送邮件测试报告操作实例详解
Dec 08 #Python
Python自动发送邮件的方法实例总结
Dec 08 #Python
You might like
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
第十五节--Zend引擎的发展
2006/11/16 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
PHP Socket 编程
2010/04/09 PHP
php中rename函数用法分析
2014/11/15 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
小程序实现留言板
2018/11/02 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
python给list排序的简单方法
2020/12/10 Python
应届生.NET方向面试题
2015/05/23 面试题
《手指教学》反思
2014/02/14 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
通知范文怎么写
2015/04/16 职场文书
培训通知书模板
2015/04/17 职场文书
高二数学教学反思
2016/02/18 职场文书
标准发言稿结尾
2019/07/18 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android