본문 바로가기

Sparta/TIL

24.02.01 TIL - JWT 사용해보기

1. JWT 사용순서

1)오픈소스 라이브러리를 이용한다.

# jsonwebtoken, express 라이브러리를 설치합니다.
yarn add jsonwebtoken express

 

2)데이터 암호화 : jsonwebtoken 라이브러리의 sign 메서드를 이용해 JWT를 생성한다.

import jwt from 'jsonwebtoken';

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

 

데이터는 payload에 담기는데 jwt.io 라는 사이트에서 데이터를 입력하면 인코딩 된 데이터를 볼 수 있다.
그리고 sign메서드는 첫번째 인자로 Payload데이터를 두번째 인자로 비밀키를 받아 JWT를 생성한다.

 

3) 데이터 복호화 :   jsonwebtoken 라이브러리의 decode 메서드를 사용해서 JWT를 복호화한다.

import jwt from 'jsonwebtoken';

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2OTA4NzM4ODV9.YUmYY9aef9HOO8f2d6Umh2gtWRXJjDkzjm5FPhsQEA0";
const decodedValue = jwt.decode(token);

console.log(decodedValue); // { myPayloadData: 1234, iat: 1690873885 }

 

4) 데이터 검증 : jsonwebtoken 라이브러리의 verify 메서드를 사용해서 JWT를 검증한다.

import jwt from 'jsonwebtoken';

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

console.log(decodedValueByVerify); // { myPayloadData: 1234, iat: 1690873885 }

 

5) JWT를 써야하는 이유

a) JWT가 인증 서버에서 발급되었는지 위변조 여부를 확인할 수 있다
b) 누구든지 복호화를 통해 JWT 내부에 들어있는 정보를 확인할 수 있다.

 

6) 암호화 된 데이터 사용하는 법

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

 

 

 

2. Access vs Refresh

1) 정의

Access Token은 사용자의 인증(ex: 로그인)이 완료된 후, 해당 사용자를 인증하는 용도로 발급하는 토큰이다.
Refresh Token은 사용자의 모든 인증 정보를 담고 있는Access Token과는 달리, 특정 사용자가 Access Token을 발급받기 위한 목적으로만 사용된다.

 

 

2) 특징

Access TokenStateless(무상태) 즉, Node.js 서버가 재시작되더라도 동일하게 작동한다. 이는 jwt를 이용해 사용자의 인증 여부는 확인할 수 있지만, 처음 토큰을 발급한 사용자가 정말 그 사용자인지는 확인할 수 없다. Access Token은 그 자체로도 사용자 인증에 필요한 모든 정보를 가지고 있습니다. 그렇기 때문에, 토큰을 가지고 있는 시간이 늘어날 수록, 탈취되었을 때 피해 규모는 더욱 커지게 됩니다.

 

그에 반해 Refresh Token은 사용자의 인증 정보를 검증하는데 사용되며, 이를 서버에서 관리한다. 서버는 Refresh Token을 디코딩하여 사용자의 정보를 확인하는데, 이 방식은 필요한 경우 서버에서 강제로 토큰을 만료시킬 수 있으며, 사용자의 인증 상태를 언제든지 서버에서 제어할 수 있다는 장점을 가지고 있습니다.

 

 직접 Access Token을 발급하지 않고, Refresh Token을 통해 Access Token을 발급하는 이유는 탈취당한 경우에 대비하여 피해를 최소화하기 위해서다.

 

'Sparta > TIL' 카테고리의 다른 글

24.02.07 TIL - AWS Public IP  (0) 2024.02.08
24.02.02 TIL - transaction Lock  (1) 2024.02.05
24.01.31 TIL - log, transaction  (0) 2024.02.01
24.01.30 TIL - tables  (1) 2024.01.31
24.01.29 TIL - 세션, JWT  (0) 2024.01.30