LDAP: пустой binddn “” и тип аутентификации становится простым из ничего - PullRequest
0 голосов
/ 12 июня 2019

Я Разрабатываю приложение в Spring MVC и JPA с Spring Security. Теперь интеграция OUD (Oracle Unified Directory) через LDAP. При аутентификации пользователя ответ от LDAP в файле журнала OUD равен

CONNECT conn = 909681 от ******* к *******: протокол 1636 = LDAPS

Bind REQ conn = 909681 op = 0 msgID = 1 тип = SIMPLE dn = "" версия = 3

BindRES conn = 909681 op = 0 msgID = 1 результат = 1 сообщение = "Каталог серверу не удалось найти сетевую группу для привязки dn "", потому что подключение клиента не соответствует критериям подключения для любого сетевые группы. "

DISCONNECT conn = 909681 reason = "Отключение клиента"

Отображение между приложением и LDAP в файле security.xml

<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="ldaps://192.168.0.182:1636/o=company"/>
    <property name="userDn" value="cn=userid,ou=groups,o=company"/>
    <property name="password" value="password"/>
</bean>

<bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider" >
     <constructor-arg>
          <bean class="in.web.service.impl.CustomLdapBindAuthenticator">
               <constructor-arg ref="contextSource"/>
               <property name="userDnPatterns">
                   <list>
                       <value>cn={0},ou=groups</value>
                   </list>
               </property>
           </bean>
     </constructor-arg>
     <constructor-arg>
           <bean class="in.web.service.impl.CustomLdapUserAuthoritiesPopulator">
           </bean>
     </constructor-arg>     
 </bean>

Код в CustomLdapBindAuthenticator

public LdapUserDetails search(String cn) throws Exception {
        Hashtable env = new Hashtable();
        String sp = "com.sun.jndi.ldap.LdapCtxFactory";
        env.put(Context.INITIAL_CONTEXT_FACTORY, sp);

        String [] urls = contextSource.getUrls();
        for(String url: urls){
            System.out.println("ldapurls="+url);
        }
        env.put(Context.PROVIDER_URL, urls[0]);

        DirContext dctx = new InitialDirContext(env);

        String base = "ou=groups,o=company";
        System.out.println("BASE DN="+base);

        SearchControls sc = new SearchControls();
        String[] attributeFilter = {"cn", "fullName", "mail", "l", "mobile"};
        sc.setReturningAttributes(attributeFilter);
        sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

        String filter = "(&(cn="+cn+")(objectClass=*))";

        NamingEnumeration results = dctx.search(base, filter, sc);
        LdapUserDetails user = new LdapUserDetails();
        while (results.hasMore()) {
            SearchResult sr = (SearchResult) results.next();
            Attributes attrs = sr.getAttributes();

            user.setCn(getAttribute(attrs, "cn"));
            user.setFullName(getAttribute(attrs, "fullName"));
            user.setMail(getAttribute(attrs, "mail"));
            user.setMobile(getAttribute(attrs, "mobile"));
            user.setLocation(getAttribute(attrs, "l")); 
        }
        dctx.close();
        return user;
        }

Pl. Помогите мне решить вопросы

  1. Я не упомянул аутентификацию как простую. Откуда я получаю type = simple в лог-файле
  2. Почему я получаю дн = "" Заранее спасибо

1 Ответ

1 голос
/ 12 июня 2019

Похоже, что нет сетевой группы , которая позволила бы вашему исходному IP получить доступ к каталогу.Поскольку нет соответствующей сетевой группы, вы видите нулевое DN в строке ошибки.Существует два способа управления сетевыми группами:

ODSM Web Mgmt GUI: вкладка «Конфигурация», общая конфигурация => сетевая группа

LDAP в каталог конфигурации (порт по умолчанию 4444): cn =сетевые группы, cn = config

Кроме того, и это может быть проблемой, возникшей, когда вы удалили личную информацию, идентификатор не будет cn = идентификатор пользователя, o = компания, ou = groups, но cn = идентификатор пользователя,ou = groups, o = company (и только в том случае, если пользователь находится в OU с именем groups . Обычно я вижу group объекты в OU с именами групп и объекты пользователя в OU с именемчто-то вроде пользователи или сотрудники или люди .)

ETA: Simple - это механизм аутентификации по умолчанию, используемый в Spring LDAP.Вам нужно установить DirContextAuthenticationStrategy для использования другого механизма.

...