[nodejs] JWT(Json Web Token) 알아보기

Uhan33·2024년 1월 26일
0

TIL

목록 보기
18/72

JWT (Json Web Token)

JWT(Json Web Token)은 웹 표준으로써, 서버와 클라이언트 사이에서 정보를 안전하게 전송하기 위해 도움을 주는 웹 토큰(Web Token)이다.

  • JSON 형태의 데이터를 안전하게 전송하고 검증할 수 있는 기능을 제공한다.
  • 인터넷 표준으로서 자리잡은 규격이다.
  • 다양한 암호화 알고리즘을 사용할 수 있어, 신뢰성을 보장한다.
  • header.payload.signature 의 형식으로 3가지의 데이터를 포함한다. (개미처럼 머리, 가슴, 배)
    → 때문에, JWT 형식으로 변환 된 데이터는 항상 2개의 . 이 포함된 데이터여야 한다.

다시 정리하면,
JWT(Json Web Token)는 크게 세 부분, 헤더(Header), 페이로드(Payload), 서명(Signature)로 구성되어 있다. 각각의 부분은 점(.)으로 분리된다.
JWT의 구조는 https://jwt.io/ 에서 간단히 확인할 수 있다.

JWT 특징

  1. JWT는 비밀 키를 모르더라도 복호화(Decode)가 가능하다.
    • JWT를 가진 사람이라면 누구나 해당 토큰에 어떤 데이터가 담겨있는지 확인할 수 있다.
    • 변조만 불가능 할 뿐, 누구나 복호화하여 보는것은 가능하다는 의미이다.
  2. 민감한 정보(개인정보, 비밀번호 등)는 담지 않도록 해야한다.
    • JWT의 페이로드는 누구나 복호화하여 볼 수 있기 때문.
  3. JavaScript와 같이 특정 언어에서만 사용 가능한것은 아니다.
    • JWT는 단순히 데이터 형식일 뿐, 단지 개념으로서 존재하고, 이 개념을 코드로 구현하여 공개된 코드를 우리가 사용하는게 일반적이다.

JWT 사용법

JWT는 오픈소스 라이브러리로 사용하기위해선 라이브러리 설치를 해야한다.

yarn add jsonwebtoken or npm install jsonwebtoken

이제 암호화를 해보자.

import jwt from 'jsonwebtoken';

const token = jwt.sign({ myPayloadData: 1234 }, 'mysecretkey');
console.log(token);

라이브러리를 불러오고, token에 데이터를 암호화하여 넣어준다.
이 때 sign이라는 메소드가 사용되고, 첫 번째 인자는 데이터, 두 번째 인자는 비밀키로 사용한다.

복호화는 위 코드에 아래 코드를 추가해보자.

const decodedValue = jwt.decode(token);

console.log(decodedValue);

이러면 복호화된 데이터는 decodedValue에 들어가게 된다.
복호화를 위해 decode라는 메소드를 사용한다.

데이터가 변조되지 않은 데이터인지 검증하는 방법도 있다.

const decodedValueByVerify = jwt.verify(token, "mysecretkey");

위와 같이 작성해주면 decodedValueByVerify 에는
암호화된 token과 비밀키인 mysecretkey를 가지고
JWT가 변조되지 않았고, 올바른 비밀 키로 서명되었는지를 검증한다.

마치며...

JWT에 대해 알아보았다.
누구나 복호화할 수 있다는게 특이하다..
변조만 막을 뿐 유출은 막지 못하는 것인가 하는 생각이 든다.
결국 중요한 데이터는 다른 암호화 방식을 사용하나보다 싶었다.

0개의 댓글