最近有一個網站, 想讓用戶能設置自己賬號類型, 即網域用戶綁定 AD 賬號驗證, 沒加域的用戶使用獨立賬號密碼驗證,
獨立賬號密碼驗證比較簡單, 保存在數據庫就行了, 本文介紹 python 通過 ldap3 組件讀取網域用戶信息. 實現網域驗證功能.
ldap3 官網:
http://ldap3.readthedocs.io/index.html
下載 安裝包 ldap3-2.2.4.tar.gz
解壓縮執行安裝
# python setup.py install
演示環境
網控制器 IP 10.10.10.100
網域名稱 mydomain, 即通過賬號 mydomain\賬號名 進行驗證
網域全名 mydomain.com
先登陸一個賬號,
>>> s = Server('10.10.10.100', get_info=ALL)
>>> c = Connection(s, 'mydomain\\acount01', 'password01')
>>> a = c.bind()
此時, 如果 a = True 表示登陸成功,
接下來使用這個已登陸的賬號查詢目標驗證賬號, 比如想驗證 account02 是不是一個可以正常登陸的網域賬號,
主要檢查網域賬號的兩個關鍵字段 msDS-User-Account-Control-Computed 和 userAccountControl
c.search('dc=mydomain,dc=com','(&(objectclass=user)(userPrincipalName=account02@mydomain.com))', attributes=['msDS-User-Account-Control-Computed','userAccountControl'])
再根據搜查結果判斷用戶的狀態
if len(c.entries) != 1:
print '賬號不存在'
b1 = bin(int(str(c.entries['0']['userAccountControl'])))
if b1[len(b1) - 2] == '1':
print '賬號被停用'
if c.entries[0]['msDS-User-Account-Control-Computed'] == 16:
print '賬號被鎖定'
cc = Connection(s, 'mydomain\\account02', 'password02')
if cc.bind():
print '驗證通過'
else:
print '密碼不正確'
為了層別賬號登錄失敗的幾種情況, 采用先排除賬號不存在, 停用, 鎖定后再模擬登錄
userAccountControl 的標志位含義請查找官方文檔或 csdn 其它文章:
http://blog.csdn.net/li5147705/article/details/9223415
全文完