ОШИБКА LDAP JAVA javax.naming.NamingException: [LDAP: код ошибки 1 - 000004DC: LdapErr: DSID-0C09075A - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть код C # для подключения к серверу LDAP, и он прекрасно работает

Рабочий код C # приведен ниже

        user = "myname@myorg.com";
        string pwd = "secret";

        String uid = "uid=" + user + ",ou=people,dc=myorg,dc=com";
        int empID = 0;
        DirectoryEntry root = new DirectoryEntry("LDAP://myorg.com", user, pwd, AuthenticationTypes.None);
        try
        {
            object connected = root.NativeObject;

            DirectorySearcher search = new DirectorySearcher(root);

            search.Filter = "(&(objectClass=user)(objectCategory=Person))";

            search.PropertiesToLoad.Add("SAMAccountName");
            search.PropertiesToLoad.Add("EmployeeID");

            foreach (System.DirectoryServices.SearchResult resEnt in search.FindAll())
            {
                System.DirectoryServices.DirectoryEntry de = resEnt.GetDirectoryEntry();

                if (de.Properties["employeeID"].Value != null && de.Properties["userPrincipalName"].Value != null)
                {
                    if (user.Equals(de.Properties["userPrincipalName"].Value))
                    {
                        string empIDstr = (string)de.Properties["employeeID"].Value;

                        int.TryParse(empIDstr, out empID);
                        Response.Write("EMp ID is No is "+empID);
                    }

                }
            }
        }
        catch(Exception ex)
        {
            Response.Write("Logon failed");
        }

Теперь я пытаюсь сделать то же самое вJava, поскольку у меня есть другое приложение для разработки на Java, но следующий код выдает исключение

public class LdapClient {


    public void authenticate(String user, String pwd){

        String uid = "uid=" + user + ",ou=people,dc=myorg,dc=com";

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://myorg.com");
        env.put(Context.SECURITY_AUTHENTICATION, "none");
        env.put(Context.SECURITY_PRINCIPAL, uid);
        env.put(Context.SECURITY_CREDENTIALS, pwd);

        try {
            DirContext ctx = new InitialDirContext(env);

            **//THE ERROR COMES AT THE LINE BELOW**
            NamingEnumeration<?> namingEnum = ctx.search("ou=people,dc=myorg,dc=com", "(&(objectclass=user)(objectCategory=Person))", getSimpleSearchControls());
            **strong text**
            while (namingEnum.hasMore ()) {
                SearchResult result = (SearchResult) namingEnum.next ();    
                Attributes attrs = result.getAttributes ();
                System.out.println(attrs.get("cn"));

            } 
            namingEnum.close();
        } catch (Exception e) {
            try {
                e.printStackTrace();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }

    private SearchControls getSimpleSearchControls() {
        SearchControls searchControls = new SearchControls();
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        String[] attrIDs = {"samAccountName","employeeID"};
        searchControls.setReturningAttributes(attrIDs);
        return searchControls;
    }

}

ПОЖАЛУЙСТА, ПОМОГИТЕ, поскольку я считаю, что соответствующий код работает в C #

javax.naming.NamingException: [LDAP: error code 1 - 000004DC: LdapErr: DSID-0C09075A, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db1 ]; remaining name 'ou=people,dc=myorg,dc=com'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.searchAux(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_search(Unknown Source)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
    at javax.naming.directory.InitialDirContext.search(Unknown Source)
    at ldap.LdapClient.authenticate(LdapClient.java:51)
    at ldap.LdapClient.main(LdapClient.java:30)

Я должен сделатьэто в Java, так как мне нужно разработать другое приложение, указывающее на тот же сервер LDAP.Клиент должен быть Java.ПОЖАЛУЙСТА, ПОМОГИТЕ

1 Ответ

0 голосов
/ 28 декабря 2018

Исключения говорят, что перед выполнением операции (поиска) требуется аутентификация (привязка).Как показано в документации , попробуйте использовать simple аутентификацию

// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...