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