개발자

jwt 리플레시 토큰은 어디서 언제 데이터베이스에 저장할까요?

2024년 01월 24일조회 1,289

사수가 없는 상태에서 블로그 글들을 보고 어떻게 어떻게 jwt 토큰 발행까지 해냈습니다. 1차 로그인 하면 아이디 비밀번호를 받고 아이디로 검증후 토큰을 발급해서 웹페이지로 전달했는데요 블로그에는 그 추후의 로직에 대한 설명을 찾기가 어렵더라구요 ㅠ JwtTokenProvider 클래스에서 generateToken 메서드에서 에세스 토큰과 리플레시 토큰을 생성하는데 이때 데이터베이스에 이미 있는지 검사하고 저장하는건지? JwtAuthenticationFilter클래스에서 doFilter 메서드에서 저장하는지 그런데 이부분은 저같은 경우에는 GenericFilterBean 을 상속 받았는데 이런 방법을 사용하는 예시 에서는 UsernamePasswordAuthenticationFilter 을 상속받아서 사용하더라구요 지금 막힌 부분이 토큰이 DB에 저장을 어디서 하는지 그리고 아직 토큰유효가 끝나면 리플레시 토큰 요청과 검증후 에세스 재발급 이 남아 있습니다. 어떤 흐름으로 풀어야하는지 알려주세요 ㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

장성호님의 프로필 사진

JWT에서 액세스 토큰은 DB에 보통 저장하지 않습니다. 리프레쉬 토큰만 저장하셔도 됩니다. 추가로 RTR 정도 하면 좋겠네요. 스프링을 사용하시는 것으로 보입니다. 보통은 JwtFilter 내에서 먼저 Jwt 만료 시간을 체크합니다. 만료되지 않았다면 payload에 담긴 유저 관련 유니크 값을 보고, 그 값이 DB에 존재하는지 확인합니다. 존재한다면 인증된 사용자로 간주합니다. Refresh는 디비 내의 Refresh 토큰과 일치하는지 확인하고 액세스 토큰을 재발급 해주는 별도의 API를 보통 사용합니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 01월 24일

JWT 리플레시 토큰을 데이터베이스에 저장하는 로직은 주로 사용자가 초기 로그인을 할 때 이루어집니다. 이때, 일반적으로 JWT 액세스 토큰에 더하여 리플레시 토큰도 함께 발급하고 해당 리플레시 토큰을 데이터베이스에 저장합니다. 따라서, JwtTokenProvider 클래스의 generateToken 메서드에서 에세스 토큰과 리플레시 토큰을 생성한 후 해당 리플레시 토큰을 데이터베이스에 저장하는 로직이 포함되어야 합니다. 액세스 토큰의 유효 기간이 만료되면 클라이언트(웹 페이지)는 리플레시 토큰을 서버에 전송하여 새로운 액세스 토큰을 요청합니다. 이때, 서버는 전달 받은 리플레시 토큰이 자신이 데이터베이스에 보관한 것과 일치하는지 검증합니다. 일치한다면 새로운 액세스 토큰을 발급하고 클라이언트에게 반환하며, 일치하지 않는다면 인증 오류를 반환합니다. JwtAuthenticationFilter 클래스에서 doFilter 메서드는 주로 모든 HTTP 요청이 처리되기 전에 액세스 토큰의 유효성을 검사하는 데 사용됩니다. GenericFilterBean 또는 UsernamePasswordAuthenticationFilter를 상속 받아 사용하더라도 결국 같은 이런 목적을 수행하게 됩니다. 다시 정리하면 다음과 같은 흐름을 가질 것입니다: 1. 사용자가 초기 로그인을 합니다. 2. 서버에서는 JwtTokenProvider 클래스의 generateToken 메서드를 통해 에세스 토큰과 리플레시 토큰을 생성합니다. 3. 이 리플레시 토큰을 데이터베이스에 저장합니다. 4. 생성한 에세스 토큰과 리플레시 토큰을 클라이언트에게 반환합니다. 5. 액세스 토큰이 만료되면, 클라이언트는 서버에게 리플레시 토큰을 전달하며 새 액세스 토큰을 요청합니다. 6. 서버에서는 전달 받은 리플레시 토큰이 데이터베이스에 보관된 것과 일치하는지 확인 후, 새 액세스 토큰 발급하여 반환 혹은 인증오류 반환합니다. 매 HTTP 요청 마다 JwtAuthenticationFilter 클래스의 doFilter 메서드에서 액세스 토큰의 유효성을 검사합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!