TIL | 인증과 인과, bycript

bubblegum·2024년 1월 27일
0

Today I learn(TIL)

목록 보기
18/84
post-thumbnail

인증과 인가

인증(Authentication)은 서비스를 이용하려는 사용자가 인증된 신분을 가진 사람이 맞는지 검증하는 작업을 뜻합니다. 일반적으로, 신분증 검사 작업에 해당합니다.

인가(Authorization)는 이미 인증된 사용자가 특정 리소스에 접근하거나 특정 작업을 수행할 수 있는 권한이 있는지를 검증하는 작업을 뜻합니다. 놀이공원에서 자유 이용권을 소지하고있는지 확인하는 단계라고 보면 좋습니다. 인증된 사용자 즉, 로그인 된 사용자만 게시글을 작성할 수 있는지 검증한다면, 이 과정을 인가(Authorization) 과정이라고 부른답니다. 인가(Authorization)기능은 사용자 인증 미들웨어를 통해서 구현할 수 있습니다.

bcrypt

일반적으로, 사용자의 비밀번호를 데이터베이스에 저장할 때, 보안을 위해 비밀번호를 평문으로 저장하지 않고 암호화 하여 저장합니다.

bcrypt 모듈은 입력받은 데이터를 특정 암호화 알고리즘을 이용하여 암호화 및 검증을 도와주는 모듈입니다. sparta라는 비밀번호를 bcrypt를 이용해 암호화하게 된다면 특정한 문자열로 변환됩니다. 이 변환된 문자열은 단뱡향 암호화되어 원래의 비밀번호(sparta)로 복구할 수 없게됩니다. 하지만, 입력된 비밀번호가 암호화된 문자열과 일치하는지는 비교할 수 있습니다. 이를 통해 사용자의 비밀번호가 올바른지, 아닌지 검증할 수 있게 되는것이죠.

bcrypt 암호화

import bcrypt from 'bcrypt';

const password = 'Sparta'; // 사용자의 비밀번호
const saltRounds = 10; // salt를 얼마나 복잡하게 만들지 결정합니다.

// 'hashedPassword'는 암호화된 비밀번호 입니다.
const hashedPassword = await bcrypt.hash(password, saltRounds);

console.log(hashedPassword); //$2b$10$OOziCKNP/dH1jd.Wvc3JluZVm7H8WXR8oUmxUQ/cfdizQOLjCXoXa

bcrypt 복호화

import bcrypt from 'bcrypt';

const password = 'Sparta'; // 사용자가 입력한 비밀번호
const hashed = '$2b$10$OOziCKNP/dH1jd.Wvc3JluZVm7H8WXR8oUmxUQ/cfdizQOLjCXoXa'; // DB에서 가져온 암호화된 비밀번호

// 'result'는 비밀번호가 일치하면 'true' 아니면 'false'
const result = await bcrypt.compare(password, hashed);

console.log(result); // true

// 비밀번호가 일치하지 않다면, 'false'
const failedResult = await bcrypt.compare('FailedPassword', hashed);

console.log(failedResult); // false
profile
황세민

0개의 댓글

관련 채용 정보