簡體   English   中英

允許AD用戶使用Python ldap3更改自己的密碼

[英]Allow AD users to change their own passwords using Python ldap3

我正在使用Python ldap3 [1]構建一個API,該API允許用戶使用其當前憑據更改其Microsoft Active Directory密碼。 這是我的API正在執行的操作:

1-創建LDAP連接並綁定到LDAP服務器:

tls_config = Tls(validate=ssl.CERT_NONE) server = Server(ldaps_endpoint, port = 636, use_ssl = True, tls = tls_config) connection = Connection(server, user=username, password=password, authentication='NTLM') connection.bind()

2-使用extend.microsoft.modifyPassword.ad_modify_password() ldap3函數更改密碼:

user_modified = extend.microsoft.modifyPassword.ad_modify_password(connection, user_dn, new_password, current_password)

當未設置下次登錄時的用戶標志更改密碼時,此方法可以正常工作。 設置后,由於連接失敗bind() ,因此它不起作用。 我嘗試使用ANONYMOUS連接而不是NTLM成功綁定。 但是, ad_modify_password()函數失敗並顯示:

為了執行此操作,必須在連接上完成成功的綁定

ad_modify_password()如何與下一個登錄標志上的更改密碼一起使用

[1] https://ldap3.readthedocs.io/

不是-但這不是Python特有的。 Microsoft提供了一個可以在域控制器上運行的基於ASP的用戶密碼更改網站,並且MS的網站具有相同的限制。 如果用戶的密碼已經過期,或者用戶需要在下次登錄時更改其密碼,那么您將陷入困境。

兩種方法:

(1)構建自助密碼重置功能,以針對用戶的AD帳戶密碼以外的其他內容對用戶進行身份驗證-存儲在其用戶對象上的哈希屬性,存儲在數據庫表中的質詢/響應問題等。通過二級身份驗證后,將使用管理員憑據重置密碼。

(2)特別是對於必須在下次登錄時更改密碼的用戶,當用戶必須更改其密碼時,pwdLastSet屬性將設置為“ 0”。 使用具有“寫入”值訪問權限的系統憑證,將該值修改為-1。 然后綁定用戶提供的帳戶和密碼。 如果綁定失敗,則將pwdLastSet設置回0。如果綁定通過,則更改密碼。

#1可以節省更多時間/精力,但是可以對密碼過期的用戶,下次登錄時需要更改密碼的用戶,被鎖定的用戶以及忘記密碼的用戶進行排序。 “忘記密碼/被鎖定的人”往往是一個大贏家-減少服務台呼叫可以抵消投入自助密碼重置開發的時間/金錢。

#2簡單得多,但只處理您提出的單個方案。 如果為域定義了最長密碼使用期限(或為某些用戶帳戶建立了最長密碼使用期限的細粒度密碼策略),則具有過期憑據的用戶可能仍會卡住。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM