개발자

JWT 로그아웃 관련 질문 입니다.

2024년 02월 03일조회 375

JWT 를 사용하여 로그인 기능을 구현 하였습니다. 저같은 경우에는 로그인시 에세스토큰과 리플레시 토큰을 생성해서 사용중이 mysql 테이블에 저장을하고 토큰 두개를 반환하면 프론트(리엑트) 에서 세션 스토리지에 저장해서 에세스 토큰으로 통신하다가 만료가 되면 리플레시를 요청하고 리플레시를 보내서 데이터베이스에서 유효시간과 변형이 되지 않은것을 확인하면 다시 에세스 토큰을 발급하는 시스템으로 구현을 했는데요 이때 에세스 토큰은 30분 리플레시 토큰은 8시간을 주고 개발 하였습니다. 그런데 생각해보니 로그아웃을 구현 안했더라고요 프론트에서는 로그아웃하면 세션스토리지를 날려버리면 끝인데 RestAPI라 데이터만 주고 받으면 되는 형식이라 딱이 제가 받는게 없다는겨죠 그렇게 로그아웃을 찾아 보다가 다른분들은 Redis를 사용하여 리플레시 토큰을 입력받은 아이디를 key로 저장한후에 에세스를 발급하고 로그아웃하면 그토큰을 블랙리스트로 만들더군요 만료시간후에 자동 삭제되게 설정도 하는거 같아요 이게 어느 방향으로 개발하는게 맞는지 도통 모르겠습니다. 로그아웃 할때마다 리플레시를 무효화 시키고 로그인할 때 새로 생성해서 저장하는게 맞는지 로그아웃해도 데이터베이스에 리플레시 유효기간이 남아 있다면 그것을 계속 사용하는게 맞는건지 어느 글들을 보면 리플레시를 7일 한달도 주는 경우가 있더라구요... 그래서 잘 모르겠습니다. 로그인 -> 에세스,리플레시토큰 발급 -> 프론트 세션스토리지 저장 -> 에세스로 통신 -> 만료되면 리플레시 요청 -> 프론트에서 리플레시 통신 -> 데이터 베이스 확인후 유효검사후 에세스 다시 발급 -> 재로그인시 유효시간이 남으면 기존의 리플레시 토큰 사용 로그인 -> 에세스,리플레시토큰 발급 -> ........ -> 로그아웃시 Redis에 블랙리스트로 저장 -> 블랙리스트 접근불가 -> 다시로그인시 리플레시 새로발급 실무에서는 어떻게들 관리하시는지 알려주시면 감사하겠습니다.

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

답변 1

조용구님의 프로필 사진

안녕하세요 :) 제가 실무에서 경험한 인증 프로세스를 기반으로 답변 드려보겠습니다. 1 로그아웃 할 때 유효기간 남은 경우, 새로 생성? 또는 계속 사용? > 이 경우는 새로 생성해서 유효기간도 다시 새로 시작하는게 맞는 것 같아요. 2 프론트에서 세션 스토리지에 저장 > 세션 스토리지에 저장하면 상태 관리 이슈가 발생하기 쉬워서 세션 스토리지 대신 쿠키에 저장해서 백엔드에서도 로그아웃 상태를 만들 수 있게 하는 것이 좋아요. 3 로그아웃 시 블랙리스트 저장? > 위에 2번 처럼 쿠키에 저장된다면 해당 과정은 불필요합니다.

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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