반응형
JWT (JSON Web Token)
안녕하세요 여러분! 오늘은 웹 개발에서 사용되는 "JWT (JSON Web Token)"에 대해 알아보려고 해요! 🚀
JWT는 인증과 정보 교류를 위해 사용되는 토큰 기반의 인증 방식이에요. 웹 애플리케이션에서 사용자의 로그인 상태를 유지하고, 안전하게 정보를 전달하기 위해 많이 사용되고 있답니다. 😊
JWT의 구조
JWT는 세 개의 파트로 구성되어 있습니다. 각 파트는 점으로 구분되며, 각각은 Base64로 인코딩된 문자열로 이루어져 있어요:
- 헤더 (Header): JWT의 유형과 해시 알고리즘을 포함합니다. 헤더는 JSON 형태로 이루어져 있고, 일반적으로 "alg"와 "typ" 필드를 포함합니다.
- 페이로드 (Payload): JWT에 포함되는 정보를 담고 있습니다. 사용자의 식별자, 역할 등 원하는 정보를 추가할 수 있습니다. 페이로드 또한 JSON 형태로 이루어져 있습니다.
- 서명 (Signature): 서명으로 토큰이 변조되지 않았음을 검증합니다. 헤더와 페이로드, 서버에서 지정한 비밀 키를 이용하여 서명이 생성됩니다. 서명은 토큰의 무결성을 검증하기 위해 사용됩니다.
JWT의 사용 예시
JWT를 사용하여 사용자의 로그인 상태를 유지하는 예시를 살펴보도록 할게요. 여기서는 Node.js와 Express를 사용한 예시를 보여드릴게요:
// 라이브러리 설치
npm install jsonwebtoken
// server.js
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
// 로그인 라우트
app.post('/login', (req, res) => {
// 사용자 정보 확인
const user = { id: 1, username: 'john_doe' };
// JWT 생성
const token = jwt.sign(user, 'secret_key');
// JWT를 클라이언트에게 전송
res.json({ token });
});
// 보호된 라우트
app.get('/protected', (req, res) => {
// 헤더에서 JWT 가져오기
const token = req.headers.authorization.split(' ')[1];
// JWT 검증
jwt.verify(token, 'secret_key', (err, decoded) => {
if (err) {
// JWT 검증 실패
return res.sendStatus(403);
}
// JWT 검증 성공
res.json({ message: 'Protected data accessed!', user: decoded });
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
위의 코드는 Express 애플리케이션에서 JWT를 사용하는 예시입니다. /login 라우트에서 사용자 정보를 확인하고 JWT를 생성합니다. 그리고 클라이언트에게 JWT를 전송합니다. 이후 /protected 라우트에서는 헤더에서 JWT를 가져와 검증하고, 검증 결과에 따라 데이터에 접근 여부를 결정합니다. 간단하죠? 😄
결론
JWT는 웹 애플리케이션에서 인증과 정보 교류를 위해 사용되는 토큰 기반의 인증 방식입니다. 사용자의 로그인 상태를 유지하고 안전하게 정보를 전달하기 위한 간편하고 안전한 방법으로 많이 활용되고 있답니다. JWT를 활용하여 보안성을 높인 웹 개발을 진행해보세요! 🔒✨
COUPANG
쿠팡은 로켓배송
www.coupang.com
이 포스팅은 쿠팡 파트너스의 활동의 일환으로, 일정한 금액의 수수료를 받게됩니다.
반응형
'웹 개발 > 데일리 토픽' 카테고리의 다른 글
Access Token, Refresh Token 이해 (0) | 2024.01.22 |
---|---|
관계형 데이터베이스 (RDBMS) (0) | 2024.01.21 |
라우터 (Router) (0) | 2024.01.20 |
CSS 방법론 - BEM (0) | 2024.01.19 |
TDD (Test driven development) (0) | 2024.01.19 |