我正在审查通过创建 DirectoryEntry
对象来针对 LDAP 服务器验证用户凭据的代码,如下所示
DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
try
{
object obj = entry.NativeObject;
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message);
}
如果未引发异常,则代码假定用户凭据正常。
该代码工作正常,但我的问题与它的安全性有关。由于使用了SSL,因此客户端和Web服务器之间的通信是安全的,但是Web服务器和LDAP服务器之间的通信是否存在漏洞?
DirectoryEntry
构造函数还有另一个重载参数,称为 AuthenticationType
。由于上面的代码中没有指定任何参数,因此它使用 AuthenticationType = None ,这相当于基本身份验证。
使用AuthenticationType = Secure
或AuthenticationType = SecureSocketsLayer
或AuthenticationType = Encryption
或者它们的按位组合会更好吗?
迈克尔
最佳答案
当构造函数中未提供 AuthenticationType 时,默认使用 AuthenticationType.Secure。此选项已经对密码进行了加密,因为它使用 NTLM/Kerberos 进行身份验证。
您还可以指定密封标志(与安全一起)来加密所有流量(不仅仅是身份验证)。这需要 Kerberos。
您要连接的 LDAP 服务器是 AD 吗? 我验证了上述内容适用于 AD。 (流量已加密,如wireshark中所示)
关于.net - 密码是否使用 DirectoryEntry 安全传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25262884/