Spring Security 쉽게 이해해보장! (간단한 정의와 전체 흐름)

wan2daaa·2023년 7월 18일
0

Security

목록 보기
1/1

Spring Security란?

말 그대로 스프링 기반 애플리케이션을 사용할 때 보안을 담당해주는 프레임워크입니다.

또, 기본적인 취약점 공격을 막아주고, 요청 헤더도 보안 처리를 해줘서 개발자가 보안 관련 개발 부담을 크게 줄여줍니다!
(추가로 어떤 취약점을 막아주고, 보호해주시는지 궁금하시다면, https://docs.spring.io/spring-security/reference/features/exploits/index.html 공식 문서를 확인해보세요!)

스프링 시큐리티가 담당하는 보안중 이 세 키워드가 우리가 실제 개발할 때 주로 사용하고 이해해야하는 부분입니다!

  • 인증
  • 인가
  • 권한

저도 처음 공부할때 인증과 인가에서 부터 너무 헷갈려서 간단히 정리해 보았습니다!

'인증'과 '인가'가 뭔 차이 인데?

쉽게 설명하기 위해서 스프링 앱을 집이라고 생각하시면 편합니다!

집에 들어갈려면, 도어락으로 지문을 찍어서 일치하면 들어가거나 비번이 필요하듯이
-> 사용자가 사이트에 로그인을 할때 누구인지 확인 하는 과정을 인증(authenticaion) 이라고 합니다!

그럼 인가는 무엇이냐 이것도 예를 들어 설명 드리겠습니다

만약 우리가 너무 더워서 에어컨 설치 기사님을 불렀는데,
갑자기 에어컨 설치 기사님이 에어컨 설치하는 방이 아니라 다른 방에 들어가실려고 하면
아아 이방이 아니라 저방이에요 하면서 방마다 어디는 들어가도 되고 어느 방은 못들어가게 하는것 처럼

-> 관리자는 관리자 페이지에 들어갈 수 있지만, 일반 사용자는 관리자 페이지에 들어갈 수 없는 것처럼
이런 권한을 확인 하는 과정을 인가(authorization)라고 합니다!

어느정도 이해가 되시나용?
인증, 인가를 한 문장으로 정리를 해드리자면

인증은 사용자의 신원을 검증하는 프로세스 를 말하고,
인가는 인증 이후의 과정이고, 인증된 사용자가 어떠한 자원에 접근할 수 있는지를 확인하는 절차 라고 이해하시면 됩니다!

Spring Security 는 인증과 인가 관련코드를 쉽게 처리할 수 있게 도와줍니다! (스프링 만만세)

Spring Security Filter


출처: http://atin.tistory.com/590

이렇게 Spring Security 는 다양한 Filter 들로 구성되어있는데 이걸 지금은 다 알 필요는 없습니다!
모든 Filter 를 공부하기 보다 중요한 Filter와 전체적인 흐름이 더 중요하다고 생각합니다!

Filter, FilterChain

스프링 시큐리티는 기본적으로 Filter로 동작됩니다 !

필터는 내용이 조금 어려워서 추가 학습이 필요하실거에요! (추천 : 김영한 선생님 강의! )
그래도 간단하게 설명 드리자면

Filter란?
웹 요청이 들어오게 되면
Dispatcher Servlet 이라는 컨트롤러에 처리되기 이전과 이후 ,
즉 저희가 스프링에서 자주 사용하는 @Controller , @RestController에
들어오기 전,후에 어떠한 작업을 처리할 수있다 고 이해하시면 됩니다!

필터는 또 여러개가 순서대로 존재합니다! 이를 Filter Chain 이라고 하고 그냥 Filter는 여러개가 존재하하고 순서대로 처리되구나!
그리고 우리의 Controller 들어오기 전과 후에 처리되구나 라고 이해하시면 됩니다!


Spring Security의 중요한 Filter들

Spring Security 도 SecurityFilterChain 이라는게 존재하고,
여기서 Filter 들이 요청이 들어올때 인증과 인가와 관련된 작업을 합니다!

여러 Filter 들이 있지만, 여기서 두개의 필터 정도는 알아두면 좋을 것 같습니다!

UsernamePasswordAuthenticationFilter

form 기반 로그인을 할때 사용되는 Filter입니다! 아이디, 패스워드로 인증(집에 들어갈 수있는지 !)
한뒤 , 인증이 성공했냐 실패했냐에 따라서 인증 요청을 위임해 줍니다!

FilterSecurityInterceptor

여기서 인가 (어느 방에 들어갈 수있고, 못들어가는지) 에 대한 결정을 합니다!

저희가 주로 사용할 아이디, 패스워드 기반으로 로그인을 하게 되면 스프링 시큐리티에서는 어떤 절차로 인증 처리를 하는지 알아봅시다

Spring Security Form 로그인 동작 흐름


출처 :https://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0

  1. 사용자가 Form 에 아이디와 패스워드를 입력하고 전송하게 되면 -> HttpServletRequest에 정보가 전달된다.

  2. 이때 UsernamePasswordAuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사를 한다.

  3. 유효성 검사가 끝나면, UsernamePasswordAuthenticationToken을 AuthenticationManager 에게 넘겨준다.

  4. 전달받은 Token을 AuthenticationProvider 에보낸다

  5. 사용자 아이디를 UserDetailService에 보내고,

  6. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticatinProvider에 다시 전달한다

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

  8. SecurityContextHolder 에 Authentication을 저장한다.

  9. 인증성공 여부에 따라 성공시 - AuthenticationSuccessHandler , 실패하면 AuthenticationFailureHandler를 실행한다

  10. 그리고 로그인시 기본적으로 session으로 동작된다!

여기까지 전체적인 form 로그인 인증 흐름입니다!

Spring Security는 특히 어떤 흐름인지 알아야 조금더 사용할 때 수월하고, 잘 활용할 수 있어서 일단 이 흐름을 한번 인지만 하고,
실제로 구현을 해본뒤 다시보면 조금더 이해하실 때 수월하실 것 같습니다!

추가로,,,

Spring Security에서 아주 기본적인 부분만 다뤘습니다 .

주요한 아키텍처에 대한 상세한 설명도 다 넘어갔습니다 !

다음 게시물은 Spring Security 6.xx 기준으로 실제 로그인을 구현을 해보고, JWT를 추가하고 , OAUTH2 까지 한 후에

Spring Security 아키텍처에 대해 공부한뒤 올릴 예정입니다. 감사합니다!

참고 - Provider, Manager, Handler 가 자주는 봤는데 뭔말인지 잘모르겠어요!

뭔가 감은 오는데 애매했던 부분을 조금 긁어주는 느낌이라서 한번 보셔도 좋을것같습니다!

https://softwareengineering.stackexchange.com/questions/82262/difference-between-handler-manager-and-controller
https://benstagram.tistory.com/193


0개의 댓글