JWT

김정현·2023년 1월 31일
post-thumbnail

JWT란?

  • JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해준다
  • 인터넷 표준으로서 자리잡은 규격이다
  • 여러가지 암호화 알고리즘을 사용할 수 있다
  • header.payload.signature의 형식으로3가지의 데이터를 포함한다. 때문에 JWT 형식으로 변환 된 데이터는 항상 2개의 .이 포함된 데이터여야 한다
  • header(머리): signaure(배)에서 어떤 암호화를 사용하여 생성된 데이터인지 표현한다
  • payload(가슴): 개발자가 원하는 데이터를 저장한다.
  • signature(배): 이 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와준다.

쿠키, 세션과 어떻게 다른가

  • 데이터를 교환하고 관리하는 방식은 쿠키/세션과 달리, JWT는 단순히 데이터를 표현하는 형식이다
  • JWT로 만든 데이터를 브라우저로 보내도 쿠키처럼 자동으로 저장되지는 않지만, 변조가 거의 불가능하고 서버에 데이터를 저장하지 ㅏㅇㄶ기 때문에 서버를 stateless(무상태)로 관리할 수 있기 때문에 최근 많이 쓰이는 기술중 하나이다.
  • stateless(무상태)와 stateful(상태보존)의 차이를 간단히 설명하자면 Node,js 서버가 언제든 죽었다 살아나도 똑같은 동작을 하면 statelss하다고 볼 수 있다. 반대로 서버가 죽었다 살아났을때 조금이라도 동작이 다른 경우 stateful하다고 볼 수 있다

주의 사항

  • JWT는 암호 키를 몰라도 Decode가 가능하다 변조만 불가능 할 뿐 누구나 복호화하여 보는것은 가능하다는 의미가 된다
  • 떄문에 민감한 정보는 담지 않도록 해야한다
  • 특정 언어에서만 사용 가능한것은 아니다 단지 개념으로서 존재하고, 이 개념을 코드로 구현하여 공개된 코드를 우리가 사용하는게 일반적이다

사용법

npm i jsonwebtoken -S
  • 암호화 된 데이터는 어떻게 쓸 수 있나
    • 보통 암호화 된 데이터는 클라이언트(브라우저)가 전달받아 다양한 수단(쿠키, 로컬스토리지 등)을 통해 저장하여 API 서버에 요청을 할 때 서버가 요구하는 HTTP 인증 양식에 맞게 보내주어 인증을 시도한다

0개의 댓글