验证用户名密码java ldap jndi

时间:2014-04-13 16:25:18

标签: java ldap jndi

我已经尝试找出一种简单的方法来验证使用username的{​​{1}}和password,之后我已经使用绑定连接到LDAP(绑定DN和密码)。我在LDAP中手动添加了一个用户,我想用java检查验证用户的凭据(用户名和密码)。

这是一种简单明了的方法吗?

下面的代码我到目前为止使用绑定(可以正常工作)连接到LDAP。

Java (JNDI)

2 个答案:

答案 0 :(得分:1)

基本思想是以管理员身份绑定到LDAP以查找用户,然后使用提供的密码重新绑定为该用户。如果两者都成功,则用户存在且具有该密码。

与您可能阅读的其他答案相反,您不应尝试自己比较密码。在正确设置的LDAP服务器中,密码将被哈希处理,因此您必须自己重现哈希算法等等。这是毫无意义且容易出错的,并且每个密码可以有不同的算法。让服务器进行比较。

答案 1 :(得分:0)

从概念上讲,您有两种选择:

  • 与"技术"绑定用户,然后搜索用户并将其存储的密码与提供的密码进行比较
  • 使用用户和密码实际绑定到LDAP

在大多数情况下,第二种方法更可取,因为它更简单并且需要的代码更少。通常,用户密码甚至不能作为LDAP属性使用(例如,如果您通过LDAP访问MS Active Directory)。

正如@EJP暗示的那样,对于第二种方法,可能需要或可能不需要以管理员身份绑定。如果您的用户群较小,那么他们很可能会在LDAP树的同一分支上(例如uid=<user>,ou=users,dc=company,dc=com)。这意味着您确切地知道用于绑定的DN,因为您只需要在一致的位置注入相应的用户名。但是,如果您拥有庞大的用户群,则可能会将用户分布在多个OU中。然后,您需要先以管理员身份绑定并搜索用户(即搜索他的DN)。

相关问题