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를 사용하면 어떤 장점이 있을까요? 🌟
- 상태 유지 없이 인증
서버는 클라이언트 상태를 저장하지 않아도 됩니다. - 확장성
여러 서버에서 토큰만으로 인증을 처리할 수 있어요. - 간편한 전달
JSON 형식이라 간편하게 사용하고 다양한 언어에서 지원합니다.
😊 마무리하며..
JWT는 로그인과 인증에 필수적인 기술입니다. 처음에는 복잡하게 느껴질 수 있지만, 그 원리를 이해하면 강력한 도구로 사용할 수 있답니다. 오늘도 한 걸음 성장한 여러분을 응원합니다! 💪
728x90
반응형
SMALL
'보안 > 인증과 권한 관리' 카테고리의 다른 글
[보안] 인증(Authentication)과 인가(Authorization)의 차이점 완벽 정리: 개념, 사례, 기술 설명 (0) | 2024.12.08 |
---|