DEV/Backend

JWT 다루기

Beomsu Koh 2023. 1. 26.

What is JWT(Json Web Token)

JWT는 Peer 간 JSON 개체를 안전하게 전송하기 위한 개방형 표준이다.
JWT 사용의 핵심은 Peer 간의 비밀성을 제공할 수도 있지만, 서명된 토큰을 제공한다는 것에 있다.

서명된 토큰은 그 자체로 무결성을 확인할 수 있기 때문이다.
공개/개인 키 쌍을 사용하여 토근에 서명할 때 서명 된 토큰은 당사자를 인증 할 수 있다

JWT 형식

  • JWT의 토근 구조는 .으로 구분된 세 부분이다.
    • Header
    • Payload
    • Signature

Header에는 토큰의 타입이 JWT인지, 어떤 알고리즘으로 암/복호화가 되는지를 알려준다
Payload에는 암호화 된 데이터 가 들어간다. Payload는 Base64로 인코딩 된다
Signature는 secret 등이 들어간다. 토큰이 전송 되는 동안 변형 되었는지 확인하기 위해 사용한다

실습 - 암호화부터 복호화까지!

import jwt from "jsonwebtoken";

const email = "gobeum2su@gmail.conm";
const ssoid = "!2341234";
const userid = 2;

console.log(">>", {email, ssoid, userid});

const payload = {email, ssoid, userid};
try {
  const signedJWT = jwt.sign(payload, haqqaton.token.secret, {expiresIn: "0s"});
  console.log(">>", signedJWT);

  const plain = jwt.verify(signedJWT, haqqaton.token.secret);
  console.log("plain > ", plain);
  
} catch (error) {
  console.log(error);
}

payload를 {eamil,ssoid,userid}로 구성한다
jwt 라이브러리에 따라 jwt.sign(payload,secret,option)을 입력하면 jwt으로 변환된다
jwt.verify(생성된 jwt 토큰,secret)을 입력하면 페이로드를 반환한다

마치며

jwt.io에 가시적으로 토큰 생성과 복호화 과정을 확인할 수 있으니 함 가보자!
base64로 인코딩 된 토큰을 굳이 왜 쓸까했는데, 주 목적이 무결성 확인에 있다는 점에서 한 수 배웠다

'DEV > Backend' 카테고리의 다른 글

TypeORM의 Where In 절  (0) 2023.01.30
Token 방식으로 로그인 구현하기  (0) 2023.01.27
TypeORM Releation 다루기  (0) 2023.01.26
Mac에서 MySQL 설치  (0) 2023.01.16
TypeORM 다루기  (2) 2023.01.14

댓글