Java ldap 身份验证问题

标签 java authentication active-directory ldap jndi

我试图让我的自定义 Java 应用程序使用我们的 Active Directory 服务器进行身份验证,但由于某种原因我无法让它工作。谁能看出这是为什么?下面是我的方法:

private boolean authenticate(String serverName, String userId, String password) throws NamingException {
    DirContext ctx = null;
    Hashtable env = new Hashtable(11);
    boolean b = false;
    try {
        env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://servername.org:389");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "uid="+ userId +",ou=All Users,dc=site,dc=org");
        env.put(Context.SECURITY_CREDENTIALS, password);
        System.out.println("before context");
        // If there isn't a naming exception then the user is authenticated. Return true
        ctx = new InitialDirContext(env);
        //The user is authenticated.
        b = true;
    } catch (NamingException e) {
        System.out.println("the user is not authenticated return false");
        b = false;
    }finally{
        if(ctx != null)
            ctx.close();
    }
    return b;
}

结果:

[12/14/11 16:27:47:746 CST] 0000001f SystemErr     R
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e, vece

最佳答案

你试过这种方法吗?

//...
env.put(Context.SECURITY_PRINCIPAL, "cn="+ userId +",ou=All Users,dc=site,dc=org");
//...

也替换

Hashtable env = new Hashtable(11);

Hashtable env = new Hashtable();

关于Java ldap 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512258/

相关文章:

java - 如何知道二进制文件的字节数?

java - 如何验证数千个 PDF 文件中的文本/内容

java - 为什么 Hibernate 5 不尊重我的 @Column 名称?

c# - 如何使用 C# WEB API(基于 token ).net core 对 Azure AD 应用程序进行身份验证和授权

authentication - 如何在 Tomcat 5.5.x 中向经过身份验证的用户授予访问权限?

powershell - DirectoryServices 过滤器和方法

java - 多个继承类,它们必须在单独的文件中吗?

Facebook SDK 3.1.1 iOS 6 在设备设置中注销,返回应用程序和 HTTP 状态代码 : 400 error

asp.net - 除非浏览器完全关闭,否则应用程序不会注销 ASP.NET – VB

javascript - POST 调用以对前端应用程序的用户进行身份验证