본문 바로가기
프로젝트/코드스테이츠 - 4주프로젝트

리프레시토큰 없이는 쿠키로 로그인상태결정을 못한다(보안포기하면 가능)

by 안뇽! 2021. 12. 11.
반응형

 

배포전에는 엑세스토큰을 쿠키에넣고 매번 쿠키를 검사하여 로그인상태를 결정했다.

 

그런데 쿠키 보안설정을 한 후 배포를 하고나서 이것저것 눌러보는데 새로고침할때마다 로긴상태가 초기화 되는 것이다!

 

면밀히 오랫동안 구글링을 하여 알아낸것은, 쿠키에 httpOnly:true를 설정했을때는 클라이언트에서 쿠키를 절.대 다룰 수 없다는 것이다.

 

때문에 보안은 강화되는 한편, 클라이언트에서 쿠키를 검사하여 로긴상태를 결정할 수 없게된다.

 

때문에 리프레시토큰을 가지고 새로고침을 할때마다 엑세스토큰을 만들고, 그 액세스토큰으로 로긴상태를 결정해야 한다.

 

즉, 리프레시토큰을 만들지 않을꺼면 애초에 쿠키에 토큰을 저장하는게 쓸모가 없다.

 

httpOnly:true를 설정하지 않으면 자바스크립트에서 쿠키를 다룰 수 있지만, 자바스크립트에서 쿠키를 다룰 수 있다는 것은 

 

Local Storage랑 다를바가 없다. 

 

즉 쿠키를 쓰는 이유가 없어진다.

 


내가 위에 취소선 적은 내용은 1달이 지나서 완전히 틀린 내용으로 밝혀졌기 때문이다.

 

로그인 상태유지는 local Storage에 로그인 했냐 안했냐?? 만 알게 해주면 된다.

 

자세한 내용은 아래 글에 있고 요약만 하면

 

localStorage에 로그인 했냐? 안했냐만 넣어주면 된다.

이러면 개인정보가 노출될 필요가 전혀 없다.

이렇게 했냐? 안했냐만 넣어주고

로그인 상태검사는 local storage를 검사해주기만 하면 된다.

 

나는 session storage에 넣었다.

  useEffect(() => {
    // if (cookies.get("jwt") || cookies.get("kakao-jwt")) {
    if (window.sessionStorage.getItem("jwt")) {
      setIsLogin(true);
    } else {
      setIsLogin(false);
    }
  }, [window.sessionStorage.getItem("jwt")]);

로컬에 안넣고 세션에 넣은 이유는 창을 껐을때 정보가 다 사라지길 원했기 때문이다.

 

https://wnsdufdl.tistory.com/277

 

리팩토링 : httpOnly를 true로 설정하고 로긴상태 유지하는법 알아냄

사실 내가 알아낸건 아니고 여기저기 물어봐서 하는법을 알게 된거다 그래도 짜릿짜릿하다. 기분이 좋아서 사진을 노을로 했다. 내가 썼던 아래글 완전히 틀린것으로 판명났다.! https://wnsdufdl.tis

wnsdufdl.tistory.com

 

반응형