LDAP: код ошибки 50 - анонимный доступ не разрешен: оставшееся имя 'dc = your, oc = base, dc = dn' - PullRequest
0 голосов
/ 10 октября 2019

Я выполняю аутентификацию Spring ldap с использованием приведенного ниже кода, который я получаю от github https://gist.github.com/mpilone/7582628

// Setup the LDAP client (normally done via Spring context file).
    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl("ldap://server.comp.com:123");
    contextSource.setBase("DC=AD,DC=comp,DC=COM");
    contextSource.setUserDn("readonlyuser@ad.comp.com");
    contextSource.setPassword("password1");
    contextSource.afterPropertiesSet();

    LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
    ldapTemplate.afterPropertiesSet();

    // Perform the authentication.
    Filter filter = new EqualsFilter("userid", "testuser");

    boolean authed = ldapTemplate.authenticate("dc=your,oc=base,dc=dn",
        filter.encode(),
        "user-entered-password");

    // Display the results.
    System.out.println("Authenticated: " + authed);

после выполнения приведенного выше фрагмента, я получаю следующее исключение

org.springframework.ldap.NoPermissionException: [LDAP: код ошибки 50 - анонимный доступ не разрешен!]

Но в то же время, если я ищу определенного пользователя через ldap с помощьюкод ниже

Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.PROVIDER_URL, "ldap://server.comp.com:123");
environment.put(Context.SECURITY_AUTHENTICATION, "simple");
environment.put(Context.SECURITY_PRINCIPAL, "DC=AD,DC=comp,DC=COM");
environment.put(Context.SECURITY_CREDENTIALS, "password1");
DirContext dirContext = null;
    NamingEnumeration<?> results = null;

    try {
      dirContext = new InitialDirContext(environment);

      /**
       * Retrieve the specific attributes 
       */
      SearchControls controls = new SearchControls();
      controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
      controls.setReturningAttributes(new String [] { 
          "nsRole",
                "userid",
                "objectClass",
                "givenName",
                "sn",
                "cn"
      });

      //Get entries having objectclass=person
      String filter = "(&(objectclass=person)(userid=testuser))";
      results = dirContext.search("dc=your,oc=base,dc=dn", filter, controls);

      while (results.hasMore()) {
        SearchResult searchResult = (SearchResult) results.next();
        Attributes attributes = searchResult.getAttributes();

        NamingEnumeration<? extends Attribute> attrs = attributes.getAll();

        while (attrs.hasMore()) {
          System.out.println(attrs.next());
        }
      }

Теперь мне нужно пройти проверку подлинности. Нужна помощь для решения проблемы

Спасибо

...