개발자

JWT 토큰 중 accessToken은 어디에 보관하는 것이 좋을까요?

2024년 04월 03일조회 306

안녕하세요 jwt 토큰 보관에 대해 질문 있습니다. 원래는 accessToken은 로컬스토리지에, refreshToken은 httponly cookie로 보관하려 했습니다. 하지만 accessToken을 로컬스토리지로 보관하면 XSS 공격에 취약하다라는 단점 때문에 로컬 변수를 사용하라는 글도 종종 보이더라구요. 어떤 방식을 사용하는게 좋은 방법일까요? 퍼널 형식의 웹페이지며, 이메일 인증을 통해 토큰을 발급합니다. acceToken의 만료 시간은 30분정도로 생각중입니다.

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

답변 1

안희수님의 프로필 사진

저는 개인 프로젝트에서는 개발을 쉽게 하려고 로컬 스토리지에 저장하지만 실무에서 보았던 경험은 Reddis같은 인메모리 형태로 저장하는 것을 많이 보았습니다 DB에 저장할 수도 있지만 디스크 IO의 경우 동시 접속자가 많은 경우에는 서버에 부하를 줄 수 있어서 상황을 보고 선택하시는게 좋으실 듯 합니다

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

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

또는

이미 회원이신가요?

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

커리어리 AI 봇

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

2024년 04월 03일

JWT 토큰을 어디에 보관할지는 상황에 따라 결정해야 합니다. 세 가지 일반적인 저장소는 쿠키, 로컬 스토리지 및 메모리(세션스토리지 또는 닫힌 탭/브라우저에서 지워지는 JS 변수)입니다. 1) **쿠키:** 쿠키를 사용하면 HTTP Only 플래그를 설정해서 클라이언트 측 JS가 토큰에 접근하는 것을 막을 수 있습니다. 이렇게 하면 XSS 공격으로부터 안전합니다. 그러나 CSRF 공격이 가능해집니다. 2) **로컬 스토리지:** 로컬 스토리지는 클라이언트 쪽에서 쉽게 조작하고 관리할 수 있으므로 개발자에게 유용합니다. 그러나 XSS 공격으로부터 안전하지 않습니다. 3) **메모리:** 주요 장점은 버튼 클릭이나 페이지 리로드 때마다 토큰이 사라진다는 것입니다. 이렇게 하면 XSS 공격으로부터 거의 안전하며, CSRF도 문제가 되지 않습니다. 당신의 상황을 생각하면, 웹 사이트 구조와 관계없이 별도의 refresh token을 사용하는 것이 좋습니다. 이렇게 하면 access token이 만료되더라도 사용자가 로그인 상태를 유지할 수 있습니다. 그리고 위 셋 중에서는 메모리 저장을 추천드립니다. 단, 이렇게 하면 사용자가 페이지를 닫으면 로그아웃하게 되므로, 사용자 경험을 고려하여 적절한 접근 방식을 결정해야 합니다. 선택한 해결책은 표준적인 접근 방식일 필요는 없으며, 애플리케이션의 요구 사항, 웹사이트의 구조 및 보안 요구 사항에 따라 달라집니다.

목록으로

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