JWT 사용 전의 기본지식 및 설정

Gi Lick·2023년 6월 15일
0
post-thumbnail

0. 개요

공부하는데 진짜 오랜 시간이 걸렸다.
제대로 된 예시가 많지 않았던 탓도 있고, 꼼꼼하게 보고 싶다보니 오래걸린 것 같다.
우선 JWT에 들어가기 앞서서 스프링 시큐리티의 체인 필터에 대해서 알고 가야한다.

스프링 시큐리티는 필터 체인이라는 여러개의 필터를 물고 물고 물어져서 실행을 하고, 단계마다 로직을 실행햔다.

  1. ChannelProcessingFilter: 요청 및 응답의 보안 채널 처리를 담당하는 필터입니다.
  2. SecurityContextPersistenceFilter: 보안 컨텍스트를 요청 간에 유지하는 역할을 담당하는 필터입니다.
  3. ConcurrentSessionFilter: 동시 세션 제어를 위한 필터입니다.
  4. LogoutFilter: 로그아웃 처리를 담당하는 필터입니다.
  5. UsernamePasswordAuthenticationFilter: 사용자 이름과 비밀번호에 기반한 인증을 처리하는 필터입니다.
  6. DefaultLoginPageGeneratingFilter: 기본 로그인 페이지를 생성하는 필터입니다.
  7. DefaultLogoutPageGeneratingFilter: 기본 로그아웃 페이지를 생성하는 필터입니다.
  8. BasicAuthenticationFilter: HTTP Basic 인증을 처리하는 필터입니다.
  9. RequestCacheAwareFilter: 요청 캐시 처리를 담당하는 필터입니다.
  10. SecurityContextHolderAwareRequestFilter: 보안 컨텍스트를 요청에 적용하는 필터입니다.
  11. AnonymousAuthenticationFilter: 익명 사용자 인증을 처리하는 필터입니다.
  12. SessionManagementFilter: 세션 관리를 담당하는 필터입니다.
  13. ExceptionTranslationFilter: 인증 및 권한 예외를 처리하는 필터입니다.
  14. FilterSecurityInterceptor: 권한 기반의 보안 처리를 담당하는 필터입니다.

이 외에도 여러가지 필터가 있고, 사용자가 필터의 순서를 바꿀 수 도 있으며, 중간에 커스텀 필터를 끼워 넣을 수 도 있다.

이 순서에 대해서 이해하고 있어야, 스프링 시큐리티를 제대로 사용할 수 있다.

우리는 JWT의 새로운 필터를 만들고, 이 사이에 끼워넣을것이다.

1. SecurityConfig 설정

위와 같이 설정했다.
우선 스프링 시큐리티의 로그인을 사용하지 않으니, 로그인 관련을 모두 제거했다.
또한 JWT 토큰을 사용하므로 csrf 토큰에 의존할 필요가 없어지니, 비활성화 하였다.

여기서 우리가 봐야 할 것은

이 부분인데, UsernamePasswordAuthenticationFilter 이전에 내가 만든 JWT Filter을 끼워넣을것이다.

2. properties 설정

3가지를 설정했다.
1. 시크릿 키
2. 억세스 토큰의 만료 시간
3. 리프래쉬 토큰의 만료 시간

시크릿 키의 경우는 랜덤으로 아무거나 만들어서 사용했다.
억세스 토큰의 경우는 만료 시간을 짧게 두는 게 좋기에 30분으로 설정했고
리프래쉬 토큰의 경우는 7일을 사용했다.

profile
뒷-끝 있는 개-발자

0개의 댓글