1. 인증(Authentication)이란?
인증(Authentication)은 시스템이나 서비스가 사용자가 누구인지 확인하는 과정
사용자가 주장하는 신원이 실제로 그 사람인지 확인
2. JWT 토큰이란?
JWT (JSON Web Token) 는 이름 그대로 JSON 형식의 데이터를 안전하게 전달하기 위한 토큰이다
주로 로그인 인증, 권한 부여, 사용자 정보 전달 등에 사용되며, 토큰 자체에 필요한 정보(Claims)를 포함하고 있어서 별도의 서버 저장소 없이도 인증 처리가 가능한 Self-Contained 구조이다.
주요 특징
- Self-contained: 토큰 자체에 인증 정보가 포함되어 있음
- Stateless: 서버가 별도로 세션을 저장하지 않아도 됨
- 빠른 처리: DB 조회 없이 토큰만으로 인증 가능
2.1 JWT의 구조
JWT는 Header, Payload, Signature 3가지 파트로 구성되어있으며, . 구분자로 구분을 하게된다.
1. Header
- 토큰의 타입(JWT)과 서명 알고리즘(ex: H256) 정보를 포함함
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload
- 사용자에 대한 정보(Claims)를 담고 있으며, 이 정보는 암호화되지 않고 단순 인코딩만 되어 있어서 누구나 다 디코딩이 가능함
{
"user_id": 42,
"username": "may",
"role": "admin",
"exp": 1710000000 // 만료 시간 (Unix timestamp)
}
3. Signature
- Header와 Payload를 합친 문자열 비밀 키 (Secret)로 서명한 값
- 이 서명을 통해 데이터의 위변조 여부를 검증할수 있음
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
3. JWT의 장단점
3.1 장점
- Stateless (무상태): 서버가 세션을 저장하지 않아도 되므로 서버 확장(scale-out)에 유리
- 빠른 인증 처리: DB조회 없이 토큰만으로 인증 가능 -> 성능 향상
- 다양한 클라이언트 지원: 모바일, 웹 등 다양한 플랫폼에서 공통 방식으로 사용 가능
- 정보 전달 기능: 사용자 정보, 권한 등 다양한 클레임(Claims)을 직접 포함할수 있음
- 서명 기반 무결성 보장: Signature를 통해 데이터 위변조 여부 검증 가능
- OAuth2 등 표준 호환성: OAuth2, OpenID Connect 등과의 호환성이 높음
3.2 단점
- 토큰 취소 불가능: 발급된 토큰은 만료 전까지는 유효 -> 강제 로그아웃 처리 어려움
- 보안 민감성: Payload가 인코딩만 되어있어 노출 가능
- 토큰 탈취시 위험: 탈취된 토큰은 유효기간 동안 누구나 사용 가능
- 구현 복잡도: 자체 구현 시 보안 고려 사항 많음
'WEB 개발' 카테고리의 다른 글
| [AWS] EC2 인스턴스 생성하기 (2) | 2025.08.25 |
|---|---|
| [FastAPI] 비밀번호 변경 구현하기(feat. Redis, SMTP) (2) | 2025.07.25 |
| [FastAPI] JWT 로그인 로그아웃 구현 (SQLAlchemy, RESTful API, JWT) (0) | 2025.06.02 |
| [FastAPI] CRUD API 구현 (SQLAlchemy, RESTful API) (0) | 2025.05.27 |
| REST, REST API, RESTful API (0) | 2025.05.20 |