Аутентификация с использованием LDAP против ADAM с использованием безопасности Spring

Я пытаюсь заставить приложение Java, использующее spring -security, взаимодействовать с локальным экземпляром ADAM, который я настроил.

Я успешно установил ADAM и настроил его следующим образом ....

  • Экземпляр запущен на локальном хосте: 389
  • Корень - O = Company
    • Дочерний объект с именем OU = Company Users (orgnizationalUnit)
      • Бабушка по имени CN = Mike Q (user)
      • uid = mike и password = welcome

Затем я установил spring -security (версия 3.0.3) , spring-framework 3.0.4 и spring-ldap 1.3.0). Файл Spring

  <security:ldap-server id="contextSource" url="ldap://localhost:389/o=Company"/>

  <security:authentication-manager>
    <security:ldap-authentication-provider user-dn-pattern="uid={0},ou=Company Users"/>
  </security:authentication-manager>

  <bean class="com.xxx.test.TestAuthentication" lazy-init="false"/>

и TestAuthentication

public class TestAuthentication
{
    @Autowired
    private AuthenticationManager authenticationManager;

    public void initialise()
    {
        Authentication authentication = new UsernamePasswordAuthenticationToken( "mike", "welcome" );
        Authentication reponseAuthentication = authenticationManager.authenticate( authentication );
    }
}

Выполняя это, я получаю следующую ошибку

Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C090336, comment: AcceptSecurityContext error, data 2030, vece]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3041)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2789)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2703)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:293)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:134)
at org.springframework.ldap.core.support.LdapContextSource.getDirContextInstance(LdapContextSource.java:43)
at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:254)

Если бы кто-нибудь мог указать, где я ошибаюсь, я был бы благодарен. На этом этапе я просто хочу аутентифицировать введенного пользователя / пароль с помощью LDAP, ничего более сложного, чем это.

Меня также интересуют некоторые общие моменты, поскольку это мой первый набег на мир LDAP.

  • Учитывает ли регистр LDAP?
  • Лучше избегать пробелов?
  • Каковы общие сценарии использования / рекомендации, чтобы избежать отправки пароля в открытом виде в запросе LDAP?
6
задан Mike Q 24 September 2010 в 15:57
поделиться