❓ 인증과 인가
스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크
❓ CSRF 공격 & 세션 고정 공격
- CSRF 공격: 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격
- 세션 고정 공격: 사용자의 인증 정보를 탈취하거나 변조하는 공격
Security Context Repository에서 Security Context를 가져오거나 저장하는 역할
설정된 로그아웃 URL로 오는 요청을 확인해 해당 사용자 로그아웃 처리
인증관리자, 폼 기반 로그인 시 사용되는 필터로 아이디 & 패스워드 데이터를 파싱해 인증 요청을 위임한다.
| 인증 성공 | Authentication Success Handler 실행 |
| 인증 실패 | Authentication Failure Handler 실행 |
사용자가 로그인 페이지를 따로 지정하지 않았을 때 기본으로 설정하는 로그인 페이지 관련 필터
요청 헤더에 있는 아이디와 패스워드를 파싱해서 인증 요청 위임
| 인증 성공 | Authentication Success Handler 실행 |
| 인증 실패 | Authentication Failure Handler 실행 |
로그인 성공 후, 관련 캐시 요청이 있는지 확인 및 캐시 요청 처리
ex) 로그인 전 방문 페이지 기억 -> 로그인 후 해당 페이지로 이동
HttpServletRequest 정보를 감싼다.
필터 체인 상의 다음 필터들에게 부가 정보 제공
필터가 호출되는 시점까지 인증되지 않은 경우,
익명 사용자 전용 객체인 Anonymous Authentication을 만들어 Security Context에 삽입
인증된 사용자와 관련된 세션 관련 작업 진행
세션 변조 방지 전략 설정, 유효하지 않은 세션에 대한 처리 및 세션 생성 전략 세움
요청을 처리하는 중에 발생할 수 있는 예외 위임 & 전달
접근 결정 관리자
Access Decision Manager로 권한 부여 처리를 위임함으로써 접근 제어 결정 쉽게 함
위 과정에서 이미 사용자가 인증되어 있으므로 유효한 사용자인지 확인 가능
즉, 인가 관련 설정
아이디 & 패스워드 기반 폼 로그인 시도 시, 스프링 시큐리티에서 어떤 절차로 인증하는가?

사용자가 폼에 아이디와 패스워드 입력 시 HttpServletRequest에 아이디와 비밀번호 정보가 전달됨
❓ Http Servlet Request
Java Servlet API에서 제공하는 인터페이스
클라이언트로부터 들어온 HTTP 요청의 모든 정보를 캡슐화한 객체이 객체를 통해 클라이언트가 보낸 데이터(파라미터, 헤더, 쿠키 등)를 읽거나, 요청과 관련된 정보를 확인할 수 있음
Authentication Filter는 넘어온 정보 가지고 실제 구현체인 UsernamePasswordAuthenticationToken (이하 token) 만듦.
token을 Authentication Manager로 넘긴 후, 4. Authentication Provider에 보냄
❓ Manager ? Provider ?
Authentication Manager는 인터페이스, 기본 구현체가 Provider Manager.
Provider Manager 내부에 있는 Authentication Provider(s)를 사용하는 거임
❓ 인증 처리
인증 성공 Authentication 객체 반환 인증 실패 AuthenticationException 발생
Spring Security가 현재 인증된 사용자의 세부 사항을 저장하는 공간
Spring Security는 Holder에 뭐가 어떻게 저장되는지 신경 안 씀.
-> 걍 여기 있으면 인증된 친구들인갑다 생각함
기본값으로 ThreadLocal을 사용함
각 스레드마다 독립적인 변수를 저장할 수 있게 해주는 클래스
즉, 여러 스레드가 동시 실행될 때 각 스레드가 자신만의 값을 가짐. 서로 터치 X
Security Context Holder는 Security Context를 보관 & 제공하는 공간