2012-05-09 57 views
2

如果帳戶沒有「用戶必須在下次登錄時更改」,我可以更改密碼。
但是,如果選中該框,當我嘗試訪問用戶時,出現密碼錯誤錯誤。嘗試通過ASP.NET更改AD中「用戶必須更改」的密碼

LogOnUser()返回正確的錯誤代碼,所以我知道用戶必須更改其密碼。
正如Joe Kaplan所說here(早在2004年),我無法綁定到用戶以便能夠更改他們的密碼。

無論使用AccountManagement/PrincipalContext還是DirectoryEntry/DirectorySearcher,都是一樣的問題。

回答

2

我在我最後一個位置的一個項目上做了這個。我們沒有嘗試用自己的憑證綁定用戶,而是建立了一個AD帳戶,僅擁有更改密碼的權限。

因此,一旦您的錯誤代碼指示用戶必須更改其密碼,請求新密碼,以admin身份獲取用戶並進行更改。

我記得,我們必須明確地傳遞管理員用戶名和密碼才能使其工作,而不是依賴代碼運行的憑據。

爲了安全起見,我們在註冊表中存儲了有限管理員用戶名和密碼的加密副本,並在我們撥打電話時將其解密。

代碼將是這樣的:

 PrincipalContext dc = new PrincipalContext(ContextType.Domain, 
      "www.yourdomain.com", "dc=yourdomain,dc=com", 
      ContextOptions.SimpleBind, "AdminUserName", "AdminPassword"); 
     UserPrincipal usr = UserPrincipal.FindByIdentity(dc, 
      "UserWhoNeedsPasswordChanged"); 
     usr.ChangePassword("oldPass", "newPass"); 
+0

這裏實現同樣的事情。研究和研究解決方案和自制一些非常相似的東西。 – zeroef

+0

你是如何使用管理員憑證的?你是否模仿或者是否有通過憑據傳遞設置密碼的呼叫? – eych

+0

它在PrincipalContext對象的構造函數中,應該有一個包含用戶名和密碼的重載。 – KennyZ