Access Token, Refresh Token 저장 위치

양정운·2024년 12월 4일
post-thumbnail

결론

Access Token (짧은 유효기간)

메모리에 저장

Refresh Token (긴 유효기간)

Cookie에 저장 (HttpOnly, Secure, SameSite)

이유

1. Local Storage 또는 Session Storage 에 저장해서 안되는 이유

브라우저에 위치한 저장 공간으로 자바스크립트로 접근이 가능하다. XSS 공격에 취약하다.

XSS (Cross-site Scripting)

악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법.
공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

2. Access Toekn을 메모리에 저장하는 이유

XSS와 CSRF 공격을 방지할 수 있다.
메모리에 값을 저장하면 로컬변수를 사용해서 값을 저장한다. 이 방식을 사용하면 자바스크립트 코드로 접근이 불가능하다는 보안상 장점이 있다. 하지만 새로고침 등으로 웹 앱이 새롭게 실행되면 내부 변수가 초기화된다.

CSRF (Cross-Site Request Forgery)

사이트 간 요청 위조.
사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹 페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법

3. Refresh Token을 Cookie에 저장하는 이유

메모리는 새로고침 등으로 웹 앱이 실행되면 내부 변수가 초기화 되기에 Refresh Token은 지속성 높은 Cookie에 저장하여 Access Token을 재발급 해준다.
쿠키는 CSRF의 주요 타겟이다.

다음 보안 옵션을 설정해 줘야 한다.

  • HttpOnly: XSS 공격으로 쿠키 탈취 방지
  • Secure: 암호화되지 않은 HTTP 요청으로 쿠키 노출 방지
  • SameSite: CSRF 공격 방지
    • Strict: 쿠키가 동일한 사이트에서만 전송
    • Lax: GET 요청 및 탐색 링크 같은 안전한 요청에만 쿠키 전송
    • None: 크로스사이트 요청에서도 쿠키 전송
profile
FE Developer

0개의 댓글