3

我正在使用FormsAuthentication和AdMembership proivder進行asp.net。在下次登錄時更改密碼以使用AdMembership提供者進行表單登錄

我不得不手動編寫「在下次登錄時更改密碼」屏幕,因爲它在提供程序中不受支持。

我打電話:

if (Membership.Provider.ChangePassword(cpCv.LoginName, cpCv.OldPassword, cpCv.NewPassword)) 

來驗證用戶並更改密碼(但不清除「在下次登錄標誌」)

但總是失敗, (我假設becasue會員驗證當設置「下一次登錄時更改密碼」標誌失敗。)

驗證用戶的最簡單方法是什麼,所以我可以確定在重置密碼和清除密碼之前「舊密碼」和「用戶名」匹配「下一次登錄」標誌?

我已經得到了resetpassword和清除標誌的東西工作,這是驗證,讓我卡住了。

也試過這個代碼,如果復位標誌是假的,它記錄的,如果是真的失敗登錄。

DirectoryEntry de = new DirectoryEntry(path, "jcsn\\"+AdUserName, AdPassword); 

    try 
    { 
     //Bind to the native AdsObject to force authentication. 
     object obj = de.NativeObject; 

     DirectorySearcher search = new DirectorySearcher(de); 

     search.Filter = "(SAMAccountName=" + AdUserName + ")"; 
     search.PropertiesToLoad.Add("cn"); 
     SearchResult result = search.FindOne(); 

     if (null == result) 
     { 
      return false; 
     } 

    } 
    catch (Exception ex) 
    { 
     throw new Exception("Error authenticating user. " + ex.Message); 
    } 

感謝,

Eric-

+0

我真的沒有解決您的問題的方法,但請查看System.DirectoryServices.AccountManagement命名空間,它可能允許您減少代碼量並可能爲您解決問題。 – 2011-04-07 20:47:10

+0

謝謝!我剛剛發佈了另一個問題,因爲我嘗試使用該名稱空間並卡住了身份驗證。我正在跳轉,它會幫助它,因爲它很容易清除標誌,然後重置它。 – 2011-04-07 20:50:32

回答

0

有一個函數稱爲Membership.Validate。我覺得你的代碼應該是這樣的:

if(Membership.ValidateUser(txtUserName.Text, txtPassword.Text)) 
{ 
    //Proceed with the change 
} 

我不知道爲什麼你要ChangePassword調用失敗,雖然 - 我想ChangePassword可能反正打電話的ValidateUser。

+0

如果(Membership.ValidateUser(txtUserName.Text,txtPassword.Text))也返回false ..我認爲更改密碼失敗,因爲它調用ValidateUser,這是失敗,因爲AdMembershipProvider不支持changePasswordOnNextLogon並失敗。我認爲我需要一種不使用提供程序的身份驗證方法。 – 2011-04-07 18:26:53

+0

ChangePassword調用驗證用戶,重置爲true時驗證用戶失敗,這是AdMembershipProvider的實現方式。所以這整個方法都離開了窗口。 – 2011-05-05 16:30:11

0

雖然這是一條舊線程,但似乎沒有答案。

linked forum post,開發人員聯繫了微軟對這個同樣的問題與Membership.ValidateUser()返回帳戶選項「用戶下次登錄時須更改密碼」由檢查系統管理員:

的ActiveDirectoryMembershipProvider不允許用戶具有 「用戶下次登錄時須更改密碼......」標誌設置登錄 根據MS這是設計:由於ActiveDirectoryMembershipProvider沒有提供強制 用戶在登錄時提供新密碼的機制,因此身份驗證被阻止。

他們繼續提示他們在FormsAuthentication中使用安全API,但沒有提供示例。

任何人有任何想法?

相關問題