본문 바로가기

Kotlin/Spring

(Spring) 사용자 관리를 손쉽게!! Spring Security의 구조를 알아보자!!

Spring Security란??

  • 인증 및 데이터 권한 관리, 데이터 보호기능 까지 포함한 사용자 관리 기능 Spring Framework다
    • 한마디로 유저의 인증이나 권한 등의 여러가지 사용자 관련 기능을 담당 하는 기능이라고 볼 수 있다

Spring Security의 기본 아키텍쳐

  1. 사용자의 요청이 서버로 들어온다
  2. 인증 필터(Authentication Holder) 가 요청을 받고 인증 객체를 인증 관리자 (Authentication Manager) 에게 전달한다
  3. 인증 관리자 (Authentication Manager) 는 등록된 인증 공급자 (Authentication Provider)를 조회하며 인증을 요구한다.
  4. 이후 인증 공급자 (Authentication Provider)가 실제 User 데이터를 조회 하면서 사용자의 상세 정보를 반환한다
  5. 위의 데이터를 보안 정보 보유자(Security Context Holder)에 저장이 되어 저장된 사용자는 Spring 컨트롤러를 사용 할 수 있게 한다
  • 따라서 유저가 요청을 보내면 Authentication Holder가 객체를 Authentication Manager에게 보내고 이것을 인증을 요구 한 후에 맞으면 Security Context Holder에 저장하여 로그인을 하였음을 증명함과 동시에 Spring Controller를 사용할 수 있게 된다

Spring Security가 작동하는 내부 구조

  1. 사용자가 자격 정보를 제출하면 유저 인증 작업 필터(Abstract Authentication Processing Filter)가 Authentication 객체를 생성한다
  2. Authentication 객체가 인증 관리자 (Authentication Manager)에게 전달한다
  3. 인증에 실패할 경우 보안 정보 보유자(Security Context Holder**)**의 값이 사라지고 인증 실패 관리자(Authentication Failure Handler)가 실행이 되며 유저 기억 서비스(Remember Me Service) 에서는 joinFail이 실행되어 실패를 반환한다
  4. 인증에 성공할 경우 세션 인증 전략(Session Authentication Strategy)객체에서 새로운 로그인을 알리고 인증 객체가 보안 정보 보유자(Security Context Holder**)에 저장이 된다**
  5. 보안 정보 지속 필터가 (Security Context Persistence Filter), 보안 정보(Security Context)를 HTTP Session에 저장한다
  6. 유저 기억 서비스(Remember Me Service) 에서 loginSuccess를 실행하여 성공을 반환하고 어플리케이션 이벤트 발행자(Application Event Publisher)가 상호간 인증 성공 이벤트를 발생 시키면서 인증 성공 관리자(Authentication Success Handler)가 실행이 된다

위의 구조로 Spring Security가 작동을 하는 것이다 

 

  • 생각 보다 어렵지만 결국은 데이터를 받으면 인증 객체를 생성 후에 인증 후 Fail이면 Fail 검증 부분으로 Success면 Success 검증 부분으로 넘어가서 다음 스텝으로 넘어가는 구조라고 생각 하면 될 듯 하다

 

 

  • Spring Security 설정은 다음에 다뤄보겠다