[Security] 스프링 시큐리티 아키텍처

Spring Security란?

  • 어플리케이션의 인증(Authentication) 및 인가(Authorization)를 담당하는 프레임워크
  • Spring Security를 사용하지 않으면 자체적으로 Session을 관리해야한다.
  • redirect를 일일이 설정해야 한다.

특징

  • Filter를 기반으로 동작한다.
    • Spring MVC와 분리되어 관리하고 동작한다.

용어

  • Principal(접근 주체) : 보호된 대상에 접근하는 유저
  • Authenticate(인증) : 현재 유저가 누구인지 확인(로그인)
  • Authorize(인가) : 현재 유저의 권한을 검사한다.
  • 권한 : 해당 유저가 리소스에 접근할 수 있는지 확인하는 것.

스프링 시큐리티 아키텍처

1. HTTP Request 수신

사용자가 로그인 정보와 함께 인증 요청을 합니다.

2. 인증 토큰 생성

사용자 자격을 기반으로 인증 토큰(Authentication Token)이 생성됩니다.

3. 인증 객체를 AuthenticationManager로 전달

생성된 인증 토큰은 AuthenticationManager로 전달됩니다. AuthenticationManager는 실제로 인증 과정을 처리하는 역할을 수행합니다.

4. AuthenticationProvider에 의한 인증 시도

AuthenticationManager는 등록된 AuthenticationProvider들 중에서 적절한 Provider를 선택하여 실제로 사용자를 인증합니다. 각각의 Provider는 다양한 방식으로 사용자 정보를 비교하고 검사합니다.

5. UserDetailsService에 대한 요청

선택된 Provider는 UserDetailsService에게 요청하여 데이터베이스나 다른 저장소에서 username을 통해 해당 유저의 정보를 가져옵니다.

6. UserDetails 객체 탐색

UserDetailsService는 받은 유저 정보를 바탕으로 UserDetails 객체를 생성합니다. UserDetails 객체는 스프링 시큐리티가 제공하는 기본 구현체인 User 클래스입니다.

7. UserDetails 정보와 입력받은 정보 비교

Provider는 UserDetails 객체와 입력받은 인증객체의 정보(패스워드)를 비교하여 유저가 정확히 맞는지 확인합니다.

8. 인증결과 반환 또는 예외 처리

Provider는 인증결과(Authentication 객체) 또는 예외(AuthenticationException)를 반환합니다.

9. 인증 완료 및 SecurityContext 설정

인증이 완료되면 Authentication 객체가 AuthenticationFilter로 돌아갑니다. 이때 Authentication 객체가 SecurityContextHolder에 설정되어 세션 또는 보안 컨텍스트에서 접근 가능하도록 합니다.

10. 인가 및 권한 부여

성공적으로 인증된 후, Spring Security 에서 접근 제어 및 권한 부여가 일어납니다.

'Spring Boot' 카테고리의 다른 글

Spring Security 기본 사용자 비활성화  (0) 2024.04.06
[Security] Security Exception  (0) 2023.10.17
[Security] 폼 로그인 구현  (0) 2023.10.12