使用用户名和密码进行Java LDAP身份验证

19

我有一段能够通过dn和密码来验证用户的可运行代码片段。我的要求是,用户将输入他的用户名(sAMAccountName),而我希望使用sAMAccountName和密码进行身份验证。如何修改此代码以实现此目的?

    String userName = "John P R-Asst General Manager";
    String passWord = "asdfgh123";
    String base ="OU=SOU,DC=example,DC=com";
    String dn = "cn=" + userName + "," + base;

    String ldapURL = "ldap://mdsdc3.example.com:389";
    authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    authEnv.put(Context.PROVIDER_URL, ldapURL);
    authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
    authEnv.put(Context.SECURITY_PRINCIPAL, dn);
    authEnv.put(Context.SECURITY_CREDENTIALS, password);

    try {
        DirContext authContext = new InitialDirContext(authEnv);
        return true;

    } catch (NamingException namEx) {
        return false;
    }
2个回答

45

我希望这能帮到大家。

你不需要使用CN、DN等用户层级。

只需传递域\用户和密码即可登录。

我的代码如下所示,已经正常工作:

try
    {
        // Set up the environment for creating the initial context
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://ldap_server:389");
        // 
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "domain\\user"); //we have 2 \\ because it's a escape char
        env.put(Context.SECURITY_CREDENTIALS, "test");

        // Create the initial context

        DirContext ctx = new InitialDirContext(env);
        boolean result = ctx != null;

        if(ctx != null)
            ctx.close();

        return result;
    }
    catch (Exception e)
    {           
        return false;
    }

我在尝试从LDAP服务器获取信息时遇到了很多问题,主要是因为我不熟悉CD、CN、OU等术语。我应该请求哪些数据才能进行身份验证并从LDAP获取用户数据呢?他们已经向我发送了管理员数据,并且我已经成功创建了上下文,但之后我需要根据“用户名”获取用户信息,有人可以帮助我吗? - Francisco Souza

2

您可以尝试像这样完成Context.PROVIDER_URL

String ldapURL = "ldap://mdsdc3.example.com:389/DC=example,DC=com";

我认为最好使用GSSAPI,也许你可以在这里查看学习


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