我目前正在尋找某種最佳做法,即在用戶登錄到某個用戶時更改用戶的活動目錄用戶密碼基於asp.net的Web應用程序和密碼已過期,並在登錄會話。MS修補程序後在c#/ asp.net中更改Active Directory用戶密碼KB3167679
我們正在運行的Windows Server 2008 R2,IIS7應用程序了與.NET Framework 3.5的
到目前爲止,我用這個:
public int changeUserPassword(String _userID, String _oldPassword, String _newPassword, bool _change)
{
try
{
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, "do.ma.in", "DC=do,DC=ma,DC=in",
ContextOptions.SimpleBind, @"domain\admin_account", "admin_pw");
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, _userID);
if (_change)
{
oUserPrincipal.ChangePassword(_oldPassword, _newPassword);
}
else
{
oUserPrincipal.SetPassword(_newPassword);
}
oUserPrincipal.Save();
}
catch (Exception e)
{
//error handling
}
return 1;
}
此方法處理髮起PW變化後用戶的情況下,登錄,在過期的pw登錄(ChangePassword方法)期間更改以及密碼重置,其中生成臨時密碼等(SetPassword方法)。
我們需要ChangePassword方法的原因是有一個關於當前密碼的用戶確認,所以AD密碼歷史被應用,因爲我們不允許最後的x個密碼。 SetPassword只是設置密碼,不管它是否在最近的歷史記錄中。
SetPassword似乎仍然可以正常工作,但自Microsoft修補程序KB3167679以來,更改密碼方法似乎不再有效。 KB3167679 該文章特別提到,這隻會發生在被鎖定或禁用的帳戶,但當帳戶處於活動狀態或處於「密碼過期」模式時,它也不再起作用。 異常消息I geet是「一個或多個輸入參數無效」。
我以前使用過另一個使用DirectoryEntry的實現,但它有錯誤,因爲它有時可以工作,有時它不會,這很煩人。所以我寧願不回去。
我們在具有新補丁的實例上觀察到這一點,沒有它的實例可以正常工作。我還能夠在測試服務器上重現該行爲,該方法在安裝所述修補程序後停止工作。
不幸的是,微軟並沒有提供這篇文章中的最佳實踐,我似乎也無法找到自己的一個。所以問題是如果你對我有一個提示什麼是標準的方式去這裏。
非常感謝,這確實有用。到目前爲止,我所有的測試都很成功如果它在特定情況下失敗,我會報告。 – vm370