Spring Security

오정빈·2025년 11월 19일

내일배움캠프

목록 보기
22/22

Spring Security

2025.11.19

1. Spring Security의 필요성

표준화된 단일 인증/인가 체계 제공

  • ID/Password, OAuth, JWT 등 다양한 인증 방식을 통합적으로 지원

세션 및 토큰 관리 기능 제공

  • 세션 기반 인증 / JWT 기반 인증 모두 지원

암호화와 비밀번호 보안 강화

  • BCrypt 같은 강력한 해시 알고리즘으로 비밀번호를 안전하게 저장

권한 제어 기능 제공

  • URL 단위, Method 단위(@PreAuthorize)에서 Role 기반 접근 제어

웹 보안 취약점 방어

  • CSRF 토큰 자동 생성
  • 로그인 성공 시 세션ID 자동 재발급 → CSRF, 세션 고정 공격 방어

2. 인증(Authentication) / 인가(Authorization)

  • 인증(Authentication): 사용자가 누구인지 식별하는 과정
  • 인가(Authorization): 인증된 사용자가 특정 자원에 접근 가능한지 확인하는 과정

3. 세션 기반 인증 vs 토큰 기반 인증(JWT)

구분세션 기반 인증토큰 기반 인증(JWT)
저장 위치서버 세션 저장소클라이언트(브라우저, 앱)
클라이언트 보관세션ID(쿠키)JWT(Access Token)
상태StatefulStateless
서버 확장성세션 공유 문제 존재무상태 → 확장성 우수
보안 고려사항세션 탈취 방지토큰 탈취·만료·재발급 관리 필요
적합 환경단일 서버, 소규모 서비스분산 서버, MSA, 대규모 서비스

4. 인증 → 인가 → 응답 처리 흐름

  1. 클라이언트에서 요청이 들어오면 Spring Security FilterChain을 통과
  2. UsernamePasswordAuthenticationFilter가 ID/PW 추출
  3. AuthenticationManagerUserDetailsService로 사용자 정보 검증
    • 성공 → Authentication 객체 생성 후 SecurityContext에 저장
    • 실패 → ExceptionTranslationFilter가 401 처리
  4. FilterSecurityInterceptor가 권한 확인
    • 권한 없음 → 403 반환
    • 권한 있음 → Controller로 전달
  5. Controller에서 정상 응답 반환

5. Spring Security 구조

Security Filter Chain

  • 요청 URL에 매칭되는 필터 체인이 선택되어
    여러 보안 필터가 순서대로 인증/인가 처리

DelegatingFilterProxy

  • 서블릿 컨테이너 필터
  • 실제 보안 처리는 FilterChainProxy로 위임하는 브릿지 역할

FilterChainProxy

  • 요청과 매칭되는 SecurityFilterChain 선택 및 실행

6. 주요 동작 필터

UsernamePasswordAuthenticationFilter

  • 로그인 요청에서 사용자명/비밀번호 추출
  • 인증 성공 시 Authentication 생성 → SecurityContext 저장

ExceptionTranslationFilter

  • 인증 실패(401), 접근 거부(403) 예외 처리

FilterSecurityInterceptor

  • 최종 권한 체크
  • 접근 가능 여부 결정

7. 주요 컴포넌트

AuthenticationManager

  • 로그인 요청 검증
  • Authentication 객체 반환

UserDetailsService

  • DB에서 사용자 정보 조회
  • 비밀번호 검증

SecurityContext

  • 인증된 사용자 정보를 저장
  • 요청마다 SecurityContextHolder로 관리

8. 요청 흐름 (Spring Boot)

  1. 클라이언트가 /login으로 인증 요청 (ID/PW)
  2. DelegatingFilterProxy가 요청을 Security Filter Chain으로 전달
  3. UsernamePasswordAuthenticationFilter가 ID/PW 추출 후
    AuthenticationManager에게 인증 위임
    • 내부적으로 AuthenticationProvider
      UserDetailsService + PasswordEncoder 사용
  4. 인증 성공 → Authentication 생성 → SecurityContext 저장
    인증 실패 → ExceptionTranslationFilter가 401 응답 처리
  5. FilterSecurityInterceptor가 URL/메서드 권한 체크
    • 권한 없음 → 403
  6. 권한 통과 후 Controller → Response 반환

0개의 댓글