使用用户名的 Java LDAP 身份验证

标签 java ldap

好吧,这让我发疯。我正在尝试使用 Java 创建 LDAP 身份验证,如果我在 SECURITY_PRINCIPAL 中使用我的名字和姓氏,一切都很好。这是我的代码:

 try {
    Hashtable<String, String> ldapEnv = new Hashtable<String, String>();
    ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    ldapEnv.put(Context.PROVIDER_URL,  "LDAP://myldap.mydomain.com:389");
    ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
    ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=FirstName LastName" + ",ou=Users");    
    ldapEnv.put(Context.SECURITY_CREDENTIALS, "password");

    DirContext ldapContext = new InitialLdapContext(ldapEnv, null);
    }
    catch (Exception e) {
      System.out.println(" bind error: " + e);
      e.printStackTrace();
   }

问题是它不适用于我的用户名。如果我尝试:

ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=myusername" + ",ou=Users");

或者

ldapEnv.put(Context.SECURITY_PRINCIPAL, "uid=myusername" + ",ou=Users");

我总是得到 [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1]

出于某种原因,这似乎只适用于我的名字和姓氏。我检查了广告,我的 sAMAccountName 是我正确的用户名。不知道为什么会这样。其他人有这样的问题吗?我可以将其他内容传递给 Context.SECURITY_PRINCIPAL 吗?我尝试了 ldapEnv.put(Context.SECURITY_PRINCIPAL, "sAMAccountName=myusername"+ ",ou=Users"); 但它也失败了......有人可以帮忙吗?

最佳答案

EJP,感谢您的投入。你确实是对的,但我正在寻找一些简单的东西——只需将用户名和密码传递给 AD,看看它是否通过身份验证。我应该在我的第一篇文章中更具体一些。你的建议会奏效,但我认为这要简单得多:

            Hashtable props = new Hashtable();
            String principalName = "username@mydomain.com";
            props.put(Context.SECURITY_PRINCIPAL, principalName);
            props.put(Context.SECURITY_CREDENTIALS, "mypassword");
            DirContext context;

                //try to authenticate
            try {

                   context = com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance("LDAP://myldap.mydomain.com:389" + '/', props);
                   context.close();                    
            }

这样我就不用关心 DN 了。只需传递 username@domain 和瞧 - 就像一个魅力 :) 再次感谢!

关于使用用户名的 Java LDAP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349256/

相关文章:

java - 使用indexOf从网站获取信息

c# - NullReferenceException ldapConnection.Connect

java - 语音转文本 api 其他语言 android

java - 尝试使用 Selenium 3.4 时 Eclipse 中的 Maven 问题

java - Android 中的空指针

java - 如何分离 App Engine Eclipse 项目和 GWT Eclipse 项目?

c# - 如何检查用户是否存在于 LDAP 上

objective-c - LDAP 身份验证,ldap_sasl_bind_s 不工作但 ldap_simple_bind_s 工作

java - Active Directory 组成员

java - 在 LDAP 查询中是否可以加入?