[express.js] JWT

김민재·2024년 4월 2일

express.js

목록 보기
13/39

JWT(JSON Web Token)란?

  • 당사자간에 정보를 JSON 개체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준(RFC 7519)이다. 이 정보는 디지털 서명이되어 있으므로 확인하고 신뢰할 수 있다.

  • 정보를 안전하게 전할 때 혹은 유저의 권한 같은 것을 체크하기 위해서 사용하는 모듈

    JWT의 구조 - https://jwt.io/

    • JWT는 총 3등분으로 '.'을 기준으로 나뉘어져있다.
    • 빨간색: Header - 토큰에 대한 메타 데이터를 포함하고 있다.
    • 보라색: Payload - 유저 정보, 만료 기간, 주제 등등을 포함하고 있다.
    • 하늘색: Verify Signature - 보낸 사람에 의해 확인하는 데 사용되는 서명이다. 또한 변경이 되었는지, 안 되었는지 확인하는 데 사용되는 서명이다.
      • 서버에서 요청에서 같이 온 header랑 payload를 가져오고 서버 안에 가지고 있는 sercet key를 이용해 signature 부분을 다시 생성한다. 그 둘이 일치할 때 통과가 된다.

    JWT 사용법

  1. npm i jsonwebtoken dotenv

    • dotenv를 설치하는 이유는 jwt의 secret key를 env 파일에 담아줘야 외부로 유출 될 일이 없기 때문이다.
  2. 서버를 실행할 파일에서 jwt를 요청하고, 로그인을 할 때 토큰을 생성해줘야한다.

     const express = require("express");
     const jwt = require("jsonwebtoken");
     // jwt를 요청한다.
    
     const app = express();
     const port = 3000;
     const secretKey = "secretKey";
     // secretKey는 환경변수(.env)파일에 넣어야한다.
    
     app.use(express.json());
     // req.body 미들웨어
     
     app.post("/login", (req, res) => {
      const username = req.body.username;
      const user = { user: username };
    
      // jwt를 이용해서 Token 생성하기 payload + secret
      const accessToken = jwt.sign(user, secretKey);
      res.json({ accessToken });
       });
       // login 경로 들어가서 post 요청을 하면 jwt.sign()을 
       // 이용하여 accessToken을 생성한다.
    
      app.listen(port, (req, res) => {
      console.log("listening " + port);
      });
    • jwt를 요청하고, secretKey를 환경변수(.env) 파일에 넣어준다.
      로그인 시에 토큰을 생성해야 하기 때문에 jwt.sign을 이용해 토큰을 생성하고 accessToken 변수에 담아준다.

jwt.sign(payload, secretKey, [options, callback])

  • payload: 토큰에 포함될 정보를 담은 객체이다. 주로 사용자 식별자, 권한, 유효기간 등의 정보가 포함된다.

  • secretKey: 비밀 키 또는 개인키

  • options: 토큰의 유효 기간 등을 설정

  • callback: 비동기 식으로 작동할 때 사용된다.

    • jwt.sign() 함수는 위의 정보를 이용하여 토큰을 생성하고 문자열로 반환한다.

jwt.verify(token, secretKey, [options, callback])

  • token: 검증할 JWT 문자열

  • secretKey: 비밀 키 또는 공개 키

  • options: 토큰의 유효성을 검사하는 데 사용된다.

  • callback: 비동기 식으로 작동할 때 사용된다.

    • 제공된 토큰을 검증하고 검증이 성공하며 토큰에 포함된 정보를 JSON 객체로 반환한다.
profile
개발 경험치 쌓는 곳

0개의 댓글