반응형
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'에는 토큰에 추출한 정보가 들어 있습니다.
반응형
'BackEnd' 카테고리의 다른 글
MySQL 설치방법에 대해서 (0) | 2023.11.29 |
---|---|
[DataBase] MySQL과 NoSQL에 대해서 (0) | 2023.11.28 |
인증(Authentication) Bcrypt와 JWT에 대해서 (0) | 2023.11.28 |
세션(Session)과 토큰(Token)에 대해서 (0) | 2023.11.24 |
인증 & 인가에 대해서 (0) | 2023.11.23 |
댓글