우와한 개발자

[Spring Security] Spring Security란? SecurityFilterChain과 인증 흐름

by 우와한개발자

1. Spring Security란

  • 스프링 기반의 어플리케이션 인증과 권한 등 보안을 담당하는 프레임워크
기능 설명
인증(Authentication) 사용자가 누구인지 확인 (ex. 로그인)
인가(Authorization) 특정 리소스에 접근 가능한지 검사 (ex. 관리자만 가능 등)
CSRF 보호 Cross Site Request Forgery 공격 방지
세션 관리 세션 고정 공격 방지, 동시 로그인 제한 등
패스워드 인코딩 BCrypt 등 안전한 해시 알고리즘 사용
커스터마이징 용이 OAuth2, JWT, 커스텀 필터 등 유연한 확장성

 

2. Spring Security 동작 흐름

1) Spring Filter Chain

  • HTTP 요청은 DispatcherServlet(컨트롤러)에 도달하기 전에 여러 개의 필터를 거침
  • Spring Security는 이 필터 체인에 DelegatingFilterProxy를 통해 자신의 보안 필터들을 삽입
HTTP 요청
→ DelegatingFilterProxy
→ FilterChainProxy (Spring Security의 필터 체인 관리자)
→ SecurityFilterChain (등록된 필터들 순차 실행)
→ DispatcherServlet 
→ Controller

 

2) Spring Security Authenticatioin Architecture

  1. 사용자가 로그인 정보와 함께 인증을 요청함.(Http Request)
  2. AuthenticationFilter(UsernamePasswordAuthenticationFilter)가 요청을 가로채고 인증용 객체(UsernamePasswordAuthenticationToken)를 생성함.
  3. ProviderManager에게 UsernamePasswordAuthenticationToken 객체를 전달함. (ProviderManager는  AuthenticationManager의 구현체)
  4. AuthenticationProvider가 UsernamePasswordAuthenticationToken 객체를 받아 인증 로직을 처리함.
  5. UserDetailsService가 데이터베이스에서 사용자정보(username,password,role등)를 로드함. UserDetailsService를 구현한 클래스를 직접 구현해야함.
  6. 로드된 사용자 정보를 기반으로 UserDetails 객체를 생성해서 반환. 이때 실제 객체 생성에는 User 클래스가 사용됨.
  7. AuthenticationProvider가 입력 정보와 UserDetails를 비교하여 인증을 수행함.
  8. 인증이 성공 시 권한 정보가 포함된 Authentication 객체를 반환함.
  9. Authentication 객체가 UsernamePasswordAuthenticationFilter로 반환됨.
  10. Authentication 객체가 SecurityContext에 저장됨

 

3) Authentication 객체 구성 요소

구성 요소 설명
principal 현재 인증된 사용자 정보
credentials 비밀번호 등 인증 정보
authorities 권한 목록
authenticated 인증 여부
상황 구현 클래스 principal 설명
인증시도 전 UsernamePasswordAuthenticationToken username 문자열 사용자 입력 값(ID, PW)을 담고 인증되지 않은 상태
인증성공 후 UsernamePasswordAuthenticationToken (authenticated=true) UserDetails 객체 사용자 정보, 권한, 인증 여부 등이 채워진 상태

 

3. Spring Security 인증 방법

인증 방식 설명 주요 사용 사례
사용자 이름 및 비밀번호 인증 가장 기본적이고 널리 사용되는 인증 방식으로, 로그인 폼이나 REST API에서 자주 활용됨 웹 애플리케이션 로그인 기능
JWT (JSON Web Token) 인증 RESTful API와 분산 시스템에서 사용하는 토큰 기반 인증으로, 서버 상태를 유지하지 않고 인증 처리 가능 모바일 앱과 백엔드 간 통신
OAuth 2.0 로그인 Google, Facebook, GitHub 등 외부 소셜 로그인 제공자를 통해 인증 처리 소셜 로그인을 지원하는 웹 애플리케이션
OAuth 2.0 Resource Server OAuth 2.0 액세스 토큰을 검증하여 API 리소스를 보호하는 방식 인증된 사용자만 API 접근 허용
LDAP 인증 Active Directory나 OpenLDAP 같은 디렉터리 서비스를 활용한 인증 방식 사내 시스템 중앙 집중식 인증

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기