JWT와 비밀번호 암호화, 어떻게 다를까? 인증 과정 분석 🔍

나나's Brain·2024년 12월 17일
0

개념Study

목록 보기
15/21
post-thumbnail

💡 오늘은 로그인 인증 시 많이 사용되는 기술인 JWT비밀번호 암호화에 대해 요약해보자. 문득 회원 기능을 맡다가 로그인 기능을 구현할 때 왜 JWT를 사용하고, 비밀번호를 어떻게 안전하게 저장하는지 궁금해져서 이렇게 간단하게 정리해본다.

📁 JWT (JSON Web Token)란?

JWT는 JSON 데이터를 서명하여 변조를 방지하고, 사용자의 인증 및 권한을 확인하는 토큰 기반 인증 기술이다.

🔧 JWT의 구성

JWT는 3가지로 구성된다.
Header(헤더), Payload(페이로드), Signature(서명)

➡️ Header.Payload.Signature

Header: 토큰의 타입과 서명 알고리즘 정보가 포함
Payload: 인증된 사용자 정보(예: userId, role)를 포함
👉 중요! 민감한 정보는 넣지 말아야 한다.
Signature: 토큰이 변조되지 않았음을 검증하는 서명

✅ JWT 인증 과정

  1. 사용자가 아이디/비밀번호로 로그인 요청
  2. 서버는 비밀번호 검증 후 JWT 토큰을 발급해 클라이언트에 반환
  3. 클라이언트는 이 토큰을 Authorization 헤더에 실어 요청
  4. 서버는 토큰을 검증하고 사용자를 인증

🔒 JWT의 특징 !!

Stateless : 서버가 사용자 상태를 저장하지 않음
변조 방지 : 서명을 통해 데이터 변조 여부를 확인할 수 있음
유효기간 : 토큰에 만료 시간을 설정할 수 있음


📁 비밀번호 암호화란? (Bcrypt)

비밀번호는 평문 그대로 데이터베이스에 저장하면 안된다. 해킹 시 비밀번호가 그대로 노출되기 때문이다. 여기서 등장하는 것이 비밀번호 해싱이다.

🔧 Bcrypt란?

Bcrypt는 비밀번호를 안전하게 저장하기 위한 단방향 해싱 알고리즘이다.
Salt(랜덤 문자열)를 추가해 보안을 높이고, 동일한 비밀번호라도 서로 다른 해시값을 생성한다.

✅ 비밀번호 암호화 및 검증 과정

비밀번호 저장 시 : 사용자가 입력한 비밀번호를 Bcrypt로 해싱하며, 해싱된 비밀번호를 데이터베이스에 저장한다.

로그인 시 비밀번호 확인 : 사용자가 입력한 비밀번호를 같은 해싱 알고리즘으로 변환하고, 데이터베이스에 저장된 해시값과 일치하는지 확인한다.

🔒 Bcrypt의 특징 !!

단방향 해시 : 해싱된 비밀번호는 복구할 수 없습니다.
Salt 사용 : 같은 비밀번호라도 해시값이 서로 다르게 생성됩니다.
보안 강화 : Brute-force 공격(무작위 대입)으로부터 안전합니다.

✅ JWT + Bcrypt 로그인 인증 과정

로그인 인증 시 JWT와 Bcrypt를 어떻게 사용해야 할까?

1. 회원가입 과정
사용자가 비밀번호를 입력하면 Bcrypt로 비밀번호를 해싱
해싱된 비밀번호를 데이터베이스에 저장

2. 로그인 과정
사용자가 아이디/비밀번호를 입력
서버는 데이터베이스에서 해싱된 비밀번호와 비교해 검증
검증에 성공하면 JWT 토큰을 발급해 클라이언트에 반환
클라이언트는 이후 요청 시 JWT 토큰을 헤더에 실어 보냄
서버는 토큰을 검증해 사용자의 인증 여부를 확인

https://bcrypt-generator.com/ ⬅️ ( 요기 링크 첨부합니다 )
위와 같이 암호화된 비밀번호를 Decrypt 확인함으로써 확인이 가능하다.

📊 정리: JWT와 Bcrypt 차이

구분JWT (JSON Web Token)Bcrypt
목적인증 및 권한 부여비밀번호 암호화 및 검증
작동 원리JSON 데이터를 서명하여 변조 여부 확인비밀번호를 단방향 해싱 후 저장
사용 시점로그인 후 사용자 인증 및 요청 처리비밀번호를 저장하거나 입력값 검증 시 사용
보안변조 방지 (서명 검증), 암호화는 아님단방향 해시, Salt를 통해 보안 강화

💡 마무리

  • Bcrypt는 비밀번호를 안전하게 저장 및 검증하는 데 사용 !!!!!
  • JWT는 로그인 후 사용자 인증 및 권한 부여를 위해 사용 !!!!!
profile
"로컬에선 문제없었는데…?"

0개의 댓글