上上周接到需求,要将软件实现与客户AD域的信息进行对接。
需求如下:
1、在软件注册用户的页面新建一个功能,能够查询该用户名是否在AD域内存在。
2、用户登陆软件的时候对输入的账号密码与AD域内的账号密码进行校验,能够实时以AD域的账号密码登陆。
公司的考勤软件使用Django框架开发,用户登陆这一块用的是Django本身‘密码MD5加密’---‘保存数据库’---‘登陆时进行比对’的逻辑。
看到需求,直接否认了这种Django本身的逻辑,开玩笑,几千人的密码要进行实时更新,对服务器的压力也太大了,而且windows的官方文档写的清清楚楚:AD域不会提供密码。
Python对接AD域自然要用到ldap库,安装ldap库的时候最开始使用pip安装,后来软件报错才发现安装错误,应该安装python-ldap,而不是ldap。后来找到64位的安装包才安装成功。
(windows使用python有时候会有很多坑,因为有些库是依赖于VS,比较麻烦。)
ldap提供了接口可以供我们对AD域内的信息进行比对,只用修改Django的登陆逻辑,每次登陆的时候调用接口,和AD域内的信息进行比对就行了。
代码如下:
# -*- coding: UTF-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import ldap,logging,time
logfile = 'e:\\a.txt'
# logging.basicConfig(filename=logfile,level=logging.INFO)
# logging.basicConfig(format='%(time.asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.basicConfig(level=logging.INFO,
#format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #返回值:Thu, 26 May 2016 15:09:31 t11.py[line:92] INFO
format='%(asctime)s %(levelname)s %(message)s',
#datefmt='%a, %d %b %Y %H:%M:%S',
#datefmt='%Y/%m/%