Spring Security란?
Authenitication(인증)과 Authorization(인가)를 제공하는 프레임워크
- 각 인증, 권한에 대한 부분을 Fiter 흐름에 따라 처리 (필요한 Fiter을 구현하여 사용하는 방식)
- 인증 절차를 거친 후 인가 절차를 거침
- Credential 기반의 인증 방식을 사용
Credential ?
Principal을 아이디로 사용 ( Principal : 보호받는 Resource에 접근하는 대상 )
Credential을 비밀번호로 사용 (Credential : Resource에 접근하는 대상의 비밀번호 )
Spring Security의 특징
- 서블릿 API 통합
- Spring Web MVC와의 선택적 통합
- 인증과 권한 부여를 모두 포괄, 확장 가능한 지원
- 세션 고정, Clickjacking, 사이트 간 요청 위조 등의 공격으로부터 보호
세션 고정 : 사용자 로그인 시 항상 일정하게 고정된 세션 ID값을 사용하는 취약점
Clickjacking : 사용자가 클릭하고 있다고 인지하거나 다른 어떤 것을 클릭한 거처럼 속이는 악의적 기법
사이트 간 요청 위조(csrf) : 사용자의 의지와 무관하게 공격자가 특정 웹사이트에 요청하게 하는 공격 기법
로그인 인증 구조
- 로그인 HTTP 요청
- Authentication Filter 가 요청을 받아 UsernamePasswordAuthenticationToken을 만들어서 AuthenticationManager 인터페이스에게 전달
- AuthenticationManager가 받은 정보로 Authentication을 생성
- 생성한 Authentication이 올바른 Credential 인지 체크
- 올바르다 ➡️ 사용자 인증
- 체크 실패 ➡️ Authentication Exception 발생
- AuthenticationManager가 Authentication 객체를 AuthenticationProvider에게 전달
- AuthenticationProvider가 받은 Authentication 객체를 가지고 User 확인 후, UserDetail 인터페이스로 User 세션을 생성
- UserDetail 인터페이스를 SecurityContextHolder에 저장 후, User 세션 아이디를 응답으로 보냄
- 이후, 요청이 오면, 요청 쿠키의 Jsession ID를 검증 후 인증
주요 Fitler들
SecurityContextPersistenceFilter
- SecurityContextRepository를 통해 SecurityContext를 불러오거나 저장
LogoutFilter (로그아웃)
- 로그아웃 URL로 오는 요청을 감지 후, 로그아웃 처리
UsernamePasswordAuthenticationFilter (로그인)
- ID/비밀번호 기반 Form 인증 요청 URL을 감지하여 사용자 인증
ExceptionTransiationFilter
- 요청 중 발생하는 예외를 위임하거나 전달
FilterSecurityInterceptor
- 접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임
- 이 필터가 실행되는 시점에 사용자의 인증으로 판단
참고 출처
https://docs.spring.io/spring-security/reference/index.html
https://www.youtube.com/watch?v=aEk-7RjBKwQ 🔥 10분 테코톡 시청 추천
'스프링' 카테고리의 다른 글
[Query Dsl] 연관관계가 없는 엔티티들 조인하기 (0) | 2024.02.20 |
---|---|
[Query Dsl][JPQL] 서브쿼리 주의사항 (from문에서는 불가능) (0) | 2024.02.20 |
[WAS] 서블렛이란? (0) | 2023.06.02 |
롬복(lombok) 생성자 애너테이션 정리 (0) | 2023.03.20 |
[SPRING] BindingResult 정리. (0) | 2021.12.27 |