❓ 인증과 인가
스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크
❓ 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
를 보관 & 제공하는 공간