[Node.js] bcrypt와 jwt 이해 및 사용법

BE/NodeJS 2023. 5. 29.

 

  목 록

  • bcrypt 설치
  • bcrypt란?
  • bcrypt 사용예시
  • bcrypt 비밀번호 비교 방법
  • jwt(json web token)란?
  • jwt 사용 예시

 

bcrypt 설치

 

npm install bcrypt

// Typescrypt의 경우

npm install @types/bctypt

 

 

bcrypt란?

 

  사용자의 비밀번호를 보호하는 역할을 한다. 이는 비밀번호를 '해시(hash)' 하는 데 사용되며, 이를 통해 데이터베이스에 안전하게 비밀번호를 보관할 수 있다. 

 

  해시된 비밀번호 예시:$2b$10$z9xgsRrjl62tJ/R.RRROvOJ6LSxaY.Fy8pG8Fq5akfjHSHn70cRzs

예시이며, 여기서 비밀번호를 해석하는 것은 매우 어렵다.

 

 

bcrypt 사용 예시

 

  bcrypt.hash('비밀번호(string)', salt 길이(Number) )

const bcrypt = require('bcrypt');
const saltRounds = 10;
const plainPassword = 'myPassword123';

bcrypt.hash(plainPassword, saltRounds)

 

 

bcrypt 비밀번호 비교 방법

 

 

bcyprt.compare('해시 전 비밀번호', '해시 된 비밀번호', 콜백)

 

JWT(json web token)란?

 

  세션(session)과 비슷한데, 세션은 입장권 번호만 가지고 있다고 한다면, JWT는 여러가지 정보를 가지고 있다.(참고: 유튜브 코딩애플)

 

JWT는 세 부분이 있는데 Header, Payload, Signature이다.

Header: 사용하는 해싱 알고리즘, 타입

Payload: JWT에 담기는 내용(필수적인 부분만 담음)

Signature: Secret 키 설정

 

 

JWT 사용 예시

 

  토큰 발급:  jwt.sign({ payload 내용 }, 'secret key', { options })

const jwt = require('jsonwebtoken');
const secretKey = 'mySecretKey';

const user = { id: 1, username: 'John' };

const token = jwt.sign(user, secretKey, { expiresIn: '1h' });

 

  토큰 검증:  jwt.verify('토큰', 'secret key', callback) - 여기서 callback은 혹시 토큰이 누군가에 의해 변경돼어서 맞지 않는 경우 처리

jwt.verify(token, secret, (err, decoded) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(decoded);
});