SpringFramework에서 REST API를 사용하는 백엔드 개발자 지망생이라면
한번쯤 회원과 관련된 인증/인가를 구현해야겠다는 생각을 해봤을 것이다.
"SpringSecurity"
어려움주의
최대한 쉽게, 본인이 이해한 내용을 토대로 기술하며 틀린내용이 있을 수 있다.
아래의 그림과 같이 필터 체티닝 구조로 구성되어있으며 하나의 쓰레드가 순차적으로 실행된다.
우리는 초보니까,
딱 두가지만 기억하자.
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 요청이 들어왔을때이다.
쉽게 이해할 수 있는 비유
- Http 요청: 사용자가 클럽에 입장하려고 합니다.
- Spring Security Filters: 클럽 입구에서 여러 검사를 받습니다(신분증 검사, 금지물품 검사).
- AuthenticationManager: 매니저가 신분증과 회원 정보를 확인합니다.
- AuthenticationProvider: 매니저는 회원 데이터베이스나 QR코드 등을 통해 회원임을 인증합니다.
- UserDetailsService: 회원 정보를 불러옵니다(이름, 사진, 등급).
- PasswordEncoder: 사용자가 입력한 비밀번호를 기존 정보와 비교합니다.
- SecurityContext: 인증된 사용자의 정보를 클럽 내부 데이터에 저장합니다.
- 요청 처리: 이제 사용자는 클럽 내부에서 자유롭게 활동할 수 있습니다.
자 그러면 우리가 만들어야하는것도 딱 저 5개만 만들면된다.
여기서 Oauth, JWT는 덤으로 얹는거다
즉 저구조에서 나는 인증을 Oauth로 할꺼에요~~하면 인증 방식을 바꿔줌으로써(기존의 DB비교 X)
인증을 시큐리티가 아닌 제3의 장소(네이버,구글,카카오)같은 곳에서 대신한다고 적으면 끝이며,
JWT를 이용한 인증 역시 마찬가지다.
다음장에서는 원래의 세션 기반 SpringSecurity를 사용한 사용자 인증에 대해서 기술하겠다.
'SpringBoot3' 카테고리의 다른 글
[SpringSecurity-03] 스프링 시큐리티 - CRUD (0) | 2024.11.27 |
---|---|
[SpringSecurity-02] 스프링 시큐리티 - 활용 (0) | 2024.11.26 |
[SpringBoot3] WITH Redis on Docker (0) | 2024.02.22 |
[SpringBoot3] WITH QueryDsl (0) | 2024.02.22 |