Spring Security

김예지·2023년 4월 29일
0

최근 개인 프로젝트를 진행하며 시큐리티를 적용시켜 로그인 기능을 구현하고 싶단 생각이 들어 무작정 구글링을 통해 적용시켰지만 아직 동작원리에 대해 정확히 이해하지 못 한 느낌이 들어 따로 정리해보기로 했다

스프링

이란 스프링 기반의 애플리케이션 보안을 담당하는 하위 개념의 프레임워크이다 간단하게 말해 애플리케이션의 인증 인가를 담당하는 역할이다

여기서 인증과 인가는 무엇인가?

인증(Authentication) -> 유저가 실제 사이트의 유저가 맞는지 식별하는 과정
인가(Authorization) -> 특정 리소스에 접근이 가능한지 확인

Security는 필터흐름으로 처리된다

Client (request) → Filter → DispatcherServlet → Interceptor → Controller
(실제로 Interceptor가 Controller로 요청을 위임하는 것은 아님, Interceptor를 거쳐서 가는 것)

여기서 필터와 인터셉터 둘 다 요청과 응답을 가로채는 역할을 한다 반대로 차이점은 필터는 DispatcherServlet 이전에 처리가 되고 인터셉터는 DispatcherServlet에서 Controller로 가기 전에 처리가 된다는 차이가 있다

< 필터의 위치와 인터셉터의 위치 사진 참고 >


위에 사진은 시큐리티의 동작방식에 관한 사진이다

  1. 유저가 id/pass 를 입력하여 요청을 보낸다
  2. AuthenticationFilter가 요청을 가로채고 요청받은 유저의 정보로 UsernamePasswordAuthentication Token을 생성한다
  3. AuthenticationManager의 구현체인 ProviderManager에 토큰을 전달하여 등록된 AuthenticationProvider들을 조회하여 인증을 요구한다
  4. UserDeatialServeice에서 요청 받은 유저의 정보를 DB에 연결하여 확인한다
  5. 유저의 정보가 있으면UserDetails을 만들어 session을 생성한다
  6. 인증이 성공된 정보를 Authentication객체를 생성하여AuthenticatuonManager -> AuthenticationFilter로 이동시키고
  7. 최종적으로 SecurityContextHolder에 사용자 정보가 담긴 Authentication객체를 저장시킨다

참고
https://velog.io/@soyeon207/SpringBoot-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0%EB%9E%80
https://dev-coco.tistory.com/174
https://emgc.tistory.com/108
https://mangkyu.tistory.com/173

profile
나만의 방식을 찾아가는 신입신입 개발자

0개의 댓글