2023. 11. 21. 20:22ㆍDeveloper/Node.js
JWT
- 서버와 클라이언트 사이에서 정보를 안전하게 전송하기 위해 도움을 주는 웹 토큰(Web Token)이다.
- JSON 형태의 데이터를 안전하게 전송하고 검증할 수 있는 기능을 제공한다.
- 다양한 암호화 알고리즘을 사용할 수 있어, 신뢰성을 보장한다.
- header.payload.signature의 형식으로 3가지의 데이터를 포함한다.(JWT형식으로 변환된 데이터는 2개의 ' . ' 이 포함)
JWT 구조

HEADER : 헤더는 토큰의 타입과 어떤 암호화를 사용하여 생성된 데이터인지 정의되어 있다.
PAYLOAD : 페이로드는 실제 전달하려는 데이터를 담고 있다. 대표적으로 개발자가 원하는 데이터를 저장한다.
SIGNATURE : 서
명은 헤더와 페이로드, 그리고 비밀 키(Secret Key)를 이용하여 생성된다. 이 서명은 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와준다.
JWT 사용 가이드
1. 프로젝트로 이용할 폴더를 생성 후 명령어로 필요한 모듈 설치
// npm을 이용해 프로젝트를 초기화
yarn init -y
// jsonwebtoken, express 라이브러리를 설치
npm i jsonwebtoken express
2. jsonwebtoken 라이브러리의 sign메서드를 사용해 JWT 생성
import jwt from 'jsonwebtoken';
const token = jwt.sign({ myPayloadData: 1234 }, 'mysecretkey');
console.log(token);
// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2OTA4NzM4ODV9.YUmYY9aef9HOO8f2d6Umh2gtWRXJjDkzjm5FPhsQEA0
3. 코드로 복호화 해서 출력 해보기
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2OTA4NzM4ODV9.YUmYY9aef9HOO8f2d6Umh2gtWRXJjDkzjm5FPhsQEA0";
const decodedValue = jwt.decode(token);
console.log(decodedValue); // { myPayloadData: 1234, iat: 1690873885 }
4. 복호화가 아닌 변조되지 않은 데이터인지 검증
const decodedValueByVerify = jwt.verify(token, "mysecretkey");
console.log(decodedValueByVerify); // { myPayloadData: 1234, iat: 1690873885 }
5. 잘못된 비밀키를 입력해서 데이터를 검증 (잘못된 비밀키를 이용해 JWT 검증하면 에러 발생함)
import jwt from 'jsonwebtoken';
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2OTA4NzM4ODV9.YUmYY9aef9HOO8f2d6Umh2gtWRXJjDkzjm5FPhsQEA0";
const decodedValueByVerify = jwt.verify(token, "secretkey");
console.log(decodedValueByVerify);
// JsonWebTokenError: invalid signature
6. jwt.io 에서 복호화하여 확인
JWT 의 사용
- 회원가입: 회원권 구매
- 클라이언트는 회원가입에서 이메일, 패스워드와 같은 정보를 제공
- 이 정보는 서버에 저장되어, 이후 인증 과정에서 사용
- 로그인: 회원권으로 놀이공원 입장
- 클라이언트는 이메일, 패스워드로 로그인
- 서버는 이 정보를 검증한 후, 유효하다면 JWT를 생성하여 클라이언트에게 제공
- 로그인 확인: 놀이기구 탑승 전마다 유효한 회원권인지 확인
- 클라이언트는 로그인 후 모든 API 요청에 JWT를 포함하여 전송
- 서버는 JWT를 확인하고, 유효하다면 요청된 API를 수행
- 내 정보 조회: 내 회원권이 목에 잘 걸려 있는지 확인하고, 내 이름과 사진, 바코드 확인
- 클라이언트는 JWT를 사용해 자신의 정보를 조회할 수 있다.
- 서버는 JWT를 복호화하여 내부에 저장된 정보를 확인하고, 이 정보를 바탕으로 사용자의 세부 정보를 조회하여 전달
마지막으로, JWT의 중요한 두가지 특징은
JWT가 인증서버에서 발급되었는지 위변조 여부를 확인할 수 있는 것이고, 누구든지 JWT 내부에 들어있는 정보를 확인할 수 있는 것이다.(복호화)
그래서 민감한 정보는 담지 않도록 한다.
이상.
'Developer > Node.js' 카테고리의 다른 글
| Prisma (ORM) (1) | 2023.12.04 |
|---|---|
| Sequelize (0) | 2023.11.29 |
| 미들웨어 (Middleware) (0) | 2023.11.13 |
| 쿠키와 세션 (0) | 2023.11.08 |
| [Express.js] Router (0) | 2023.11.01 |