복붙노트

[SPRING] Spring-Security의 기본 AuthenticationManager는 무엇입니까? 인증 방법은 무엇입니까?

SPRING

Spring-Security의 기본 AuthenticationManager는 무엇입니까? 인증 방법은 무엇입니까?

나는 다음 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의 구현이 기본적으로 어떤 용도로 사용되고 인증 (...)이 인증을 위해 (즉, 사용자 이름이 암호와 일치하는지) 확인해야하는지 알고 싶습니다.

이것에 대해 설명해 주시겠습니까?

해결법

  1. ==============================

    1.AuthenticationManager는 인증 공급자를위한 컨테이너 일 뿐이며 일관성있는 인터페이스를 제공합니다. 대부분의 경우 기본 AuthenticationManager만으로 충분하지 않습니다.

    AuthenticationManager는 인증 공급자를위한 컨테이너 일 뿐이며 일관성있는 인터페이스를 제공합니다. 대부분의 경우 기본 AuthenticationManager만으로 충분하지 않습니다.

    전화 할 때

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

    UsernamePasswordAuthenticationToken을 기본 AuthenticationProvider로 전달합니다.이 AuthenticationProvider는 userDetailsService를 사용하여 사용자 이름을 기반으로 사용자를 가져와 해당 사용자의 암호를 인증 토큰의 암호와 비교합니다.

    일반적으로 AuthenticationManager는 AuthenticationToken을 일종의 AuthenticationProviders에 전달하며, AuthenticationProvider는이를 검사하고 인증에 사용할 수있는 경우 인증 된, Unauthenticated 또는 "Could not authenticated"표시를 반환합니다 "(공급자가 토큰을 처리하는 방법을 알지 못했기 때문에 처리를 통과했습니다)

    이것은 LDAP 또는 Active Directory 서버 또는 OpenID에 대한 인증과 같은 다른 인증 스키마를 플러그인 할 수있는 메커니즘이며, Spring Security 프레임 워크의 주요 확장 점 중 하나입니다.

  2. ==============================

    2.Spring Security는 하나의 실제 AuthenticationManager 구현 만 제공합니다.

    Spring Security는 하나의 실제 AuthenticationManager 구현 만 제공합니다.

    org.springframework.security.authentication.ProviderManager
    

    이 작업은 인증 작업에 대해 다른 AuthenticationProvider를 사용합니다.

    AuthenticationManagerBeanDefinitionParser는 의 java doc 상태를 구문 분석합니다.

    ProviderManager를 작성해, 지정된 offer를 추가합니다. xml에 제공된 기능이 없으면 NullAuthenticationProvider를 추가합니다. 적어도 구성 예외를 방지하는 것만은 아닌 공급자입니다.

  3. ==============================

    3.Spring 보안 문서에서 :

    Spring 보안 문서에서 :

    ProviderManager에 대한 정보는 주제 안내서 - 스프링 보안 아키텍처 :

  4. from https://stackoverflow.com/questions/9787409/what-is-the-default-authenticationmanager-in-spring-security-how-does-it-authen by cc-by-sa and MIT license