Spring LDAP-аутентификация (автоматическая или нет?) - PullRequest
5 голосов
/ 25 января 2011

Я прочитал справочную документацию по Spring LDAP и не смог выяснить, автоматизирована ли аутентификация пользователя на сервере LDAP или нет.

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

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

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

Спасибо
КТМ


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

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;
    }
}

1 Ответ

1 голос
/ 28 июня 2011

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

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

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

  1. Аутентификация с привязкой (с использованием 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(через страницу / auth / login):

<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 для аутентификации.

...