HttpOnly Cookie 방식으로 리프레쉬 토큰을 관리하고, LocalStorage 에 엑세스 토큰을 관리 했으며, 리프레쉬 토큰은 DB 에 따로 저장하여, 서버단에서 관리 및 유효성 검사를 전적으로 하도록 구현했습니다.

[2024.03 - 2024.04 3~4주간 강의 학습 후, 2024년 6월 20일까지 최종 리펙토링 완성] 강의를 들은 날짜는 3월 4일부터 3~4주 정도 이지만, 백엔드 권한의 소셜 로그인을 완벽하게 구현하기 위해서 6월 20일까지 JWT Token FilterCustomSocialLoginSuccessHandler 는 수많은 리펙토링 과정을 거쳤습니다.

스프링 시큐리티에서 requestMather 경로 인가 작업은 추가하지 않았으며, 각각의 Entity controller 에서 인가 작업을 따로 진행하도록 , BackEnd 팀원과 이미 이야기가 된 상황 이었습니다.

블로그


<aside> <img src="/icons/code_gray.svg" alt="/icons/code_gray.svg" width="40px" /> 세션 기반 인증 VS 토큰 기반 인증

</aside>

<aside> <img src="/icons/code_gray.svg" alt="/icons/code_gray.svg" width="40px" /> 스프링 시큐리티 내부 구조 및 동작원리

</aside>

<aside> <img src="/icons/code_gray.svg" alt="/icons/code_gray.svg" width="40px" /> 클라이언트에서 href 소셜로그인을 통해 받은 HttpOnly 리프레시 토큰으로 엑세스토큰을 발행하는 구현방법

</aside>

<aside> <img src="/icons/code_gray.svg" alt="/icons/code_gray.svg" width="40px" /> Spring Security와 JWT를 이용한 안전한 회원 로그인 구현 방법 [HttpOnly Cookie 리프레쉬토큰 저장, 로컬스토리지에 엑세스토큰 저장]

</aside>

Servlet request 처리 전 Filter 단에서의 처리방식

Client 에서 axios, fetch 를 통한 response 를 받을 수 없는(header로 받는 rest api 방식이 아닌) href 방식의 소셜로그인 진행 시, HttpOnly Cookie 로 전달 받은 Refresh Token 을 Client에서 처리하는 방법

스프링 시큐리티 내부 구조 및 동작원리


Untitled

"ODDShop 쇼핑몰 사이드 프로젝트"에서 Spring Security 를 통한 인증, OAuth2 Client 를 통한 소셜 로그인 인가 작업을 구현하기 위해서 Spring Security 의 내부 구조JWT, Session 동작 방식을 먼저 학습하고,

WAS 안에 있는 수많은 Filter 와, 그 안에 시큐리티 필터를 먼저 거치고 스프링 컨테이너에 등록된 서블릿 컨테이너와 컨트롤러 내 API 등을 들리게 된다는 것을 이해했습니다.

Untitled

JWT Token 기반의 Spring Security 설정을 통해서 아래의 내용을 구현했습니다.

  1. 일반 회원의 로그인 LoginFilter (기존의 닉네임, 패스워드 방식의 AbstractAuthenticationProcessingFilter 를 확장한 커스텀 클래스CustomJsonEmailPasswordAuthenticationFilter 를 한번 더 확장한 LoginFilter )

    LoginFilter, JWT Token Util

  2. 로그인 이후의 모든 요청을 인터셉트하여, JWT 토큰을 사용한 인증 및 인가를 처리하는 필터 JWTFilterV3. 토큰이 유효하면, Spring Security 의 SecurityContext에 인증된 사용자 정보를 설정