2011-02-12 51 views
7

Active Directory'de bir kullanıcının kimliğini doğrulamak için aşağıdaki kodu kullanıyorum, ancak parola açık bir metin gönderiyor. Şifremi nasıl alabilir ve sonra Active Directory'ye gönderebilirim?Aktif dizin kimlik doğrulaması

DirectoryEntry entry = new DirectoryEntry(path, username, pwd); 
try 
{ 
    //Bind to the native AdsObject to force authentication. 
    object obj = entry.NativeObject; 

    DirectorySearcher search = new DirectorySearcher(entry); 

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

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

    //Update the new path to the user in the directory. 
    _path = result.Path; 
    _filterAttribute = (string)result.Properties["cn"][0]; 
} 
catch (Exception ex) 
{ 
    throw new Exception("Error authenticating user. " + ex.Message); 
} 

return true; 
+0

Bu iyi bir soru. Merak etme, Hangi AuthenticationType kullanıyorsunuz? – Pandincus

+0

Kimlik Doğrulama Türü'nün anlamı nedir, System.DirectoryServices kullanıyorum; name space ve Authenticating için belirtilen kod –

cevap

6

sonra şiddetle System.DirectoryServices.AccountManagement ad kullanarak geçiş öneriyoruz, .NET 3.5 kullanıyorsanız (olduğunu okumuştum: Managing Directory Security Principals in the .NET Framework 3.5). şeylerden

sürü S.DS.AM yılında çok daha kolaydır - bir yetkili kullanıcılar gibi:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 
ctx.ValidateCredentials("test", "test", ContextOptions.SecureSocketLayer); 

güvenli Bunu yapmanın tek yolu bir SSL korumalı bağlantı kullanarak zorlamak için ContextOptions.SecureSocketLayer seçeneği belirterek gereğidir. .NET 3.5 ve S.DS.AM hareket edemiyorsanız

, size de tanımlayabilirsiniz AuthenticationTypes kontrol etmeliyiz fourth overloaded constructorDirectoryEntry ait:

DirectoryEntry entry = 
    new DirectoryEntry(path, username, pwd, 
         AuthenticationTypes.SecureSocketsLayer); 

bunu yapmak için başka bir yol Ben var, korkarım - İstemci tarafında Windwos Server/Active Directory ile aynı şekilde bir parola almak ve bu karma değerde geçmek için herhangi bir yol olduğunu sanmıyorum ...

+0

Hala başarısız oldu :(. Belki bir şey yanlış bende.Yani, LDAP sunucusuna sahipse 'https: // example.com', 'DirectoryEntry' kurucusunun 'path' argümanı olarak ne geçmeliyim Teşekkürler – BornToCode

+0

@BornToCode: sunucunuza uygun ** LDAP ** yolunu bulmanız gerekir - bir şey gibi LDAP: // YourServer/DC = YourCOmpany, dc = com' - https bağlantısı gerçekten çok yardımcı olmaz ... –