• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

섹션 3. JWT 관련 기능 질문입니다.

24.03.11 19:51 작성 24.03.11 19:52 수정 조회수 177

0

안녕하세요, 강의 잘 보고 있습니다.

이번에 JWT 관련 기능을 구현함에 있어 참고차 보게되었는데요.

 

시큐리티가 인터페이스화가 많이 되어있다보니 동일한 기능임에도 구현하는 사람마다 어느 필터에서 인증/인가를 구현하는 지가 차이가 있는 것 같습니다.

 

섹션 3 버전2 소스 기준으로 JwtAuthorizationFilter 의 경우 BasicAuthenticationFilter를 확장하여 사용하고 JwtAuthenticationFilter의 경우 UsernamePasswordAuthenticationFilter 를 확장하여 사용하고, 필터에 등록되어 있습니다.

 

위 2가지 필터는 공식 문서 참고에 의하면

BasicAuthenticationFilter 는 HTTP 헤더에서 토큰을 추출하여 간단히 인증을 하는 용도로, UsernamePasswordAuthenticationFilter는 폼 기반의 로그인을 처리한다고 나와 있습니다.

 

만약 그렇다면, 폼 로그인 없이 JWT 토큰 만으로는 BasicAuthenticationFilter를 확장하는 JwtAuthorizationFilter만 존재해도 인증 과정 상 크게 문제는 없어보이는데요.
(권한 체크는 별도로 할거라 인증 과정에 넣지 않으려고 합니다.)

어떤 분은 토큰 체크하는 부분을 GenericFilterBean 또는 OncePerRequestFilter 로 구현하시는 분들도 존재하더라구요.

단순히 로그인 컨트롤러에서 JWT 토큰을 발급하고 이후 요청 필터에서 토큰 체크 및 리프레시 토큰 체크 등의 인증 처리를 한다면 어떤 필터를 구현하여 등록하는 걸 추천하시는지 개인적으로 궁금합니다.

감사합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.12

안녕하세요, 인프런 AI 인턴입니다.
Chiptune님, 질문 주셔서 감사합니다.

JWT 토큰 기반의 인증 시스템에서는 BasicAuthenticationFilter를 사용하지 않고 인증을 처리하는 경우가 많습니다. JWT 토큰을 사용할 때는 일반적으로 폼 로그인 없이 OncePerRequestFilter를 상속받는 커스텀 필터를 만들어서 인증 처리를 합니다.

OncePerRequestFilter는 요청당 한 번씩만 실행되는 필터로, 요청 헤더에서 JWT 토큰을 추출하고 유효성을 검사하는 과정을 이 필터에서 구현하곤 합니다. 인증이 성공하면 SecurityContext에 인증 정보를 저장하여 다음 필터나 컨트롤러에서 사용할 수 있도록 합니다.

JWT 토큰 발급은 별도의 인증 엔드포인트(로그인 컨트롤러 등)에서 처리하고, 필터는 그 이후의 요청에서 토큰의 유효성을 검증하는 데 초점을 맞춥니다. 권한 체크는 @PreAuthorize 어노테이션 등을 사용하여 메서드 단위로 세밀하게 관리할 수 있습니다.

따라서 로그인 시 JWT 토큰을 발급하고 이후 요청에서 토큰 유효성 체크와 리프레시 토큰을 검증하는 작업을 할 때는 OncePerRequestFilter를 확장하여 사용하는 것이 일반적인 방법인 것을 추천드립니다.

감사합니다.