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