2011-04-28 136 views
0

我們使用ASP.NET MVC和AdMembership提供程序進行登錄,並且由於各種原因必須實現我們自己的「在下次登錄時更改密碼」功能。Ad Asp.Net更改密碼

我們也有一個不允許每24小時更換一次的要求。所以它是在AD中設置的。

我們需要的是在將密碼重置爲默認值時忽略這一要求,我們希望學生在下次登錄時被強制更改密碼,即使它在24小時之前也是如此。

這裏是我的刺傷它。基本上我想在重設密碼後將PwdLastSet屬性更改爲24小時以上的值。

if (bSetToDefault) 
    { 
     var adDate     = userToActOn.ADEntry.Properties[ "PwdLastSet" ][ 0 ]; 
     DateTime passwordLastSet = DateTime.FromFileTime((Int64) adDate); 
     passwordLastSet    = System.DateTime.Now.AddHours(-25); 
     long filetime    = passwordLastSet.ToFileTimeUtc(); 
     userToActOn.ADEntry.Properties[ "PwdLastSet" ][ 0 ] = filetime; 
    } 

但即使當我知道用戶密碼已更改時,我仍然收回空白。

任何人有任何提示或建議?我在尋找錯誤的財產?

回答

1

hmm此屬性被複制,所以應始終可用。 嘗試命令行腳本,看它是否顯示出來:

http://www.rlmueller.net/PwdLastChanged.htm

其可能的,因爲它是一個64位的日期,並沒有做轉換?儘管嘗試腳本,看看它是否工作。如果是這樣,那麼查看日期轉換中的Integer8Date過程。

+0

那是輸出它,我用那裏的代碼來得到它,但我該如何設置它?謝謝。 – 2011-04-28 19:43:03

+0

你不能 - 你只能設置爲0(現在到期)或-1(重設領帶到現在) – 2011-04-28 19:52:52

0

如果您使用System.DirectoryServices.AccountManagement,則會出現用戶主體立即過期密碼的公開方法。因此,將其稱爲像oUserPrincipal.ExpirePasswordNow();一樣簡單,關於使用它的更多信息,請參閱this article

+0

如果我這樣做,他們根本無法登錄。 – 2011-04-28 21:01:12

+0

你確定嗎?由於該方法會使密碼過期,並且在他們登錄時它會讓他們改變。在MS文檔中,它定義爲「過期此帳戶的密碼,這將強制用戶在下次登錄時更改其密碼」。 – Raymund 2011-04-28 21:07:53

+0

我使用的控件在登錄之前不支持更改密碼,我不記得爲什麼,自從我弄糟了它之後,我一直在等待時間,但我們無法讓它工作。它是一個asp.net登錄控件,它的設置設置爲將其展開爲html中的多個控件。更改密碼控制,沒有,除非你已經登錄。 – 2011-04-28 21:26:05