Java LDAP密码认证

4
以下搜索条件似乎会在用户仅存在于活动目录中时返回匹配:
NamingEnumeration<SearchResult> ne = dirContext.search(
                        baseDN,
                        userObjectQuery,
                        new String[] { userName },
                        SearchControls)

userObjectQuery类似于userObjectQuery=(&(sAMAccountName=%u)(objectclass=user))

这里的%u将被用户名替换。

如何确保用户密码也匹配,然后才返回true?

1个回答

4

一旦您使用搜索代码找到用户,您可以使用getNameInNamespace()获取用户的完整DN。

然后,您可以使用完整的DN和密码进行绑定以进行身份验证。


不绑定用户,是否无法验证用户的密码?例如,我们希望将具有绑定能力的用户作为特殊组来进行身份验证,以便认证其他权限较低的用户。 - JavaRookie
我有一个用户密码的副本,只想确保它与 AD 服务器上的密码匹配。因此,我想使用我拥有的用户名获取 AD 密码,然后将其与本地副本进行比较。是否可以使用dirContextSearch实现这一点,还是需要其他调用? - JavaRookie
3
设计得很差的LDAP服务器会让你“获取”用户密码。任何可以绑定的人都可以获取所有密码。许多LDAP实现对密码进行单向哈希处理,所以它们甚至不会保留密码。绑定是我知道的唯一身份验证方式。 - karoberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接