JavaScript&TypeScript

JavaScript에서 jwt 발급

hjkang

jsonwebtoken 패키지 설치

npm i jsonwebtoken

 

 

토큰 발급

const jwt = require("jsonwebtoken");

// es 쓰는 경우
import jwt from "jsonwebtoken";
const token = jwt.sign({ email: "test@user.com" }, "secret_value");
console.log(token); // 로그를 찍어보면 eyJ로 시작하는 긴 문자열이 출력되는데, 이 값이 발급받은 토큰

 

 

토큰 검증

- jsonwebtoken 에서 제공하는 verify() 함수를 사용하여 검증한다.

- 첫번째 인자로는 토큰 문자열을 받고, 두번째 인자로는 sign() 함수와 동일하게 키를 받는다.

const token = jwt.sign({ email: "test@user.com" }, "secret_value");
const verified = jwt.verify(token, "secret_value");
console.log(verified); // { email: 'test@user.com', iat: 1678920125 }

 

위의 로그처럼 JWT 토큰에 부가적으로 저장되는 메타 데이터를 클레임(claim)이라고 한다.

iat 클레임은 해당 토큰이 발급된 시각에 대한 유닉스(Unix) 타임스탬프(timestamp)로 담고 있다.

 

 

토큰 읽기

- jsonwebtoken에서 제공하는 decode() 함수를 사용하여 읽을 수 있다.

- 토큰이 만료되어도 JSON 데이터 출력된다.

- 페이로드뿐만 아니라 헤더와 서명까지 읽고 싶다면 decode() 함수의 두 번째 인자를 통해서 complete 옵션을 true로 주면 된다.

const token = jwt.sign({ email: "test@user.com" }, "secret_value", {
  expiresIn: "1s",
});
await new Promise((r) => setTimeout(r, 1000));
const decoded = jwt.decode(token);
console.log(decoded); // { email: 'test@user.com', iat: 1678923334, exp: 1678923335 }

 

 


참고

- https://www.daleseo.com/js-jwt/