使用其他帐户绑定到LDAP,然后在LDAP服务器中使用密码搜索用户

时间:2017-09-28 03:16:24

标签: java ldap jaas

我有一个服务帐户,通过它我绑定LDAP连接,我使用JAAS LdapLoginModule来验证帐户。 LDAP绑定成功后,我需要使用其用户名和密码搜索或验证或搜索其他普通用户。

所以我应该如何处理,因为我没有找到任何带有用户密码的搜索查询,并且这个普通用户不允许LDAP绑定权限。我能够检索其中的所有组和用户,但我找不到密码。

3 个答案:

答案 0 :(得分:0)

LDAP目录以“正常”方式使用它作为身份验证提供程序不允许任何用户读取密码属性以避免泄漏。

通常做的是允许任何人仅对此属性进行身份验证,即:任何人都可以使用该属性来尝试绑定操作。

有两种处理你案件的方法:

  1. [不推荐]:修改访问权限以允许用户用于搜索以读取密码属性(=>创建可能的安全问题)
  2. 允许匿名连接仅绑定密码属性
  3. 编辑:回答评论中的问题:

    正如我之前所说,为了比较和/或读取(在协议的LDAP操作中)除了主帐户之外的其他用户的密码属性,您必须允许主帐户执行此操作,但不建议这样做

    如何允许它,它取决于您使用的LDAP实现(即哪个目录:OpenLDAP,AD,ApacheDS等)

    或者你允许每个人绑定目录,这是执行此操作的标准方法:

    • 使用主密码绑定
    • 搜索尝试绑定的用户的DN
    • 重新绑定用户的DN和他提供的密码:
      • 绑定OK:正确密码
      • 绑定KO:凭据无效

答案 1 :(得分:0)

你需要:

  1. 以具有搜索权限的管理员用户绑定到目录。
  2. 搜索给定您拥有的唯一属性的用户,例如,屏幕名称,电子邮件等。
  3. 尝试使用他提供的密码绑定该用户。
  4. 如果所有这些都成功,则用户属性和密码是正确的。如果不是,不是。

答案 2 :(得分:0)

如果您只想在未经授权的情况下使用JAAS进行身份验证,请不要在安全原则中使用完整的DN,只需传递如下的用户名即可。它将通过身份验证但未获得授权

Hashtable<String, Object> env = new Hashtable<String, Object>();
        env.put(Context.PROVIDER_URL, providerUrl);
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "admin");
        env.put(Context.SECURITY_CREDENTIALS, "passWord");

如果您想要授权,请使用其他方式