2

我被要求公开一个用于通过 Intranet 管理 Active Directory 用户的 Web 服务。我被告知 LDAP 被视为一个安全漏洞并且不应该被使用。

鉴于此约束,我设法通过 ADSI 与 DirectoryEntry 对象进行连接,如下所示:

DirectoryEntry de = new DirectoryEntry();
de.Path = "WinNT://TheDomain.local";
de.Username = "NTUser1";
de.Password = "pwdpwdpwd2";

我可以遍历此 DirectoryEntry 的子项来获取用户。在用户上,我可以看到这些基本属性: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

4

2 回答 2

3

1- LDAP 数据包传输以明文形式执行,因此有人可以捕获您的数据。如果您使用 LDAPS 协议或启用 TLS 的 LDAP 连接,则它是安全的。ADSI 只是微软 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”。在此处查找您需要的属性名称;

您可以在此处找到更多信息。

于 2013-10-06T06:32:12.437 回答
2

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 的简化包装器。如果它有任何不安全性,它就在绑定中,这里看起来很简单(未加密的明文用户名和密码)。如果您使用任何其他方法(或通过 SSL 连接)绑定 LDAP 连接,它应该是安全的。

于 2011-05-18T18:29:34.130 回答