2013-07-22 51 views
2

我們爲我們的應用程序提供了一個登錄框,要求用戶輸入他們的AD憑證。我們拿這些憑據,然後致電PrincipalContext.ValidateCredentials對於空密碼返回true是什麼?

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, container, ContextOptions.SimpleBind)) 
    { 
     return pc.ValidateCredentials(domain + @"\" + username, password, ContextOptions.SimpleBind); 
    } 

驗證他們已輸入有效的登錄名/密碼對。但是我們發現,對ValidateCredentials的調用將返回true,並且密碼爲空,我們不知道爲什麼。無效密碼返回false,但只要用戶名正確,空白將返回true。

+1

你偶然登錄相同的用戶(如用戶名)爲當前登錄到機器上做測試(用戶即你登錄到本機爲'域\ user1'和你'以domain \ user1'身份登錄到應用程序中)? –

+0

我不知道這是否與我看到的類似的問題,它爲未知的用戶返回true?最終找到與訪客帳戶啓用相關的答案。有關完整的詳細信息,請參閱http://stackoverflow.com/a/7336610/130352。 –

+0

@ChrisJ Nope,我們遇到了我們的客戶之一的問題,並且來賓帳戶被禁用。仍試圖找出爲什麼一個空密碼被接受。 –

回答

4

從MSDN http://msdn.microsoft.com/en-us/library/bb154889.aspx

的ValidateCredentials方法結合在構造函數中指定的服務器。如果用戶名和密碼參數爲空,則會驗證構造函數中指定的憑據。如果在構造函數中沒有指定憑證,並且用戶名和密碼參數爲空,則此方法驗證當前主體的默認憑證。

在PrincipalContext構造函數中,您還可以指定要檢查的憑據。

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, 
         container, ContextOptions.SimpleBind, username, password)) 
{ 
    return pc.ValidateCredentials(domain + @"\" + username, password, 
            ContextOptions.SimpleBind); 
} 
+2

在PrincipalContext構造函數中,使用用戶名和密碼連接到LDAP服務器。那麼爲什麼你會在那之後驗證證書?這是多餘的,對嗎? – Mzn

相關問題