Spring-Boot

스프링 시큐리티(Spring Security)

뚜코맨 2023. 7. 15. 19:56

스프링 시큐리티란?

스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다.

인증과 인가

인증(Authentication)은 사용자의 신원을 입증하는 과정이다.

예를 들어 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라고 한다.

인가(Authorization)는 인증과는 다르다. 인가는 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업이다.

예를 들어 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이런 권한을 확인하는 과정을 인가라고 한다. 인증과 인가 관련 코드를 아무런 도구의 도움 없이 작성하려면 굉장히 많은 시간이 필요하다.

스프링 시큐리티를 사용하면 아주 쉽게 처리를 할 수 있다.

 

스프링 시큐리티

보안 관련 옵션을 많이 제공하고 있다. 어노테이션으로 설정도 매우 쉽고 간단하다.

CSRF공격, 세션고정(Session fixation)공격을 방어해 주고, 요청 헤더도 보안 처리를 해주므로 개발자가 보안 관련 개발을 해야 하는 부담도 덜어준다.

필터기반으로 동작하는 스프링 시큐리티

스프링 시큐리티는 이렇게 다양한 필터들로 나누어져 있으며, 각 필터에서 인증, 인가와 관련된 작업을 처리한다.

 

SecurityContextPersistenceFilter부터 시작해서 아래로 내려가며 FilterSecurityInterceptor까지 순서대로 필터를 거친다.

 

가장 많이 사용하는 아이디와 패스워드 기반 폼 고르인을 시도하면

스프링 시큐리티에서는 어떤 절차로 인증을 처리하는 지 그림을 보면서 알아보도록 하자.

① 사용자가 폼에 아이디와 패스워드를 입력하면, HTTPServletRequest에 아이디와 비밀번호 정보가 전달된다.

(이때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사를 진행한다.)

② 유효성 검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다.

③ 전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보낸다.

④ UsernamePasswordAuthenticationToken을 AuthenticationProvider에게 보낸다.

⑤ 사용자아이디를 UserDetailService에 보낸다. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에게 전달한다.
⑥ DB에 있는 사용자 정보를 가져온다.

⑦ 입력 정보와 UserDetails의 정보를 비교해 실제 인증처리를 한다.

⑧ ~ ⑩까지의 인증이 완료되면 SecurityContextHolder에 Authentication를 저장한다. 인증 성공 여부에 따라 성공하면 AuthenticationSuccesHandler, 실패하면 AuthenticationFailureHandler 핸들러를 실행한다.

'Spring-Boot' 카테고리의 다른 글

[Spring-Boot] 테스트케이스의 @Transactional  (0) 2024.01.12
메이븐(maven) vs 그래들(gradle) 비교  (1) 2023.12.20
ORM이란?  (1) 2023.10.25
OAuth란?  (0) 2023.07.27
스프링 부트란?  (1) 2023.07.08