개발자

JWT에서 refresh_token을 넘겨줄때 어떡해 넘겨주면 좋을까요?

2024년 04월 08일조회 133

로그인을 했을 때 access_token, refresh_token을 받아서 클라리언트에서 쿠키로 저장을 했습니다. access_token이 만료됬을 때 refresh_token을 넘겨줘야 하는데 이 부분에서 궁금한게 있습니다. 만약에 글쓰는 부분같이 access_token이 필요한 부분에서 access_token이 만료된 경우에 refresh_token을 넘겨주고 access_token을 다시 받아오는데 이미 여기서 글쓰기는 access_token이 없어서 실패하는 거잖아요. 그러면 다시 글쓰기를 시도해야 하는건가요? 아니면 access_token이 없어지고 refresh_token을 줘서 받아오는게 아니라 access_token이 만료 기간이 다가오면 넉넉하게 잡아서 refresh_token을 줘서 받아오는건가요??

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

답변 2

인기 답변

박정환님의 프로필 사진

글을 쓰다가 access토큰이 만료된 경우인가요? 아래 로직이 실행되겠네요. 1. access토큰이 만료되었으므로 서버에서 400을 뱉습니다. 2. 그러면 클라이언트 로직에 의해 refresh토큰으로 access토큰을 갱신하는 일종의 revoke API가 호출될겁니다. 3. revoke가 완료되면 서버에서 새로운 access토큰을 주고, 클라이언트에 저장됩니다. 4. 클라이언트에선 새로운 access토큰으로 글 저장 API를 또 날립니다. 5. 글이 잘 저장됩니다. 이때 1~5의 로직을 타는 것 때문에 고객에게 글 쓰기 실패 관련 메세지를 한번은 보여주어야 할것으로 보여집니다. '다시 시도해 주세요.' 등... 이는 업무협의하기 나름입니다. 안보여줄수도 있죠. 안보여주고 하려면... 클라이언트나 서버단에서 400이 날때 어떤 API를 호출했는지 알고 있어야 할 필요가 있겠네요. revoke 로직에 심을 수도 있겠구요. (서버에서 갱신처리를 하면서 400오류난 API를 처리하고 나서, 갱신된 access토큰을 클라이언트에 보내줌) 전에 회사에선 어떻게 했냐면.. GET API기준으로, 경우는 조금 다릅니다. react-query에서 서버에 요청할 때 실패가 나면 3번정도 시도를 합니다. 이때 400이 나면 갱신로직이 돌면서 그 다음번에 시도를 해서 가져왔습니다. 200 400 200 이렇게 스테이터스가 찍혔죠. 아무튼 방법은 다양합니다. 그럼 즐거운 개발 되세요~

Ed님의 프로필 사진

결론만 말하면 다시 시도하는 전자가 일반적입니다. a 요청 -> accessToken 만료로 실패 (이때 보통 서버와 합의하여 에러 상태코드를 지정합니다) -> refreshToken을 가지고 accessToken 발급 -> (1) 성공 or (2) 실패 (1) 새로운 access_token을 가지고 a 재요청, 이전 요청과 동일한 parameter를 가지고 재요청, 필요시 axios intercepter 등 사용하여 공통로직으로 관리 (2) 로그아웃 처리 (클라쪽 로컬에 access_token, refresh_token 등 제거)

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

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

또는

이미 회원이신가요?

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

커리어리 AI 봇

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

2024년 04월 08일

JWT에서 refresh_token을 넘겨줄 때 올바른 방법은 다음과 같습니다: 1. access_token이 만료될 때, 클라이언트는 서버에 refresh_token을 보내 새로운 access_token을 요청합니다. 이 경우 클라이언트는 먼저 access_token의 만료를 확인하고, 만료된 경우에만 refresh_token을 사용해야 합니다. 2. 글쓰기와 같은 중요한 작업을 수행할 때, 클라이언트는 먼저 access_token의 만료 여부를 확인합니다. 만약 토큰이 만료되었다면 상태를 반환하고 그에 따라 처리하는 등의 전략이 필요합니다(예: 다시 로그인 유도 등). 3. access_token이 곧 만료될 경우, 일정 시간(예: 토큰의 남은 수명이 5분 아래일 경우) 안에 자동으로 refresh를 진행할 수 있도록 프론트에서 작업을 해주는 것도 좋은 방법입니다. 4. 서버 측에서 401 Unauthorized 오류를 반환하면 클라이언트가 이를 감지하고, 이때 refresh token으로 새로운 access token을 얻는 방법도 있습니다. 따라서 당신의 질문에 대한 답변은 "access_token이 없어지고 refresh token으로 새로 받아오는 것"과 "access token의 만료 기간이 다가오면 미리 refresh_token으로 받아오는 것" 모두 가능하다는 것입니다. 구현 방식은 개발자의 선택에 따라 달라지며, 보통은 서버와 클라이언트 사이에서 최적의 솔루션을 찾습니다.

목록으로

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