728x90
사전지식
스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티를 이해할면 인증과 인가에 대한 개념을 알아야 한다
인증과 인가
인증
사용자의 신원을 입증하는 과정이다. 예를 들어서 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라고 한다.
인가
인가는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 작업 예를 들어서 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이런 권한을 확인하는 과정을 인가라고 합니다.
스프링 시큐리티
- 애플리케이션의 보안을 담당
- 보안 관련 옵션 제공
- 애너테이션으로 설정도 쉽다
- CSRF 공격, 세션 고정 공격을 방어해줌
=> 개발자가 보안 관련 개발을 해야 하는 부담을 크게 줄여준다
CSRF 공격
사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격
세션 고정 공격
사용자의 인증 정보를 탈취하거나 변조하는 공격
스프링 시큐리티 필터
SecurityContextPersistenceFilter부터 시작해서 아래로 내려가면서 FilterSecurityInterceptor까지 순서대로 필터를 거친다
UsernamePasswordAuthenticationFilter
아이디와 패스워드가 넘어오면 인증 요청을 위임하는 인증 관리자 역할
FilterSecurityInterceptor
권한 부여 처리를 위임해 접근 제어 결정을 쉽게 하는 접근 결정 관리자 역할
- 사용자가 폼에 아이디와 패스워드를 입력하면 HTTPServeltRequest에 아이디와 비밀번호 정보 전달, 이때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사를 한다
- 유효성 검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨줍니다
- 전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManger에게 보냅니다.
- UsernamePasswordAuthenticationToken을 AuthenticationProvider에 보냅니다.
- 사용자 아이디를 UserDetailService로 보냅니다. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetail 객체로 만들어 AuthenticationProvider에게 전달합니다
- DB에 있는 사용자 정보를 가져온다
- 입력 정보다 UserDetails의 정보를 비교해 실제 인증 처리함
- .
- .
- 까지 인증이 완료되면 SecurityContextHolder에 Authentication을 저장합니다. 인증 성공 여부에 따라 성공하면 AuthenticationSuccessHandler, 실패하면 AuthenticationFailureHandler 핸들러를 실행합니다.
반응형
'Spring, Spring boot' 카테고리의 다른 글
JPA 동작원리 (0) | 2023.10.25 |
---|---|
토큰 기반 인증 방식과 JWT (0) | 2023.10.19 |
타임리프와 템플릿 엔진 (0) | 2023.10.17 |
직렬화와 역직렬화 (0) | 2023.10.17 |
테스트 코드 애너테이션 종류 (0) | 2023.10.13 |