在 C# 中使用 Novell.Directory.LDAP 连接和绑定 Open LDAP

问题描述 投票:0回答:1

我正在尝试使用管理员用户连接并绑定到 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?

c# ldap openldap aspnetcore-environment
1个回答
1
投票

“绑定 DN”在 LDAP 中相当于用户名。如果您不想允许匿名访问,则需要提供用户名,对于 LDAP 简单绑定,该用户名始终采用条目 DN 的形式。

尽管 Active Directory 域控制器接受简单用户名进行简单绑定操作,但这通常是例外,而不是规则。 OpenLDAP 不支持这一点;它需要一个 DN。 (部分原因是 Active Directory DC 在 AD 架构中专门定义了一个“用户名”属性;同时 OpenLDAP 遵循 X.500 架构,其中整个 DN 被设计用作用户名。)

如果要创建用户名/密码表单,服务通常使用的方法是绑定两次并执行搜索:

  1. 用户提供他们的用户名和密码。
  2. 程序连接到 LDAP 并与其自己的(服务帐户)DN 和密码绑定,然后搜索与提供的用户名匹配的条目。
  3. 程序再次连接 LDAP,并最终与找到的用户 DN(以及提供的密码)绑定。

SASL PLAIN 可能“从技术上讲”是一种替代方案。因为 SASL 作为一个整体是与协议无关的,所以 SASL 绑定通常使用普通用户名,OpenLDAP 将“在内部”将其转换为绑定 DN。不幸的是,OpenLDAP 无法自行验证 SASL PLAIN 身份验证;它需要一个外部帐户数据库(与 saslauthd 兼容),所以在大多数情况下这只是一个令人头痛的问题。

© www.soinside.com 2019 - 2024. All rights reserved.