我正在尝试使用管理员用户连接并绑定到 LDAP 并获取所有用户的列表。以下是我的代码,适用于 Microsoft Active Directory,但不适用于 Open LDAP。我在
C#中使用
Novell.Directory.LDAP
var user = configuration.username + "@" + configuration.domainName;
LdapConnection connection = new() { SecureSocketLayer = false };
connection.Connect(configuration.Host, LdapConnection.DefaultPort);
connection.Bind(user, configuration.Password);
我研究发现,要绑定Open LDAP,只需要一个管理员帐户DN(专有名称),然后就可以了。 但我没有获得 DN。是否可以在没有管理员 DN 的情况下绑定 Open LDAP?
“绑定 DN”在 LDAP 中相当于用户名。如果您不想允许匿名访问,则需要提供用户名,对于 LDAP 简单绑定,该用户名始终采用条目 DN 的形式。
尽管 Active Directory 域控制器接受简单用户名进行简单绑定操作,但这通常是例外,而不是规则。 OpenLDAP 不支持这一点;它需要一个 DN。 (部分原因是 Active Directory DC 在 AD 架构中专门定义了一个“用户名”属性;同时 OpenLDAP 遵循 X.500 架构,其中整个 DN 被设计用作用户名。)
如果要创建用户名/密码表单,服务通常使用的方法是绑定两次并执行搜索:
SASL PLAIN 可能“从技术上讲”是一种替代方案。因为 SASL 作为一个整体是与协议无关的,所以 SASL 绑定通常使用普通用户名,OpenLDAP 将“在内部”将其转换为绑定 DN。不幸的是,OpenLDAP 无法自行验证 SASL PLAIN 身份验证;它需要一个外部帐户数据库(与 saslauthd 兼容),所以在大多数情况下这只是一个令人头痛的问题。