보안/인증과 권한 관리

[보안] JWT(JSON Web Token) 사용법과 보안 고려 사항: 개념, 구조, 안전한 관리 방법

CodeCaine Explorer 2024. 12. 10. 10:45
SMALL

안녕하세요😊 코드카인 여러분!

오늘은 JWT(JSON Web Token)에 대해 알아보겠습니다. 평소 로그인, 인증 같은 단어가 어렵게만 느껴졌다면 걱정하지 마세요! 오늘은 쿠키와 사탕 이야기를 통해 간단히 풀어보겠습니다.


JWT란 무엇인가요? 🍪🍬

JWT는 JSON Web Token의 줄임말로, 클라이언트와 서버 간 정보를 안전하게 주고받기 위한 토큰입니다. 마치 아이가 사탕을 받은 뒤 확인서(토큰)를 들고 가게에서 다시 사탕을 받는 것과 같아요.

한 번 인증을 마치면, 이 토큰을 통해 추가 확인 없이 서비스를 사용할 수 있게 해주는 편리한 방식입니다.


JWT의 구조 🏗️

JWT는 세 가지 부분으로 구성됩니다:

Header (헤더)

  • 토큰의 타입(JWT)과 사용된 암호화 알고리즘을 담고 있어요.
    예시:
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload (페이로드)

  • 실제로 전달하려는 정보를 담는 부분이에요. 예를 들어, 사용자 ID나 만료 시간을 포함할 수 있습니다.
    예시:
{
  "userId": "12345",
  "role": "admin",
  "exp": 1718842767
}

Signature (서명)

  • 정보가 변조되지 않았는지 확인하기 위한 검증값입니다.
    생성 방식:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT의 동작 원리 🎢

1. 로그인 요청
  사용자가 아이디와 비밀번호를 입력하면 서버가 인증을 확인한 뒤 JWT를 발급합니다.

2. 토큰 전달
  클라이언트는 서버로부터 받은 JWT를 저장(로컬 스토리지나 쿠키)합니다.

3. 인증 요청
  클라이언트가 서버에 요청을 보낼 때 JWT를 헤더에 포함합니다.

Authorization: Bearer <JWT>

4. 검증 및 응답
서버는 받은 JWT의 서명을 확인하고, 유효하면 요청을 처리합니다.


JWT와 쿠키의 차이 🍪 vs 🎫

  • JWT는 정보와 인증을 함께 담아 효율적이에요. (한 번에 인증과 데이터 전송 가능)
  • 쿠키는 클라이언트-서버 간 세션 정보를 유지하는 용도로 사용되죠. (클라이언트가 상태 저장을 신경 쓰지 않아도 돼요)

JWT 실전 코드로 이해하기 💻

JWT 생성 예제 (Node.js):

const jwt = require('jsonwebtoken');

const payload = { userId: 123, role: 'user' };
const secretKey = 'your-secret-key';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

console.log(token);

JWT 검증 예제 (Node.js):

const decoded = jwt.verify(token, secretKey);
console.log(decoded);

 


JWT를 사용하면 어떤 장점이 있을까요? 🌟

  1. 상태 유지 없이 인증
    서버는 클라이언트 상태를 저장하지 않아도 됩니다.
  2. 확장성
    여러 서버에서 토큰만으로 인증을 처리할 수 있어요.
  3. 간편한 전달
    JSON 형식이라 간편하게 사용하고 다양한 언어에서 지원합니다.

😊 마무리하며..

JWT는 로그인과 인증에 필수적인 기술입니다. 처음에는 복잡하게 느껴질 수 있지만, 그 원리를 이해하면 강력한 도구로 사용할 수 있답니다. 오늘도 한 걸음 성장한 여러분을 응원합니다! 💪

728x90
반응형
SMALL