2011-01-25 5 views
4

Я прочитал весну LDAP reference docs и не смог выяснить, автоматизирована ли аутентификация пользователя на сервере LDAP или нет.Проверка подлинности LDAP (автоматическая или нет?)

Под «автоматическим» я подразумеваю, что это происходит автоматически при создании экземпляра bean, если вы предоставите userDn и пароль в своем ContextSource. То есть программисту никогда не нужно звонить LdapTemplate.authenticate(...) - это происходит «за кадром».

Так что я хотел бы знать,

  1. Если аутентификация Spring LDAP автоматически
  2. Если есть поля, я могу установить, чтобы изменить это поведение

Спасибо,
KTM


EDIT: задаю этот вопрос в контексте некоторого кода, который я написал. Следующие ContextSource являются одним из источников контекста в моем файле beans, который пользователь может использовать. Он используется для настройки userDn и пароля во время выполнения (по соображениям безопасности). Я хочу знать, действительно ли приложение LDAP будет использовать userDn/password, который я собираю во время выполнения при аутентификации. (Предшествующая ли аутентификация выполнения моего кода? Игнорировать ли в userDn/пароль поле, конфигурирует мой код?)

public class RuntimeContext extends LdapContextSource { 

    public RuntimeContext() { 
     super(); 
     if (!resolveAuthInfo()) { 
      System.out.println("Failed to resolve auth info. Exiting..."); 
      System.exit(1); 
     } 
    } 

    public boolean resolveAuthInfo() 
    { 
     String myUserDn, myPassword; 
     try { 
      BufferedReader br = new BufferedReader(
        new InputStreamReader(System.in)); 
      System.out.print("userDn: "); 
      myUserDn = br.readLine(); 
      System.out.print("password: "); 
      myPassword = br.readLine(); 
     } catch (IOException e) { 
      return false; 
     } 
     super.setUserDn(myUserDn); 
     super.setPassword(myPassword); 
     return true; 
    } 
} 
+0

добавил некоторый соответствующий исходный код – ktm5124

+0

Я считаю, что он работает ... Я пробовал следующий тест: удалить свойство url из файла beans и вместо этого установить url (с вызовом setUrl) в приведенном выше методе resolAuthInfo. Приложение все еще работает и делает запрос успешно. Конечно, без вызова setUrl это не сработает. Таким образом, вышеприведенный код что-то делает. – ktm5124

ответ

1

Я хочу знать, будет ли приложение LDAP на самом деле использовать userDn/пароль, который я собираю во время выполнения при аутентификации.

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ldap.html

Он будет использовать userDn и пароль, которые вы собираете во время выполнения. Исходя из того, как вы настраиваете ваши бобы, аутентификация LDAP будет использовать один из двух путей весной:

  1. Bind аутентификации (с использованием BindAuthenticator)
  2. Пароль Сравнение (используя PasswordComparisonAuthenticator)

Эти Аутентификаторы называются в контексте LdapAuthenticationProvider, который может быть сконфигурирован как аутентификатор в конфигурации пространства имен безопасности:

<authentication-manager alias="authenticationManager"> 
    <authentication-provider user-service-ref="usernamePasswordUserDetailsService"> 
     <password-encoder ref="passwordEncoder"> 
      <salt-source ref="saltSource"/> 
     </password-encoder> 
    </authentication-provider> 
    <authentication-provider ref="ldapAuthenticationProvider"/> 
</authentication-manager> 

Когда UsernamePasswordAuthenticationFilter вызывается (через страницу/аутентификации/авторизации):

<http auto-config="true"> 
    <form-login login-page="/auth/login" 
       login-processing-url="/auth/j_security_check"/> 
    <logout invalidate-session="true" logout-url="/auth/logout"/> 
</http> 

маркер создается с именем пользователя и паролем. LdapAuthenticationProvider отвечает этому типу лексемы:

public class LdapAuthenticationProvider implements AuthenticationProvider, MessageSourceAware { 

    ... 

    public boolean supports(Class<?> authentication) { 
     return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication)); 
    } 
} 

и использует информацию, хранящуюся в LdapContextSource сделать проверку подлинности.