Java 程序无法针对 ldap 进行身份验证

标签 java ldap

我写了一个小程序来验证 ldap。

import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;

class SAuth {
    public static void main(String[] args) {

    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
        "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:yyyy/");

    // Authenticate as S. User and password "mysecret"
    env.put(Context.SECURITY_AUTHENTICATION, "username");
    env.put(Context.SECURITY_PRINCIPAL, "cn=orcladmin");
    env.put(Context.SECURITY_CREDENTIALS, "password");

    try {

        DirContext ctx = new InitialDirContext(env);
            System.out.println(" i guess the connection is sucessfull :)");

        // Do something useful with ctx 

        // Close the context when we're done
        ctx.close();
    } catch (NamingException e) {
        e.printStackTrace();
    }

}

我收到以下错误:

javax.naming.AuthenticationNotSupportedException: orcladmin
        at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:100)
        at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:214)
        at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2658)
        at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:287)
        at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)

        at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193
)
        at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.ja
va:136)
        at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav
a:66)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
67)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288
)
        at javax.naming.InitialContext.init(InitialContext.java:223)
        at javax.naming.InitialContext.<init>(InitialContext.java:197)
        at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav
a:82)
        at Simple.main(Simple.java:28)

但是,如果我尝试使用 ldap cmd 行和相同的用户凭据访问 ldap 目录,它会顺利运行。 例如:

ldapsearch -p <port> -h <ip> -D "cn=orcladmin" -w "password"  objectClass=*

返回相关数据。 我猜 java 程序有问题,但不知道是什么。

最佳答案

尝试改变

env.put(Context.SECURITY_AUTHENTICATION, "username");

env.put(Context.SECURITY_AUTHENTICATION, "simple");

关于Java 程序无法针对 ldap 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657118/

相关文章:

php - 使用 HTACCESS 进行 LDAP 身份验证(Windows 上的 Apache 2.4)

java - 具有未定义字段数的 Morphia 更新文档

java - 热部署 Java EAR 以最小化或消除服务器上应用程序的停机时间?

java - 选择每个 Maven 项目的配置文件

java - Gradle 4.10.2 需要 Java 7 或更高版本才能运行。从命令行运行 gradle 时您当前正在使用 Java 6

active-directory - Adobe AIR 应用程序能否实现针对 Active Directory 的 SSO 身份验证?

Java LDAP 密码验证

Java 将类变量设置回默认值

java - 使用 JAVA 向 LDAP 中的现有用户添加属性

c# - 获取 OU 的完全限定名称