Spring Security 와 JWT 겉핥기

달랐던 점은 우리 프로젝트는 msa 구조로 개발하고, 공통적인 필터를 Gateway에서 체크해야한다는 점이다. 그래서 토큰 검증 부분을 담당하는 필터를 gateway로 뺄 필요가 있었다.

유저 서비스에서는,

토큰 발급에 대한 의무만 가진다. 초기 로그인시 토큰을 발급해주거나, 만료 요청이 들어왔을 때 db에 접근해서 조회해보고 토큰을 재발급 해주는 로직등을 담당한다.

게이트웨이에서는,

요청에 대한 토큰 검증만 이루어진다. 검증이 필요한 url로 요청이 들어왔을경우, 토큰이 헤더에 있는지, 복호화 했는데 유효한 토큰이 아니였는지.. 기간이 지난 토큰인지.. 이런 부분에 대해서 검증한다.

따라서 여기서 승인되지 않은 요청은 서비스에 도달하기전에 컷 당하고, 사용자는 오류를 캐치하도록 구성하였다.

조금 다른 점은 위 블로그에서는 토큰을 복호화하고 유저정보를 SecurityContext에 저장해두어서 서비스 요청시에 사용했는데 gateway에서는 security를 따로 사용안하기에 헤더에 key는 id, value는 해당유저의 member테이블 인덱스를 저장하는 식으로 구성하였다.

아래 코드는 gateway에서 filter로 들어가는 클래스 파일인 CustomAuthFilter 파일이다. 검증이 필요한 요청이 들어오면 해당 filter를 거치게 된다.