ETC

JWT 내 멋대로 정리해보기

훈지런 2024. 3. 18. 22:20

오랜만에 하나 정리해본다.

우선 JWT를 들어봤고 다들 사용해 봤겠지만

왜 사용하는지 또는 흐름이 어떤지도 모르고 사용하는 사람도 있지 않을까? 싶어서 정리해본다.

 

일딴 jwt 찾아보면 생김새는 AAAAA.BBBBB.CCCCC 이렇게 . 을 기준으로 3개로 나눠져있는데

순서대로 헤더.페이로드.서명인데

주호 헤어에는 토큰의 타입와 알고리즘이, 페이로드에는 토큰에 담을 정보, 서명에는

헤더와 페이로드의 인코딩값을 합친값과 비밀키로 조합해서 만들어진 값이라고 보면된다.

대충 이런느낌으로 그려봤다..

 

jwt 파서 사이트를 이용해보면 알겠지만

헤더와 페이로드는 단순히 base64방식으로 암호화하기때문에 누구라도 내용을 확인할수있다.

그래서 난 처음 jwt를 사용했을때 아니 왜? 누구나 확인하고 알수있는거면 왜?

라고 생각했지만 jwt사용을 제대로 숙지 못했기 때문이다.

 

서명을 통해서 내가 발행한 정상적인 토큰인지, 조작된 토큰인지를 확인하기위함인것이다.

그냥 아무생각없이 토큰을 사용하면 토큰에 중요한 값을 저장할수도 있으니 이점 꼭 숙지하고 사용했으면 한다.

그리고 좀 찾아보면 리프레시 토큰얘기가 나오는데 리프레시 토큰을 DB에 저장 한다는 얘기를 듣고

그럼 stateless하지 않는거 아닐까 생각했다.

그래서 리프래시 토큰을 DB에 저장해서 사용하는 이유에 대해 정리해봤다.

  • 토큰 도난 대응
    리프레시 토큰은 엑세스 토큰보다 상대적으로 기간을 길게 잡는다. 따라서 토큰을 도난당했을때 더 위험하다. DB에 저장을 한다면 리프레시 토큰을 무효화 할수있는 방법이 꽤나 제한적이다. 서버측 입장에서 도난 사실을 인지하기 힘들다.
    반면 DB에 저장을 하게되면 도난된 토큰값을 관리하기 수월하다. 간단히 생각해서 도난사실을 인지하면 해당 리프레시토큰을 바로 무효화 할수있기 때문이다.
  • 세션 관리
    리프레시 토큰을 저장함으로써 사용자의 세션을 유연하게 관리할수있다.
    로그아웃시 사용자 토큰을 무효화 함드로써 도난당했을때도 대비가 가능하기 때문이다.
    또, 여러기기를 사용하는 경우 기기별로 토큰을 관리할수있다.

두가지 이유를 찾아봤는데 이런 이유로 리프레시 토큰을 디비에 저장해서 용하는편이 더 안전하지않나 생각해봤다.

 

그래서 내가 생각해본 로직...

일딴 이정도..?만 생각해봄..

 

Redis 를 사용한 이유는 리프레시 토큰의 만료 처리에 용이하고 빠른 속도떄문에 사용하였다.

'ETC' 카테고리의 다른 글

한글도메인 퓨니코드  (0) 2021.09.14
싱글 스레드, 멀티 스레드, 동기, 비동기  (0) 2021.09.07