[Spring] Spring Security

0woy·2025년 1월 25일
0

개발

목록 보기
5/7

인증과 인가

  1. 인증 (Authentication): 사용자의 신원을 입증 하는 과정
  2. 인가 (Authorization): 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 과정

1. 스프링 시큐리티

스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크

  • 보안 관련 옵션 제공
  • CSRF 공격, 세션 고정 공격 방어 및 요청 헤더 보안 처리
  • 필터 기반 동작

CSRF 공격 & 세션 고정 공격

  • CSRF 공격: 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격
  • 세션 고정 공격: 사용자의 인증 정보를 탈취하거나 변조하는 공격

1) 필터 구조

1. Security Context Persistence Filter

Security Context Repository에서 Security Context를 가져오거나 저장하는 역할

2. Logout Filter

설정된 로그아웃 URL로 오는 요청을 확인해 해당 사용자 로그아웃 처리

3. Username Password Authentication Filter

인증관리자, 폼 기반 로그인 시 사용되는 필터로 아이디 & 패스워드 데이터를 파싱해 인증 요청을 위임한다.

인증 성공Authentication Success Handler 실행
인증 실패Authentication Failure Handler 실행

4. Default Login Page Generating Filter

사용자가 로그인 페이지를 따로 지정하지 않았을 때 기본으로 설정하는 로그인 페이지 관련 필터

5. Basic Authentication Filter

요청 헤더에 있는 아이디와 패스워드를 파싱해서 인증 요청 위임

인증 성공Authentication Success Handler 실행
인증 실패Authentication Failure Handler 실행

6. Request Cache Aware Filter

로그인 성공 후, 관련 캐시 요청이 있는지 확인 및 캐시 요청 처리
ex) 로그인 전 방문 페이지 기억 -> 로그인 후 해당 페이지로 이동

7. Security Context Holder Aware Request Filter

HttpServletRequest 정보를 감싼다.
필터 체인 상의 다음 필터들에게 부가 정보 제공

8. Anonymous Authentication Filter

필터가 호출되는 시점까지 인증되지 않은 경우,
익명 사용자 전용 객체인 Anonymous Authentication을 만들어 Security Context에 삽입

9. Session Management Filter

인증된 사용자와 관련된 세션 관련 작업 진행
세션 변조 방지 전략 설정, 유효하지 않은 세션에 대한 처리 및 세션 생성 전략 세움

10. Exception Translation Filter

요청을 처리하는 중에 발생할 수 있는 예외 위임 & 전달

11. Filter Security Interceptor

접근 결정 관리자
Access Decision Manager로 권한 부여 처리를 위임함으로써 접근 제어 결정 쉽게 함

위 과정에서 이미 사용자가 인증되어 있으므로 유효한 사용자인지 확인 가능
즉, 인가 관련 설정


2) 인증 처리 과정

아이디 & 패스워드 기반 폼 로그인 시도 시, 스프링 시큐리티에서 어떤 절차로 인증하는가?

  1. 사용자가 폼에 아이디와 패스워드 입력 시 HttpServletRequest에 아이디와 비밀번호 정보가 전달됨

    Http Servlet Request

    Java Servlet API에서 제공하는 인터페이스
    클라이언트로부터 들어온 HTTP 요청의 모든 정보를 캡슐화한 객체

    이 객체를 통해 클라이언트가 보낸 데이터(파라미터, 헤더, 쿠키 등)를 읽거나, 요청과 관련된 정보를 확인할 수 있음

  2. Authentication Filter는 넘어온 정보 가지고 실제 구현체인 UsernamePasswordAuthenticationToken (이하 token) 만듦.

  3. token을 Authentication Manager로 넘긴 후, 4. Authentication Provider에 보냄

    Manager ? Provider ?

    Authentication Manager는 인터페이스, 기본 구현체가 Provider Manager.
    Provider Manager 내부에 있는 Authentication Provider(s)를 사용하는 거임

  1. 사용자 아이디를 UserDetailService에 보낸 후, 6. 아이디로 찾은 사용자 정보를 UserDetails 객체로 만듦
  1. 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리

인증 처리

인증 성공Authentication 객체 반환
인증 실패AuthenticationException 발생
      1. 인증이 성공한 경우 SecurityContextHolder에 Authentication 저장

3) Security Context Holder

- Security Context Holder

  • Spring Security가 현재 인증된 사용자의 세부 사항을 저장하는 공간
    Spring Security는 Holder에 뭐가 어떻게 저장되는지 신경 안 씀.
    -> 걍 여기 있으면 인증된 친구들인갑다 생각함

  • 기본값으로 ThreadLocal을 사용함

    각 스레드마다 독립적인 변수를 저장할 수 있게 해주는 클래스
    즉, 여러 스레드가 동시 실행될 때 각 스레드가 자신만의 값을 가짐. 서로 터치 X

  • Security Context Holder는 Security Context를 보관 & 제공하는 공간

- Security Context

  • 현재 인증된 사용자의 보안 정보를 담고 있는 객체
    주로 Authentication 객체를 포함하며 이 객체는 사용자가 로그인 후 인증된 상태에서 어떤 역할(권한)을 가지고 있는지 등의 정보를 제공함

출처: Servlet Authentication Architecture

0개의 댓글

관련 채용 정보