잡다한 사전

(2023.11.07) JWT이란? 본문

프로그래밍 언어/node.js

(2023.11.07) JWT이란?

잡사전집사 2023. 11. 8. 16:07
반응형

JWT이란

JWT는 JSON형태의 데이터를 안전하게 교환하여 사용할 수 있게 해주는 겁니다. 또한 인터넷 표준으로 자리잡은 규격이며, 암호화 알고리즘에 사용이 가능하다는 특징이 있습니다. 

 

JWT의 형식

JWT의 형식은 header.payload.signature로 이루어져 있으며, 3가지의 데이터를 포함하고 있습니다.

그렇기 때문에 JWT 형식으로 변환 된 데이터는 항상 2개의 .이 포함되어 있는 데이터여야 합니다.

 

header : header는 signature에서 어떤 암호화를 사용하여 생성된 데이터인지 표현합니다.

payload : 개발자가 원하는 데이터를 정장하는 부분입니다.

signature : 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와주는 부분입니다.

 

JWT 주의할 점 

JWT는 비밀키를 모르더라도 복호화가 가능하기 때문에 중요한 정보와 민감한 정보는 담지 않도록 해야합니다.

예를 들어 : https://jwt.io에서 쉽게 복호화가 가능하기 때문에 중요한 정보(비밀번호 및 개인정보)는 담지 않도록한다. 

 

 

JWT 사용방법

1. 오픈 소스를 라이브러리을 사용합니다.

JWT를 사용하기 위해서는 jsonwebtoken 라이브러리를 사용해 줄 겁니다.

npm install jsonwebtoken
npm i jsonwebtoken

 

위 명령어를 입력하여 npm을 이용하여 jsonwebtoken 모듈을 설치해줍니다. 

 

2. 원하는 JSON 데이터를 암호화하기

const jwt = require("jsonwebtoken");
// 설치한 jsonwebtoken 모듈을 가져오기 위해 require을 해줍니다.

const token = jwt.sign({ myPayloadData: 1234 }, "mysecretkey");
// payload 부분에는 개발자가 담을 데이터가 들어갑니다.
console.log(token);

위와 같이 코드를 입력하고 실행을 하면 아래와 비슷한 값이 출력되는 것을 확인 할 수 있습니다.

더보기

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2OTk0MTE0OTV9.USM_pr5Hh228MDh1_-CpbkIneeUQiwjYhhOP2jmmT7c

입력한 1234가 JWT를 이용하여 암호화가 된것을 확인 할 수 있습니다.

 

 

3. 암호화된 JSON파일 복호화하기

3-1 먼저 코드로 복호화하는 방법부터 알아보겠습니다.

const decodeToken = jwt.decode(token); //jwt의 payload를 확인하기 위해 사용한다.
console.log(decodeToken);

 

위에서 암호화한 코드를 decode하는 코드이며, decode() 함수를 사용하여 암호화된 것을 복호화하여 출력하는 것이다.

 

3-2 복호화가 아닌, 변조되지 않은 데이터인지 검증하는 방법입니다.

const verifyToken = jwt.verify(token, "mysecretkey");
console.log(verifyToken);

위 코드는 변조되지 않은 코드를 확인하는 코드로 만약 변조가 되어있는 상태라면 에러가 뜹니다.

 

3-3 jwt.io를 이용하여 복호화하여 확인하는 방법입니다.

https://jwt.io에서 위에서 암호화한 값을 복사해서 넣으면 복호화된 값을 확인 할 수 있습니다. 

 

4. JWT를 사용해야하는 이유?

JWT가 인증서버에서 발급이 되었는지 확인하여 위변조 여부를 확인이 가능합니다. 또한 누구든지 JWT 내부에 들어있는 정보를 확인을 할 수 있다는 특징 있습니다.

 

반응형