본문 바로가기
BackEnd

[NODE] Bcrypt 와 JWT 사용하는 법

by SoriKim 2023. 11. 28.
반응형

1. Node.js에서 Bcrypt 사용하는 방법

1️⃣ Bcrypt 설치 

npm install bcrypt --save

 

2️⃣ Bcrypt로 비밀번호 암호화(Async_동기)

const bcrypt = require("bcrypt"); ---- (1)

const password = 'password'; ---- (2) 
const saltRounds = 12; ---- (3)

const makeHash = async (password, saltRounds) => {
  return await bcrypt.hash(password, saltRounds); ---- (4)
}

const main = async () => { 
  const hashedPassword = await makeHash(password, saltRounds); 
  console.log(hashedPassword);
}

main()
=> b'$2b$12$76taFAFPE9ydE0ZsuWkIZexWVjLBbTTHWc509/OLI5nM9d5r3fkRG'
  • (1): bcrypt 모듈 import
  • (2): 암호화할 평문
  • (3): Cost Factor
  • (4): hash() method로 암호화, 첫 번째 인자로 암호화하고 싶은 평문이 두 번째 인자로 Cost Factor가 들어감. 

 

3️⃣ Bcrypt 검증

const checkHash = async (password, hashedPassword) => {
  return await bcrypt.compare(password, hashedPassword) ---- (1)
}

const main = async () => {
  const hashedPassword = await makeHash("password", 12);
  const result = await checkHash("password", hashedPassword);
  console.log(result);
};

main()
=> true(or false) ---- (2)
  • (1): compare() method로 평문과 암호화된 값 비교, 첫 번째 인자로 평문이 두 번째 인자로 암호화된 값이 들어감
  • (2): 비교 결과, 평문과 암호화된 값을 비교해 같으면 true를 다르면 false가 return

 

2. Node.js에서 JWT 사용하는 방법 

1️⃣ jsonwebtoken 모듈 설치 

npm install jsonwebtoken --save

 

 

2️⃣ JWT 발급

JWT를 발급받기 위해서는 'jwt.sign' 메서드를 사용합니다. 이 메서드는 페이로드, 비밀 키, 그리고 옵션을 입력으로 받아 JWT를 생성합니다. 

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

const payload = { username: 'john.doe', role: 'user' };

// JWT 생성
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log('Generated Token:', token);

위 코드에 'payload'는 토큰에 담을 정보를 나타내며, 'secretKey'는 서명에 사용할 비밀 키입니다. 

'expiresIn'은 토큰의 유효기간을 설정합니다. 

 

3️⃣ JWT 확인(검증)

JWT를 확인(검증)하기 위해서는 'jwt.verify' 메서드를 사용합니다. 이 메서드는 토큰, 비밀 키, 그리고 콜백 함수를 입력으로 받아 JWT를 확인합니다. 

jwt.verify(token, secretKey, (err, decoded) => {
  if (err) {
    console.error('Token verification failed:', err);
    // 토큰이 유효하지 않은 경우 처리
  } else {
    console.log('Decoded Token:', decoded);
    // 토큰이 유효한 경우 처리
  }
});

위 코드에서 'token'은 확인할 JWT를 나타내며, 'secretKey'는 발급 시 사용된 비밀 키입니다. 콜백 함수에서는 'err'와 'decoded'를 받게 되는데, 'err'가 'null'이면 토큰이 유효하고, 'decoded'에는 토큰에 추출한 정보가 들어 있습니다. 

 

 

반응형

댓글