Подтвердить что ты не робот

Что такое AuthenticationManager по умолчанию в Spring -Security? Как он аутентифицируется?

У меня есть следующий bean:

<sec:authentication-manager alias="authenticationManager">
    <sec:authentication-provider
        user-service-ref="userDetailsService" />
</sec:authentication-manager>

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

В моем коде Java я:

@Resource(name = "authenticationManager")
private AuthenticationManager authenticationManager; // specific for Spring Security

public boolean login(String username, String password) {
    try {
        Authentication authenticate = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
        if (authenticate.isAuthenticated()) {
            SecurityContextHolder.getContext().setAuthentication(authenticate);             
            return true;
        }
    }
    catch (AuthenticationException e) {         
    }
    return false;
}

Здесь вызывается AuthenticationManager.authenticate(...). Но я хотел бы знать, какая реализация AuthenticationManager Spring используется по умолчанию и что ее authenticate(...) делает для аутентификации (то есть убедитесь, что имя пользователя соответствует паролю).

Не могли бы вы объяснить это?

4b9b3361

Ответ 1

AuthenticationManager на самом деле является просто контейнером для поставщиков аутентификации, предоставляя им согласованный интерфейс. В большинстве случаев значение по умолчанию AuthenticationManager более чем достаточно.

Когда вы вызываете

.authenticate(new UsernamePasswordAuthenticationToken(username, password))`

он передает UsernamePasswordAuthenticationToken по умолчанию AuthenticationProvider, который будет использовать userDetailsService, чтобы получить пользователя на основе имени пользователя и сравнить этот пароль пользователя с идентификатором в токене аутентификации.

В общем случае AuthenticationManager передает какой-либо AuthenticationToken каждому из них AuthenticationProviders, и каждый из них проверяет его, и, если они могут использовать его для аутентификации, они возвращаются с указанием "Authenticated", "Неаутентифицированный" или "Не удалось аутентифицировать" (что указывает, что поставщик не знал, как обращаться с токеном, поэтому он передал его обработку).

Это механизм, который позволяет подключать другие схемы аутентификации, такие как аутентификация с сервером LDAP или Active Directory или OpenID, и является одной из основных точек расширения в рамках Spring Security.

Ответ 2

Spring Безопасность обеспечивает только одну реальную реализацию AuthenticationManager:

org.springframework.security.authentication.ProviderManager

Для задач аутентификации используется AuthenticationProvider другой AuthenticationProvider

AuthenticationManagerBeanDefinitionParser отвечает за синтаксический анализ <sec:authentication-manager> его состояний java doc:

Регистрирует центральный ProviderManager, используемый пространством имен конфигурации и позволяет конфигурировать псевдоним, позволяющий пользователи ссылаются на него в своем beans и четко видят, где имя отсюда.

Создает ProviderManager и добавляет указанные параметры. Если в xml не указано ни одного параметра, он добавляет NullAuthenticationProvider. Это, по крайней мере, провайдер, который отмечает, чем предотвращение конфигурационных исключений.