没有基于OU的OpenLDAP上的java身份验证会提供无效凭据

时间:2016-03-23 08:57:38

标签: java authentication ldap jndi openldap

我的范围是仅通过身份验证 的 UID =用户,DC = LDAP,DC = COM 即可。 有了这个基础,我得到以下错误 LDAPException(resultCode=49 (invalid credentials), errorMessage='invalid credentials&#39)

我可以成功使用Java应用程序对OpenLDAP进行身份验证,其基数为:{strong> uid = User,ou = People,dc = ldap,dc = com 。因此,无需编写用户所属的多个组织单位。 我还能够使用 uid = User,dc = com 在不同的环境中对ActiveDirectory进行身份验证,但不能在OpenLDAP上进行身份验证。

  • 我错过了OpenLDAP的设置吗?
  • Java中是否有可用于解决方法的内容? 我更喜欢JNDI的解决方案。

在java中,我使用JNDI和UnboundID进行测试。这些是java连接设置:

    //JNDI Connection
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, url);
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "uid=User,dc=com");
    env.put(Context.SECURITY_CREDENTIALS, password);

    //UnboundID connection
    LDAPConnection ldapConnection = new LDAPConnection(ip, 389, "dc=ldap,dc=com", pswrd);

文件 ldap.conf

BASE dc=ldap,dc=com

文件 slapd.conf

suffix      "dc=ldap,dc=com";
rootdn      "cn=Manager,dc=ldap,dc=com"

2 个答案:

答案 0 :(得分:1)

  

我错过了OpenLDAP的设置吗?

没有

  

Java中是否有可用于解决方法的内容?

没有。您必须提供完整的DN。

答案 1 :(得分:1)

您将始终需要一个完全合格的专有名称。 (除了少数exceptions with Microsoft Active Directory)。

总是最好去搜索用户(Some examples

-Jim