생활
JWT 저장소로 cookie를 사용하나요?
안녕하세요.
json web token을 이용한 인증 구현 시 궁금한 점이 있어서 질문 남깁니다.
jwt 인증은 서버가 상태를 갖지 않기 때문에 따로 클라이언트 측에서 토큰을 저장해야 되는걸로 압니다.
크게 웹스토리지(로컬/세션스토리지)와 쿠키 2가지 저장소가 있구요.
로컬스토리지의 경우 손쉬운 js의 접근/조작으로 XSS 공격에 취약하고 CSRF 공격엔 안전하고
쿠키의 경우 httpOnly, secure, sameSite와 같은 옵션을 사용하면(이 경우 쿠키는 서버에서 생성) XSS 공격엔 안전하고 반대로 CSRF 공격에 취약하다고 알고 있습니다.
XSS 공격이 범위가 더 넓고 방어가 힘들기 때문에 쿠키에 저장하는걸 권장한다는 많은 글을 봤습니다. (물론 반대의 글도 많이 보긴했습니다... 어쩌라는거지;)
제가 내린 결론은 httpOnly, secure, sameSite flag가 적용된 쿠키를 저장소로 사용해야 된다 입니다.
물론 csrf 공격에 대비하기 위해 추가로 orgin/referer 검사, 이중 게시? 와 같은 대비책을 마련하구요.
실무에서는 어떤 방식으로 저장소에 저장하고 위험을 대비하나요?
추가로 여기 아하 사이트에서 크롬 개발자 도구로 쿠키를 보니 jwt 토큰을 쿠키에 저장은 해놓던데 단순 쿠키로 저장을 해놨더라구요 (httpOnly, secure, sameSite 없이)
그리고 api 요청을 할때 쿠키에서 토큰을 꺼내서 Athorization 헤더에 토큰을 실어 보내는거 같은데..
이 경우 보안상의 위험은 없나요? 아니면 추가로 뭔가 방어책을 마련해 둔건지..
jwt 인증을 처음 구현해보려고 여기저기 알아보고 구현하는 중이라 궁금증이 많습니다.
질문을 정리해보면
실무에서는 jwt 인증 구현 시 어떤 저장소에 저장을 하고 어떻게 위험을 대비하나요?
여기 아하 사이트는 jwt를 단순 쿠키(옵션 없음)에 저장을 하고 요청 시 마다 쿠키에서 꺼내서 Athorization 헤더에 토큰을 실어 보내는데 보안상의 위험은 없나요?
없다면 추가로 어떠한 방어책을 마련한건가요?
답변 부탁드립니다. 감사합니다!!
1개의 답변이 있어요!