2012-10-30 160 views
0

我想查看loginpassword與AD信息的匹配情況。我試着用這件衣服,但我得到一個例外FindOne(用戶名或密碼錯誤,但他們是正確的)。我知道有該PrincipalContext解決方案,但我需要能夠設置服務器(生產,開發,...)使用Active Directory驗證密碼

感謝,

var Ad = new DirectoryEntry("LDAP://server1.domain.com", username, password); 

var AdSearcher = new DirectorySearcher(Ad); 
AdSearcher.Filter = String.Format("(anr={0})", username); 
AdSearcher.PropertiesToLoad.Add("sAMAccountName"); 
AdSearcher.PropertiesToLoad.Add("displayName"); 

var AdSearcherResults = AdSearcher.FindOne(); 
var userFullName = AdSearcherResults.Properties["displayName"][0].ToString(); 
var userUid = AdSearcherResults.Properties["sAMAccountName"][0].ToString(); 

if (Membership.ValidateUser(username, userUid)) 
    return true; 
return false; 

UPDATE1我想這太:

using (var context = new PrincipalContext(ContextType.Domain, "server1.domain.com")) 
{ 
    var isValid = context.ValidateCredentials(username, password); 
} 

我的電腦沒有連接到域,但應該是我認爲的工作。

+0

見[我的該另一SO問題的回答(http://stackoverflow.com/questions/290548/c-sharp-validate-a-username-and-password-against-active-directory/499716 #499716) –

+0

另外:'PrincipalContext'類**有**重載的構造函數,允許您準確地定義該域內的哪些域以及哪些容器可用於驗證...... [請參閱**精彩**和自由有關此主題的MSDN文檔!](http://msdn.microsoft.com/zh-cn/library/system.directoryservices.accountmanagement.principalcontext.principalcontext.aspx) –

+0

@marc_s查看我的更新1,謝謝。 –

回答

0

我的ActiveDirectory身份驗證代碼。

public DirectoryEntry connDirectory(string usr, string pwd) 
    { 

     string ip = iniMan.IniRead("LDAP", "adres"); 
     DirectoryEntry oDE; 
     oDE = new DirectoryEntry(ip, usr, pwd, AuthenticationTypes.Secure); 
     return oDE; 
    } 
    public bool AD_Login(string kullanici_adi, string sifre) 
    { 
     try 
     { 
      DirectoryEntry entLogin = connDirectory(kullanici_adi, sifre); 
      object loginObj = entLogin.NativeObject; 
      return true; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

    } 
    void TestMetod(){ 
    if(AD_Login("ozan","ozan"){ 
     //ok 
    } 
    } 
相關問題