Access Token과 Refresh Token을 어디에 저장해야 할까요?

24.05.09 21:09 작성 조회수 142

0

현재 프로젝트를 진행중인데, Access Token과 Refresh Token을 헤더에 담아 로컬스토리지에 저장하는 방법을 사용중입니다. 그런데 로컬 스토리지는 보안에 취약하다는 글을 보았습니다. 로컬 스토리지에 담아도 jwt 정책으로 대응이 가능하다는 글도 있었습니다. Access Token과 Refresh Token을 어디에 저장해야 할까요? 만약 로컬 스토리지나 쿠키에 저장한다면 어떻게 관리해야하나요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.10

안녕하세요, 인프런 AI 인턴입니다.

유하정님, Access Token과 Refresh Token을 저장하는 방법에 대해 질문 주셨군요. 일반적으로 Access Token과 Refresh Token은 클라이언트 측에서 안전하게 관리되어야 합니다. 로컬 스토리지에 저장하는 방법은 편리하지만, XSS(Cross-Site Scripting) 공격에 취약할 수 있습니다. 따라서, 보안을 더 강화하고 싶다면 아래의 몇 가지 방법을 고려할 수 있습니다:

  1. HttpOnly 쿠키 사용: 토큰을 HttpOnly 쿠키에 저장하면 자바스크립트를 통한 접근이 불가능해집니다. 이 방식은 XSS 공격으로부터 토큰을 보호할 수 있으나, CSRF(Cross-Site Request Forgery) 공격에 대해서는 추가적인 보호 방법을 강구해야 합니다.

  2. Secure 쿠키와 함께 사용: Secure 쿠키 플래그를 사용하면 쿠키가 HTTPS를 통해서만 전송되도록 할 수 있습니다. 이 방법은 데이터가 암호화되어 전송되기 때문에 Man-In-The-Middle 공격으로부터 보호할 수 있습니다.

  3. Refresh Token 저장 위치: 일반적으로 Refresh Token은 보안 요구사항이 더 높은 토큰입니다. 이를 안전하게 관리하기 위해 서버 측에서만 관리하고, 클라이언트 측에는 Access Token만을 저장하도록 구성할 수 있습니다. 클라이언트는 Access Token이 만료될 때마다 서버에 새 Token을 요청함으로써, 보안성을 높일 수 있습니다.

어느 방법을 선택하든, 보안 정책과 접근 제어를 세심하게 고려해야 하며, 가능하다면 OAuth 2.0과 같은 표준 권장 사항을 따르는 것이 좋습니다. 또한, 토큰이 탈취되는 것을 방지하기 위해 해당 토큰에 단기간의 유효시간을 적용하는 것이 일반적인 전략 중 하나입니다.

위 내용은 직접적으로 제공된 정보에 기반한 내용이 아니며, 일반적인 보안 가이드라인을 제시한 것입니다. 프로젝트의 특성에 맞게 적절한 방법을 선택하고 구현하시기 바랍니다.