编写抽象 LDAP 集成服务需要哪些信息
What information is needed to write an abstract LDAP Integration Service
我的任务是 researching/writing LDAP 集成模块,以支持 any/all 对我们的新应用程序使用本地 LDAP 身份验证的客户端。因为我以前从未使用过 LDAP,所以我试图弄清楚 required/not 需要哪些设置,以及我需要从每个 LDAP 系统捕获哪些设置才能支持它们。因此,如果我将有关每个 LDAP 服务器的数据存储在数据库中,那么该服务器需要什么才能成功使用 username/password?
进行身份验证
我看到很多 ou/cn/dc 引用,但有时人们不会在他们的连接字符串中使用它们?除非预先注册,否则我似乎无法知道要查询的 groups/categories 的名称。我在考虑 SAML 规范并且很好奇 LDAP 系统是否有端点来检索某种描述其 LDAP 层次结构的 XML?或者,如果我只需要 know/ask 提前从系统管理员那里获得它?
FWIW 我正在使用 Node/ldapjs
没有以您考虑的方式描述 LDAP 层次结构的标准方法。 LDAP 实际上是自描述的,您可以通过查找其属性值之一来搜索特定条目,而不管它在 LDAP 树中的位置。
因此,要开始使用完全未知的 LDAP,您只需要它的网络参数:主机名、端口(如果您查阅 SRV DNS 记录,甚至可以避免这些参数 (_ldap._tcp.domain.com)) 以及绑定 DN 和密码形式的身份验证详细信息。
之后您可以搜索用户,通常是使用 (objectClass=inetOrgPerson)
等过滤器查找用户,或使用 (objectClass=groupOfNames)
等过滤器查找用户组。然后,您将使用用户名、CN 或显示名称等常用属性在用户界面中引用或显示用户。
从这个 LDAP 服务器可以看出,它是非常自我定义的,这对大多数 LDAP 服务器都适用,但正如您在问题中所看到的那样,它可能因 LDAP 服务器而异。
下面是我应该可配置的 LDAP 配置设置列表:
- hostname/port 数量(如果不使用 DNS 发现)
- username/password(如果不使用匿名访问)
- 服务器是否使用 SSL(默认端口 636)(或检测对 StartTLS 的支持)
- 用户过滤器和用户基础 DN(例如
(objectClass=inetOrgPerson)
和 o=users
)
- 群组过滤器和群组基本 DN(例如
(objectClass=groupOfNames)
和 o=groups
)
根据您的用例,您可以定义用于显示用户的属性,将它们映射到 application/system 的其他部分,或者您可以从返回的属性集中确定那些。我见过具有非常可配置的实现和默认为某些标准模式的实现。
我的任务是 researching/writing LDAP 集成模块,以支持 any/all 对我们的新应用程序使用本地 LDAP 身份验证的客户端。因为我以前从未使用过 LDAP,所以我试图弄清楚 required/not 需要哪些设置,以及我需要从每个 LDAP 系统捕获哪些设置才能支持它们。因此,如果我将有关每个 LDAP 服务器的数据存储在数据库中,那么该服务器需要什么才能成功使用 username/password?
进行身份验证我看到很多 ou/cn/dc 引用,但有时人们不会在他们的连接字符串中使用它们?除非预先注册,否则我似乎无法知道要查询的 groups/categories 的名称。我在考虑 SAML 规范并且很好奇 LDAP 系统是否有端点来检索某种描述其 LDAP 层次结构的 XML?或者,如果我只需要 know/ask 提前从系统管理员那里获得它?
FWIW 我正在使用 Node/ldapjs
没有以您考虑的方式描述 LDAP 层次结构的标准方法。 LDAP 实际上是自描述的,您可以通过查找其属性值之一来搜索特定条目,而不管它在 LDAP 树中的位置。
因此,要开始使用完全未知的 LDAP,您只需要它的网络参数:主机名、端口(如果您查阅 SRV DNS 记录,甚至可以避免这些参数 (_ldap._tcp.domain.com)) 以及绑定 DN 和密码形式的身份验证详细信息。
之后您可以搜索用户,通常是使用 (objectClass=inetOrgPerson)
等过滤器查找用户,或使用 (objectClass=groupOfNames)
等过滤器查找用户组。然后,您将使用用户名、CN 或显示名称等常用属性在用户界面中引用或显示用户。
从这个 LDAP 服务器可以看出,它是非常自我定义的,这对大多数 LDAP 服务器都适用,但正如您在问题中所看到的那样,它可能因 LDAP 服务器而异。
下面是我应该可配置的 LDAP 配置设置列表:
- hostname/port 数量(如果不使用 DNS 发现)
- username/password(如果不使用匿名访问)
- 服务器是否使用 SSL(默认端口 636)(或检测对 StartTLS 的支持)
- 用户过滤器和用户基础 DN(例如
(objectClass=inetOrgPerson)
和o=users
) - 群组过滤器和群组基本 DN(例如
(objectClass=groupOfNames)
和o=groups
)
根据您的用例,您可以定义用于显示用户的属性,将它们映射到 application/system 的其他部分,或者您可以从返回的属性集中确定那些。我见过具有非常可配置的实现和默认为某些标准模式的实现。