Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么LDAP身份验证例程通常使用两个绑定?_Java_Spring_Ldap_Openldap_Spring Ldap - Fatal编程技术网

Java 为什么LDAP身份验证例程通常使用两个绑定?

Java 为什么LDAP身份验证例程通常使用两个绑定?,java,spring,ldap,openldap,spring-ldap,Java,Spring,Ldap,Openldap,Spring Ldap,我正在使用SpringLDAP,我看到每个人都在使用两个绑定。第一个绑定作为服务帐户,第二个绑定作为给定密码的用户。但我看到,即使没有第一次绑定,也可以根据ldap中的密码执行用户验证 有人能解释一下为什么我们在ldap中遵循两个绑定吗?使用服务帐户进行第一次绑定的意义是什么?有多种方法可以对LDAP进行身份验证。 您可以通过获取用户密码并在软件中进行匹配(一个绑定)来实现,也可以通过使用用户凭据绑定LDAP(两个绑定)来实现 这两种绑定方式的工作原理如下: 1) 获取用户名并在LDAP中搜索(

我正在使用SpringLDAP,我看到每个人都在使用两个绑定。第一个绑定作为服务帐户,第二个绑定作为给定密码的用户。但我看到,即使没有第一次绑定,也可以根据ldap中的密码执行用户验证


有人能解释一下为什么我们在ldap中遵循两个绑定吗?使用服务帐户进行第一次绑定的意义是什么?

有多种方法可以对LDAP进行身份验证。 您可以通过获取用户密码并在软件中进行匹配(一个绑定)来实现,也可以通过使用用户凭据绑定LDAP(两个绑定)来实现

这两种绑定方式的工作原理如下:

1) 获取用户名并在LDAP中搜索(使用服务帐户绑定1) 2) 使用密码进行身份验证(使用用户帐户绑定2)

问候


Shelltux

对于LDAP中的身份验证,您需要有DN和密码

通常,2个绑定的原因是您没有DN-用户名不一定是DN的一部分。因此,您必须使用服务帐户通过某些属性来查找用户(DN),例如“mail={mail}”,然后通过进行另一个绑定来验证找到的DN的密码

可以在两种情况下使用单个绑定:

  • 您可以在不进行搜索的情况下确定DN,例如,如果登录时使用uid+密码,“uid”是DN的一部分,并且LDAP层次结构对于所有用户都是扁平的,例如,“uid={uid},ou=users,…”
  • 您不通过绑定执行密码检查,而是通过服务帐户获取密码散列并自己比较散列

  • 一个绑定是“PasswordComparisonAuthenticator”,两个绑定是“BindAuthenticator”,我不会在应用程序中比较哈希,因为这意味着您需要一个特权帐户来查找密码。通常,密码属性只能由tge用户本身和LDAP中的管理员帐户读取。因此,您只能通过在应用程序中使用管理员帐户绑定并搜索用户来读取密码属性。因此,读取LDAP中的所有密码并破解它们会带来风险。我总是使用2路转弯,因为这是最安全的方式。