개발자
취업을 준비하고있는 백엔드 직무를 희망하는 학생입니다. 최근 프로젝트를 진행하며 제목과 같은 문제에 접하게 되었습니다. 이전에는 웹 프론트와 작업을 하여 로그아웃을 하는 경우 데이터베이스에서 토큰을 삭제하는 방식, 즉 양쪽에서 토큰을 삭제하는 방법으로 프로젝트를 진행하였습니다. 최근 모바일과 작업을 하게 되었는데 앱 같은 경우 삭제를 하면 백엔드쪽 요청을 받지 못할텐데 따로 다른 방법이 있을까요..?
답변 1
이 부분에 대해서는 드리고 싶은 말이 참 많은데, 일단 다 제쳐두고 이 Usecase flow만 가지고 얘기해보자면, 1.백엔드에서 받고싶으신 요청은 무엇인가요? 토큰을 삭제하는 요청인가요? 2. 만약 그렇다면 왜 토큰을 삭제해야할까요? 구조상으로 이 토큰을 갖고 있는 대상은 백엔드와, 모바일 디바이스 일텐데 더이상 요청이 없을것으로 예상되는 토큰을 굳이 "삭제"해야할 필요가 있을까요? 다음번에 유저가 모바일 앱을 설치하고 로그인 하는 순간에 토큰을 재발급 하면 되지 않을까요? >>> 3. 토큰을 백엔드에 저장하시는 이유는 뭔가요?
익명
작성자
2024년 03월 01일
1. 맞습니다! 토큰 삭제 요청입니다! 2. 회원 제거, 로그아웃과 같이 이용 횟수가 없거나 적어질 것으로 판단되는 행위와 비슷하여 제 개인적인 생각으로는 깔끔하다고 생각되어 그렇게 진행하고 있습니다! 온전히 제 생각이라.. 여러 방법에 대해 조언을 구하고 싶긴 합니다! 굳이라는 질문에 대해서는 토큰의 유효 기간을 정확히 단정지을 수 없어 최악의 경우를 생각하여 삭제를 하고 싶었습니다! 3. 설명드린 토큰은 리프레쉬 토큰으로 에세스 토큰 갱신을 위해 저장하였습니다!

Jake
Cybozu 안드로이드/플러터 개발자 • 2024년 03월 02일
단순한 액세스 토큰에 대한 이야기가 아니었군요! Refresh token이라면 이 자체로 간단한 문제는 아니었네요.. 모바일 엔지니어로 일하면서 항상 주시는 토큰 받아다 쓰기만 했지 뒤에선 무슨일이 일어나는지도 잘 몰라서, 이번 기회에 조금 조사해봤습니다! Refresh token rotation이라는 기법으로 보안문제를 해결하시는 것이 가능해보입니다. 요는, 한번만 사용할 수 있는 Refresh token을 만드는 것입니다. 아래 Auth0에서 제공하는 플로우차트가 이해가 쉬웠는데 한번 참고해보세요. https://auth0.com/docs/secure/tokens/refresh-tokens/refresh-token-rotation#automatic-reuse-detection 참고로, 2가지 시나리오 전부 "클라이언트에서 탈취당한 것"을 전제로 만들어진 시나리오입니다. RFC 6749에서도 (OAuth 2.0) 이런식으로 마지막에 Rotation의 필요성을 설명하고 있네요. https://datatracker.ietf.org/doc/html/rfc6749#section-10.4 2번에 대해서는 조금 추가적으로 질문드리고 싶어요. 토큰의 유효기간을 정확히 단정지을 수 없다는게 무슨 의미인가요? 보통 Refresh token은 1달정도 유효기간이 있어야 의미가 있을것 같은데, 이걸 정하는게 애매하다는 말씀이신가요? Rotation이 적용된 refresh token이라면, 1달의 기간동안 인증서버 DB에 토큰을 저장하는게 큰 문제는 되지 않을것 같습니다! 사실, 인증서버의 Refresh token이 탈취되는 상황을 가정한다면 db에서 refresh token을 삭제하는 것 뿐만 아니라, 이미 어떠한 방법으로도 해결할 수 없게 되버린 것 아닐까요? 혹시 조사하시면서 더 좋은 아이디어가 생각나셨거나, 다른 분들이 보시기에 틀린 내용이 있다면 공유 부탁드릴게요. 저한테도 큰 도움이 되는 공부였습니다 :D
익명
작성자
2024년 03월 02일
이미 어떠한 방법으로 해결할 수 없다는 말씀이 맞는 것 같습니다! 생각해보니 웹 방식에서도 해당 사이트를 떠나거나 창을 닫으면 토큰을 삭제 할 수 없는 것인데 제가 잘못 생각하고 있었군요!! 리프레시 토큰관련해서 알려주신 것 너무 감사합니다! 흥미러워서 자세히 읽어보고 이번 프로젝트에서 적용해보려고 합니다!! 감사합니다!!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!