Node.js 编写抽象LDAP集成服务需要哪些信息

Node.js 编写抽象LDAP集成服务需要哪些信息,node.js,active-directory,ldap,Node.js,Active Directory,Ldap,我的任务是研究/编写一个LDAP集成模块,以支持为我们的新应用程序使用本地LDAP身份验证的任何/所有客户端。因为我以前从未使用过LDAP,所以我试图找出哪些设置是必需的/不必需的,以及需要从每个LDAP系统捕获哪些设置才能支持它们。所以,如果我在数据库中存储关于每个LDAP服务器的数据,那么该服务器需要什么才能成功地使用用户名/密码进行身份验证 我看到很多ou/cn/dc引用,但有时人们在连接字符串中不使用它们?除非预先注册,否则我似乎无法知道要查询的组/类别的名称。我在考虑SAML规范,很好

我的任务是研究/编写一个LDAP集成模块,以支持为我们的新应用程序使用本地LDAP身份验证的任何/所有客户端。因为我以前从未使用过LDAP,所以我试图找出哪些设置是必需的/不必需的,以及需要从每个LDAP系统捕获哪些设置才能支持它们。所以,如果我在数据库中存储关于每个LDAP服务器的数据,那么该服务器需要什么才能成功地使用用户名/密码进行身份验证

我看到很多ou/cn/dc引用,但有时人们在连接字符串中不使用它们?除非预先注册,否则我似乎无法知道要查询的组/类别的名称。我在考虑SAML规范,很好奇LDAP系统是否有一个端点来检索某种描述其LDAP层次结构的XML?或者如果我只是需要提前从系统管理员那里知道/要求它


FWIW我使用的是Node/ldapjs

没有标准的方式来描述您所考虑的LDAP层次结构。LDAP实际上是自描述的,您可以通过查找某个特定条目的属性值来搜索该条目,而不管它在LDAP树中的位置如何

因此,要开始使用完全未知的LDAP,您只需要它的网络参数:主机名、端口(如果您查阅SRV DNS记录(_LDAP._tcp.domain.com))以及绑定DN和密码形式的身份验证详细信息,就可以避免这一点

在此之后,您可以搜索用户,通常是通过查找过滤器(如
(objectClass=inetOrgPerson)
)或用户组(如
(objectClass=groupOfNames)
)。然后,您将使用诸如username、CN或displayName等公共属性在用户界面中引用或显示用户

正如您可以从中看到的,LDAP服务器是非常自定义的,这在大多数LDAP服务器上都是理想的,但正如您在问题中所看到的,不同的LDAP服务器可能会有所不同

下面是我的LDAP配置设置列表,这些设置应该是可配置的:

  • 主机名/端口号(如果未使用DNS发现)
  • 用户名/密码(如果不使用匿名访问)
  • 服务器是否使用SSL(默认情况下为636端口)(或检测对StartTLS的支持)
  • 用户筛选器和用户基DN(例如
    (objectClass=inetOrgPerson)
    o=users
  • 组筛选器和组基DN(例如
    (objectClass=groupOfNames)
    o=groups
根据您的用例,您可以定义用于显示用户的属性,将它们映射到应用程序/系统的其他部分,或者您可以从返回的属性集确定这些属性。我看到过一些具有非常可配置性的实现,以及一些默认为标准模式的实现