00. 시작하며
이전에 2024.05.29 - [# Study/Spring] - [Spring] Spring Security, JWT 간단 정리 써놓은 포스팅을 보면 너어어어무 간단하게 정리만 해둔 것 같아서 공부하면서 정리하려고 한다.
Spring Security에 개념과 작동방식에 대해 알아보려한다.
01. Spring Security 란?
Spring Security는 Spring 프로젝트에서 애플리케이션의 인증, 인가 등의 보안을 담당하는 스프링의 하위 프레임워크다.
인증과 인가
- 인증(Authentication): 애플리케이션에 접근하는 유저의 신원을 확인하는 과정
- 인가(Authorization): 유저가 어떠한 자원(resource)에 접근할 수 있는지 검증하는 과정
02. Spring Security 사용 이유
1. 특정 URL에 대하여 인증되지 않은 사용자의 접근을 막아준다.
만약, 어떤 URL은 해당 글을 작성한 유저만 접근할 수 있는데, 해당 글에 대한 인가처리를 하지 않으면 그 외 사용자도 이 URL에 접근할 수도 있다.
Spring Security를 통해 URL에 대한 인증/인가를 간편하게 구현할 수 있다.
2. CSRF(Cross-site request forgery, 신뢰할 수 있는 사용자를 사칭해 웹 사이트에 원하지 않는 명령을 보내는 공격)를 막아준다.
3. 세션 고정 취약점(Session Fixation, 로그인 시 발급받은 세션 ID가 로그인 전/후 모두 동일하게 사용되어 악의적인 사용자가 피해자의 세션을 하이제킹 하여 정상적인 사용자로 위장하여 접근하는 행위)을 막아준다.
03. Spring Security 과정
Spring Security는 세션-쿠키 인증을 사용한다.
클라이언트를 식별할 수 있는 세션 아이디를 서버에 저장 후, 클라이언트가 요청할 때 이를 사용하여 식별한다.
1. 클라이언트가 서버에 처음으로 접근(서버에 Request를 보냄)
2. 서버는 Session id 쿠키가 함께 왔는지 확인, 그렇지 않으면 세션 아이디를 새로 발급 후 클라이언트에 응답
3. 클라이언트는 응답받은 세션 아이디를 쿠키에 저장
4. 이후, 클라이언트가 서버에 접근할 때 마다, 쿠키에 저장된 세션 아이디를 함께 보냄
5. 서버는 날아온 세션 아이디를 통해 클라이언트를 식별한다.
6. 브라우저가 종료되면 세션 아이디 제거
이 과정을 어노테이션을 사용하여 간단하게 구현할 수 있다.
04. Spring Security 작동 방식
Spring Security는 Security Filter Chain을 기반으로 동작한다.
클라이언트가 Request를 보내면, Servlet에 도착하기 전에 여러가지 필터를 거치게 된다.
여기서 이러한 Filter들을 Servlet까지 엮어서 Filter Chain이라고 부른다.
Security Filter는 필터들 중 Delegating Filter Proxy를 통해 동작한다.
Delegating Filter Proxy
- 스프링에서 제공하는 필터 중 하나. 필터체인에 속하지 않은 객체를 필터처럼 동작할 수 있게 해준다.
Spring Security는 Filter Chain Proxy를 사용한다.
Filter Chain Proxy
- Spring Security에서 제공하는 특수 필터이다. FilterChainProxy는 Bean 객체이므로, 일반적으로 Delegating Filter Proxy로 분류된다.
Security Filter Chain
- Spring Security 필터들이 묶여있는 필터 체인. 하나의 애플리케이션에 여러개의 시큐리티 필터 체인이 존재할 수 있다.
참고
https://hayden-igm.tistory.com/20#-%20Security%20Filter%20Chain-1
'# Study > Spring' 카테고리의 다른 글
[Spring] @Scheduled로 RefreshToken 블랙리스팅하기 (0) | 2024.11.30 |
---|---|
[Spring] Spring Security + JWT 구현 해보기 (다중 토큰) (2) (0) | 2024.11.27 |
[Spring] Spring Security + JWT 구현 해보기 (다중 토큰) (1) (1) | 2024.11.26 |
[Spring] Spring Security + JWT 구현하기 (단일 토큰) (0) | 2024.11.26 |
[Spring] Spring Security, JWT 간단 정리 (1) | 2024.05.29 |