python 验证Windows网域账号

最近有一個網站, 想讓用戶能設置自己賬號類型, 即網域用戶綁定 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


全文完






  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值