我被要求公开一个用于通过Intranet管理Active Directory用户的Web服务。我被告知LDAP被视为安全漏洞,不能使用。
鉴于这种限制,我设法通过ADSI与DirectoryEntry对象连接,如下所示:
DirectoryEntry de = new DirectoryEntry();
de.Path = "WinNT://TheDomain.local";
de.Username = "NTUser1";
de.Password = "pwdpwdpwd2";
我可以循环遍历此DirectoryEntry的子项,获取用户的子项。在Users上,我可以看到这些基本属性:UserFlags,MaxStorage,PasswordAge,PasswordExpired,LoginHours,FullName,Description,BadPasswordAttempts,LastLogin,HomeDirectory,LoginScript,Profile,HomeDirDrive,Parameters,PrimaryGroupID,Name,MinPasswordLength,MaxPasswordAge,MinPasswordAge,PasswordHistoryLength ,AutoUnlockInterval,LockoutObservationInterval,MaxBadPasswordsAllowed,objectSid。
在Active Directory MMC中可以看到许多无法从DirectoryEntry对象访问的用户属性,包括:LastName,NameSuffix,Department等...
这些其他属性都在msdn中记录为由IADsUser(http://msdn.microsoft.com/en-us/library/aa746340%28VS.85%29.aspx)公开。
1)LDAP实际上是一个易受攻击的协议吗?比上面显示的ADSI(WinNT)连接更多?为此目的,LDAP似乎很常见。
2)如何检索/设置用户的这些其他属性?
TIA
答案 0 :(得分:2)
1- LDAP数据包传输以明文形式执行,因此有人可以捕获您的数据。 如果您使用LDAPS协议或TLS启用LDAP连接,则是安全的。 ADSI只是Microsoft的LDAP客户端实现,它支持LDAP和LDAPS连接。 对公司Active Directory使用ADSI时,它主要尝试启动LDAPS连接。 所以你使用ADSI是安全的;或者,如果使用安全连接,也可以使用任何其他客户端或编程库。 LDAPS的默认端口是636。
2-要获取有关目录对象的更多信息,可以使用 GetInfoEx 方法,它会精确加载所需的属性。您可以在下面看到一个示例: http://msdn.microsoft.com/en-us/library/aa746411%28v=vs.85%29.aspx
但您查找的某些属性通过与MMC控制台不同的属性名称存储在Active Directory中。例如名字存储为'givenName',姓氏存储为'sn'。查看here以查找所需属性的名称;
您可以找到更多信息here。
答案 1 :(得分:1)
http://www.techgalaxy.net/Docs/Dev/Using_ADSI_and_LDAP_with_AD.htm解释了LDAP和ADSI之间的区别:http://technet.microsoft.com/en-us/library/cc755809(v=ws.10).aspx包括插图。
简而言之,ADSI是围绕LDAP的简化包装器。如果它有任何不安全感,它就在绑定中,这里似乎是SIMPLE(未加密的明文用户名和密码)。如果使用任何其他方法(或通过SSL连接)绑定LDAP连接,则它应该是安全的。