SpringSecurity Architecture

  • 스프링 보안 인증 프로세스에 관련된 클래스 및 필터 목록 을 시연하기 위한 다이어그램

1. HttpRequest 수신

  • 스프링 시큐리티는 일련의 필터를 갖고 있다.
  • 따라서 요청이 오면 인증과 인가를 위한 필터 체인을 거치게 된다.
  • 사용자 인증 요청이 있는 경우, 인증 메커니즘/모델에 기반한 관련 인증 필터를 찾을 때까지 필터 체인을 거치게 된다.

HTTP 기본 인증 요청은 BasicAuthenticationFilter에 도달할 때까지 필터체인을 거친다.

ex)

  • HTTP 다이제스트 인증 요청DigestAuthenticationFilter에 도달할 때까지 필터 체인을 통과한다.
  • 로그인 양식 제출 요청(로그인 양식 인증 요청)이 UsernamePasswordAuthenticationFilter에 도달할 때까지 필터체인을 거친다.
  • X509 인증 요청이 X509AuthenticationFilter에 도달할 때까지 필터 체인을 통과한다.

2. 사용자 자격증명 기반 AuthenticationToken 생성

  • 관련 AuthenticationFilter에서 인증 요청을 받으면 수신된 요청에서 사용자 이름과 암호를 추출한다. (인증 메커니즘의 대부분은 사용자 이름과 암호를 요구한다.)
  • 그 후 추출된 사용자 자격 증명 기반으로 인증 객체를 생성한다.
  • 추출된 자격증명이 사용자 이름과 암호인 경우 UsernamePasswordAuthenticationToken은 사용자 이름과 비밀번호를 추출/발견하여 생성된다.

3. AuthenticationManager에게 위임하기 위한 AuthenticationToken생성

  • UsernamePasswordAuthenticationToken객체를 생성한 후에 AuthenticationManagerauthenticate 메서드를 호출하기 위해 사용된다.
  • AuthenticationManager는 단지 인터페이스이며 실제 구현체는 ProviderManager이다.
  • ProviderManager는 사용자 요청을 인증하는데 사용하기 위해 AuthenticationProvider를 설정하기 위한 목록을 갖고 있다.
  • ProviderManager는 제공된 각 AuthenticationProvider를 검토하고 전달된 Authentication 객체를 기반으로 사용자 인증을 시도한다. (UsernamePasswordAuthenticationToken)

4. AuthenticationProvider 목록으로 인증 시도

  • AuthenticationProvider는 제공된 인증 객체로 사용자 인증을 시도한다.
  • 프레임워크와 함께 제공되는 기존 Authentication Provider 중 일부
    1. CasAuthenticationProvider
    2. JaasAuthenticationProvider
    3. DaoAuthenticationProvider
    4. OpenIDAuthenticationProvider
    5. RememberMeAuthenticationProvider
    6. LdapAuthenticationProvider

5. UserDetailsService가 필요한가 ?

  • 일부 AuthenticationProvider는 사용자 이름 기반으로 사용자 세부 정보를 검색하기 위하여 UserDetailsService를 사용할 수 있다. (DaoAuthenticationProvider)

6 ~ 7. UserDetails와 User

  • UserDetailsService는 username 기반으로 UserDetail (실제 구현은 User)를 검색한다.

8. Authentication 과 AuthenticationException

  • 사용자가 인증에 성공하면 완전히 채워진 Authentication 객체가 반환된다.
  • 그렇지 않은 경우 AuthenticationException가 발생한다.
  • AuthenticationProvider 인터페이스에 따르면, 성공적으로 인증하는 경우 AuthenticationProvider는 완전히 채워진 인증 객체를 정확히 반환하거나, 예외 발생 시 AuthenticationProvider 예외를 던진다.
  • Fully populated Authentication Object란
    • authenticated - true
    • grant authorities list
    • user credentials (username only)
  • AuthenticationException가 예외 발생하는 경우, 인증 메커니즘을 지원하는 AuthenticationEntryPoint에 의해 처리된다.

9. Authentication 완료

  • AuthenticationManager는 획득한 Fully populated Authentication객체를 관련 AuthenticationFilter로 반환한다.

10. SecurityContext에서 Authentication 객체를 설정

  • 관련된 AuthenticationFilter가 획득한 Authentication 객체를 향후 필터 사용을 위하여 SecurityContext에 저장한다. (Authorization Filters를 위해 사용)
SecurityContextHolder.getContext().setAuthentication(authentication);

+ Recent posts