라벨이 JWT인 게시물 표시

JWT(jsonwebtoken) 토큰 저장 위치

웹 서비스를 만들때 제일 기본적으로 구현해야하는 부분중의 하나가 인증이라고 생각한다. 처음에 아무것도 모를때는 localStorage나 sessionStorage와 같은 브라우저 저장소를 사용했다. 위와 같은 브라우저 저장소를 사용하면 장점도 있지만 단점으로 보안적인 문제가 있다. 위 두가지와 cookie 관련해서도 블로그에 적어둔 글이 있어서 링크를 남긴다. https://seungwon-code.blogspot.com/2019/11/ddd7.html 브라우저 저장소는 자바스크립트로 값을 쉽게 저장하고 가져와서 사용할 수 있기 때문에 편리하지만 이렇게 자바스크립트로 제어가 가능하다는것은 곧 XSS(cross-site scripting) 공격에 취약할 수 있음을 의미한다. XSS를 간략하게 설명하면 해커가 자바스크립트 코드를 웹페이지에 심어두어 사용자의 정보를 탈취하는 종류의 공격이다.  웹에서 사용자로부터 많은 데이터들을 입력받게 되는데 이때 해커가 작성해둔 자바스크립트 코드로 해커가 원하는것을 얻을 수 있게 된다. 많이 알려진 공격 방식이라서 필터링 하는방법이 있다고 한다. 그럼에도 불구하고 다양한 우회방법이 존재할 수 있기 때문에 완벽하게 방어하기란 쉽지 않다고 한다. localStorage와 sessionStorage 이외에도 cookie(쿠키)가 있다.  앞에서의 두가지 브라우저 저장소와 달리 cookie는 조금 더 보안적으로 안전하다. XSS 공격을 방어할 수 있는 HttpOnly 옵션을 작성해주면 되기때문이다. 하지만 이방식에서도 CSRF(cross-site request forgery)라는 또 다른 공격에 취약할 수 있다. cookie의 작동 방식을 간략히 설명하면 사용자 인증을 하게 될 때 서버측에서는 헤더를 통해서 토큰을 보낸다. 브라우저는 이를 통해서 쿠키를 생성하고 토큰을 저장한다.  이후에 api 요청을 하게 될 때 브라우저가 자동으로 해당 쿠키를 같이 보낸다. 따로 쿠키를 서버에 직접 전달하지 않아도 자동으로 전달해준다. 그런데 이러한