본문 바로가기

SpringBoot3

[SpringSecurity-01] 스프링 시큐리티 - 이해

SpringFramework에서 REST API를 사용하는 백엔드 개발자 지망생이라면
한번쯤 회원과 관련된 인증/인가를 구현해야겠다는 생각을 해봤을 것이다.
"SpringSecurity"

 

 

어려움주의

최대한 쉽게, 본인이 이해한 내용을 토대로 기술하며 틀린내용이 있을 수 있다.

 

아래의 그림과 같이 필터 체티닝 구조로 구성되어있으며 하나의 쓰레드가 순차적으로 실행된다.

SpringSecurityFilterChainingMap

 

우리는 초보니까,

딱 두가지만 기억하자.

 

1. 필터들로 이루어져 있다.
2. 그 필터가 체이닝 구조로 이루어져있다.

 

 

 

그렇다면 우리가 뭔가 Security를 사용하기 위해서 다음과 같이 생각할 수 있다.

 

1. 필터를 오버라이딩하기

2. 필터를 끼워넣기

사실 둘다가능하다

 

우선 필자는 구현해본 시큐리티중에서 가장 간단하며 꼭 구현해야하는 인터페이스/클래스 위주로 설명하겠다.

 

내가 생각한 개념은 다음과같다.

 

Authentication : 인증

Authentication Manager : 인증 담당 매니저

Authentication Provider : 인증 방법

SpringSecurityFilters : 필터 모음집

SecurityContext : 인증된 객체 저장소

UserDetails : User 인터페이스 규격

PasswordEncoder : 패스워드 암호화

 

 

자 흐름도를 쉽게 설명해보겠다.

Http요청이 들어온다. -> SpringSecurityFilters에서 여러 필터를 거친다(1) -> 정상 Http 신호임을 인증받는다(2) -> 매니저한테 넘긴다(3) -> 매니저는 자신이 알고있는 인증방법(Authentication Providers)으로(4) User객체를 불러오고, 비밀번호도 맞춰본다.(5,6) 그리고 정상적으로 진행되었으면 SecurityContext까지 운반해서(7,8) 객체를 담는다.

 

아래의 사진은 Http 요청이 들어왔을때이다.

 

SpringSecurity-Http-Map

쉽게 이해할 수 있는 비유

  1. Http 요청: 사용자가 클럽에 입장하려고 합니다.
  2. Spring Security Filters: 클럽 입구에서 여러 검사를 받습니다(신분증 검사, 금지물품 검사).
  3. AuthenticationManager: 매니저가 신분증과 회원 정보를 확인합니다.
  4. AuthenticationProvider: 매니저는 회원 데이터베이스나 QR코드 등을 통해 회원임을 인증합니다.
  5. UserDetailsService: 회원 정보를 불러옵니다(이름, 사진, 등급).
  6. PasswordEncoder: 사용자가 입력한 비밀번호를 기존 정보와 비교합니다.
  7. SecurityContext: 인증된 사용자의 정보를 클럽 내부 데이터에 저장합니다.
  8. 요청 처리: 이제 사용자는 클럽 내부에서 자유롭게 활동할 수 있습니다.

 

 

자 그러면 우리가 만들어야하는것도 딱 저 5개만 만들면된다.

 

여기서 Oauth, JWT는 덤으로 얹는거다

 

즉 저구조에서 나는 인증을 Oauth로 할꺼에요~~하면 인증 방식을 바꿔줌으로써(기존의 DB비교 X)

인증을 시큐리티가 아닌 제3의 장소(네이버,구글,카카오)같은 곳에서 대신한다고 적으면 끝이며,

 

JWT를 이용한 인증 역시 마찬가지다.

다음장에서는 원래의 세션 기반 SpringSecurity를 사용한 사용자 인증에 대해서 기술하겠다.