• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

jwt 토큰은 보통 어디에서 보관을 하나요?

21.05.21 21:48 작성 조회수 1.73k

1

안녕하세요 강의 재밌게 보고 있습니다.

제가 프론트엔드에는 무지하여 잘 모르겠는데 jwt 를 서버에서 

반환해주면 프론트에서는 일반적으로 어디에 저장을 하다가

요청 보낼때 마다 재사용하나요?

로컬 스토리지나 쿠키 정도 밖에 떠오르는게 없는데 프론트엔드 현업에서 자주 사용하는 방식이 있나요?

답변 4

·

답변을 작성해보세요.

8

안녕하세요, 이도원입니다. 

JWT는 사용자 브러우저 냉의 안전한 장소에 저장되어야 합니다. LocalStorage에 저장하게 되면, 페이지 내부의 모든 스크립트에서 엑세스 할 수 있기 때문에, XSS의 공격 대상이 되거나 외부 공격자가 토큰에 접근할 수도 있게 됩니다. 따라서, LocalStorage나 SessionStorage에 저장하는 것은 좋은 방법이 아니라고 생각됩니다. 

JWT는 HTTP 요청으로만 서버에 전송되는 HttpOnly 쿠키 내에 저장되어야 합니다. 예를 들어, 다음과 같이 저장해 볼 수 있습니다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

'Set-Cookie':[

    'my_cookie=springcloud',

    'Permanent=cookies; Max-Age=${60*60*24*30}',

    'Secure=Secure; Secure',

    'HttpOnly=HttpOnly; HttpOnly'

]

감사합니다. 

1

padomay1352님의 프로필

padomay1352

2023.02.07

local storage에 저장하세요 많은 논문과 글을 읽었는데 둘은 본질적으로 별차이가 없습니다. 일반적인 악성코드에 경우 local storage가 더 안전할 겁니다.

padomay1352님의 프로필

padomay1352

2023.02.07

+저는 그리고 차라리 세션을 추천합니다.

Stop using JWT for sessions - joepie91's Ramblings (cryto.net)

이강민님의 프로필

이강민

2023.03.13

제가 알기로 http only는 자바스크립트 접근이 안돼서 XSS 공격에 상대적으로 안전한 반면, local storage는 자바스크립트로 쉽게 접근이 가능하여 XSS 공격에 취약하며, CSRF 공격에도 취약한 것으로 알고 있는데요.

Local Storage가 더 안전하다고 생각하시는 근거가 있는지 궁금합니다. 추후에 제가 만들 MSA 시스템에 jwt를 도입해보려고 하는데 도입 전에 많은 정보가 필요해서요. 괜찮으시다면 지식 공유 부탁드려도 될까요?

이강민님의 프로필

이강민

2023.03.14

지식 공유 감사합니다. 하지만 읽어보니 XSS 공격을 회피하기 위해 Local Storage 사용을 자제하고 Http Only와 같은 방법을 채택하는 여러가지 조언들도 XSS 공격에서 자유로울 수 없다. 그렇기 때문에 Local Storage의 편리함을 생각했을 때, 큰 차이가 없다는 의미인 것 같습니다.

하지만 본문에서도 Local Storage는 매우 쉽게 훔칠 수 있는 반면, 다른 방법들이 궁극적으로는 피할 수 없지만 어렵게는 만든다고 하는 것 같습니다. 그렇기에 스크립트 접근과 훔치는 난이도를 생각하면, Local Storage가 더 안전하다는 표현만은 ChatGPT도 그렇고 저도 적절한 표현은 아니라는 생각이 듭니다.

그럼에도 토큰 방식이 보안을 위해 여러가지 고려할 사항이 많은 것은 사실인 것 같습니다. 그래서 추천하신 것처럼 세션이 토큰에 비해 안전하긴 한데, 트래픽 처리나 모바일 어플리케이션 등에서 토큰 방식을 필요로 하니까 여러 모로 개발하기가 쉽지만은 않네요.

padomay1352님의 프로필

padomay1352

2023.03.15

일반적인 악성코드에 경우 더 안전하다고 한것은 csrf 공격은 xss공격을 통한 csrf공격뿐만 아니라 referer체크나 api의 get/post구분을 안해놨을때 xss를 방지했더라도 csrf에 취약할 수 있습니다.

만약 쿠키에 저장했을때 email등을 통한 단순한 링크 클릭만으로만 csrf가 발생할 수 있습니다. 로컬스토리지는 일단 js로 접근을 해야하니까요

이강민님의 프로필

이강민

2023.03.16

그렇군요. 무슨 의미인지 알 것 같습니다. 깨닫게 되는 점이 있네요. 좋은 정보 공유해주셔서 감사합니다!

1

장원익님의 프로필

장원익

2021.05.22

저도 이 질문이 궁금하네요!

0

ㅌㅇ님의 프로필

ㅌㅇ

2022.08.02

'Set-Cookie':[

    'my_cookie=springcloud',

    'Permanent=cookies; Max-Age=${60*60*24*30}',

    'Secure=Secure; Secure',

    'HttpOnly=HttpOnly; HttpOnly'

]

위의 코드는 백엔드에서 작성 하는건가요?