Java - LDAP:为什么我们需要硬编码的管理员用户凭据来进行 LDAP 绑定

Java - LDAP: Why do we need hardcoded Admin user credentials for LDAP binding

我正在编写一个 Spring 引导应用程序,我想在其中根据 LDAP 服务器对用户进行身份验证。我已经看到解决方案和 API documentation,其中 A​​dmin Users 凭据被硬编码在代码中。

我的问题是:为什么我不能简单地使用我首先尝试验证的用户的凭据?如果绑定成功,我可以确认身份验证并获取他们所属的组列表。我有什么不应该这样做的充分理由吗?

LDAP 示例通常包括管理员用户的原因是因为 LDAP 并不总是用于身份验证(即确定特定 username/password 是否有效),但有时仅用于授权(即检索用户分配的组,以确定他们是否应该访问受保护的资源),当身份验证部分在其他地方完成时(例如,通过 Kerberos SSO)。如果您唯一的用例是绑定,那么是的,您不需要管理员用户。

编辑:不过有一个警告 - LDAP 服务器可能对绑定有限制(例如,参见 this question),在这种情况下,无论如何您都需要拥有管理员用户。

通常您需要一个特定于应用程序的服务帐户:

  1. 执行绑定
  2. 查找用户
  3. Return 用户的群组成员资格
  4. 应用程序根据结果授权用户

这有助于管理权威后端的访问控制,因为您只需为服务帐户而不是每个单独的用户创建 ACI。它也更安全,因为您将权限授予单个帐户,从而减少 mis-configuring 单个用户权限的可能性。