programing

Spring-Security의 기본 AuthenticationManager는 무엇입니까?

nasanasas 2020. 12. 30. 08:16
반응형

Spring-Security의 기본 AuthenticationManager는 무엇입니까? 어떻게 인증합니까?


다음 빈이 정의되어 있습니다.

<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(...)인증을 위해 무엇 을하는지 알고 싶습니다 (즉, 사용자 이름이 암호와 일치하는지 확인).

설명해 주시겠습니까?


이는 AuthenticationManager인증 공급자를위한 컨테이너 일 뿐이며 모두에게 일관된 인터페이스를 제공합니다. 에서는 대부분의 경우, 기본은 AuthenticationManager충분한 이상입니다.

전화 할 때

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

UsernamePasswordAuthenticationTokendefault 로 전달합니다. AuthenticationProvider사용하여 userDetailsService사용자 이름을 기반으로 사용자를 가져오고 해당 사용자의 비밀번호를 인증 토큰의 비밀번호와 비교합니다.

일반적으로 각각에 대해 AuthenticationManager일종의 패스 AuthenticationToken를 수행하고 각각 AuthenticationProviders검사하고 인증에 사용할 수있는 경우 "Authenticated", "Unauthenticated"또는 "Could not authenticate"(이 공급자가 토큰을 처리하는 방법을 몰랐으므로 처리시 전달되었음을 나타냅니다.)

이것은 LDAP 또는 Active Directory 서버 또는 OpenID에 대한 인증과 같은 다른 인증 체계를 연결할 수 있도록하는 메커니즘이며 Spring Security 프레임 워크 내의 주요 확장 점 중 하나입니다.


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

org.springframework.security.authentication.ProviderManager

이것은 AuthenticationProvider인증 작업에 다른 것을 사용 합니다.

AuthenticationManagerBeanDefinitionParser구문 분석 할 책임이 <sec:authentication-manager>자사의 자바 문서 상태를 :

네임 스페이스 구성에서 사용하는 중앙 ProviderManager를 등록하고 별칭 구성을 허용하여 사용자가 자신의 Bean에서 참조하고 이름의 출처를 명확하게 볼 수 있도록합니다.

ProviderManager지정된 제공을 작성 하고 추가합니다. xml에 제공이 지정되지 않은 경우 NullAuthenticationProvider. 이것은 최소한 구성 예외를 방지하는 것보다 주목하는 공급자입니다.


에서 봄 보안 문서 도구 :

Spring Security의 기본 구현은 ProviderManager 라고 하며 인증 요청 자체를 처리하는 대신 구성된 AuthenticationProvider 목록에 위임하며 , 각 목록은 인증 을 수행 할 수 있는지 확인하기 위해 차례로 쿼리됩니다. 각 공급자는 예외를 발생 시키거나 완전히 채워진 인증 개체를 반환 합니다.

ProviderManager 에 대한 정보 Topical Guide-Spring Security Architecture 에서도 찾을 수 있습니다 .

가장 일반적으로 사용되는 구현 의 AuthenticationManager는 이다 의 ProviderManager 의 쇄에있는 델리게이트 의 AuthenticationProvider의 인스턴스. 의 AuthenticationProvider는 같은 비트입니다 AuthenticationManager에 있지만, 그것은 주어진 지원하는 경우 쿼리에 대한 호출을 허용하는 별도의 방법이 인증 유형을 ...

참조 URL : https://stackoverflow.com/questions/9787409/what-is-the-default-authenticationmanager-in-spring-security-how-does-it-authen

반응형