Spring Security

froajnzd·2024년 8월 28일
0

security

목록 보기
1/2
post-thumbnail

왜 사용해야 하는가

  • 사용자 정의 코드/프레임워크로 구현하기에 어려움
  • Spring Security는 보안에 능한 스프링 팀이 모든 보안 시나리오를 고려하여 구축함. Spring Security를 이용하면 최소한의 구성으로 웹 앱 보안을 적용할 수 있음. 개발자가 또 만들 필요가 없음
  • CSRF, COR 등과 같은 일반적인 보안 취약점을 처리함. 식별된 보안 취약점에 대해서는 많은 조직에서 사용하고 있기 때문에 프레임워크가 즉시 패치됨.
  • Spring Security를 사용하면 최소한의 구성으로 pages/API path를 보호하고 roles을 강화하며 method level security 등을 쉽게 수행가능함.
  • Spring Security는 username/password 인증, JWT 토큰, OAuth2, OpenID 등과 같이 인증을 구현하기 위한 다양한 보안 표준을 지원함.

Servlets & Filters

브라우저는 요청을 보냄
Java는 HTTP 프로토콜을 이해할 수 없음
이 사이에 중개자가 있는데, 이를 Servlet Container 또는 web server라 함.(ex. Apache Tomcat)

Filter에서 실질적 비즈니스 로직의 실행 전에 일어났으면 하는 pre-logic이나 pre-work를 정의할 수 있다

내부 흐름

  1. (클라이언트) 유저가 로그인 페이지에 자격 증명을 입력함
    요청을 백엔드 웹 애플리케이션에 전송

  2. Spring Security Filters: 백엔드 서버로 들어오는 모든 요청을 감시함 => 우리 애플리케이션을 보호함

  • 보호된 자원인지 공개적인 자원인지
  • 해당 유저에게 인증을 강제해야하는지 결정함
  • user가 이미 로그인했는지/아닌지 확인
    : Spring Security에는 20개 이상의 필터가 존재함=>각각 역할/책임이 다름
  1. Authentication Manager: 실질적인 인증 로직을 관리하는 관리 인터페이스/클래스
    filters에서 인증객체를 만들어서 Authentication Manager로 보냄
  • 어떤 인증 제공자(Authentication Providers)가 존재하는지 확인
  • 여러 인증 제공자에 요청을 전송하고, 모두 실패했을 때 End-User에게 실패했다는 메세지 전송
  1. Authentication Providers: 실직적인 인증 로직을 직접 작성 또는 UserDetailsManager/Service라는 Spring Security에서 제공하는 인터페이스와 클래스를 활용할 수 있음
  • UserDetailsManager/Service와 PasswordEncoder: EndUser가 제공한 자격 증명이 유효한지 협동해서 판별 => 인증 제공자에게 자격 증명이 유효한지, 성공적인지 알려줌
  1. 2단계에서 만든 인증 객체를 SecurityContext 안에 저장
  • 인증 객체안에 들어가는 정보 : 인증이 성공적이었는지, 세션ID가 무엇인지
  • 이렇게 인증 정보를 저장하고 있기 때문에 End-User의 첫번째 로그인 단계에서 인증이 성공적이었다면 두번째 요청부터 해당 User의 자격 증명을 요구하지 않음

Sequence Flow

profile
Hi I'm 열쯔엉

0개의 댓글