为什么LDAP需要两步"登录"(连接然后绑定)

And*_*rei 5 ldap

关于LDAP,我不明白这一点(从概念上讲,并且 - 至少我认为 - 与特定实现无关).

我注意到典型的LDAP客户端库(例如apache DS)首先执行connect()(某些服务器可能需要用户名/密码),然后执行bind()操作(也需要用户名和密码).

问题:

  • LDAP中这两步操作的重点是什么?
  • 它增加了额外的安全性吗?
  • 为什么不只是一步?
  • 这两个步骤的概念意义是什么?

Ter*_*ner 12

当LDAP客户端连接到LDAP服务器时,该连接未经身份验证.客户端使用BIND操作来验证连接.然后,服务器使用具有权限的连接的授权状态和对其的访问控制来处理对连接的请求.

一些(如果不是大多数)LDAP API提供单步连接和BIND,其中一个必须提供用户的凭证,或者预先构造的BIND请求(有不同类型的BIND请求,简单和SASL).在您描述的情况下,API很可能建立与服务器的连接,然后向服务器发出BIND请求.如果成功,则设置连接的授权状态.对于客户来说,这将是一种"便利"方法.

将连接与BIND(您提到的两个步骤)分开,以便可以将相同的连接与不同的授权状态一起使用.每个BIND都会重置连接的授权状态.LDAP客户端可以连接,然后使用一个用户和凭据进行BIND,以该用户身份执行某些操作,然后在同一连接上发送另一个BIND请求,以将授权状态更改为其他用户的状态.这使得客户端和服务器更高效,因为不需要多次连接.这受LDAPv3支持.

UNBIND请求的名称是LDAPv2的遗留物,它不允许每个连接有多个授权状态.UNBIND不是BIND的反面,它会像你发现的那样断开连接.使用LDAPv3的LDAP客户端可以传输BIND请求以更改连接的授权状态.错误命名的UNBIND请求不会"取消授权"状态,它只是将LDAP客户端与LDAP服务器断开连接.

也可以看看: