기술면접 개념 정리
[기술면접] JWT
Ama_grammer
2024. 11. 25. 23:26
🪙 JWT란?
JWT(JSON 웹 토큰)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한
간결하고 독립적인 방법을 정의하는 개방형 표준(RFC 7519)
⁉️ JWT 토큰의 구조 (Header + Payload + Signagture)
Header: 토큰의 유형(JWT)과 사용된 서명 알고리즘을 포함
{
"alg": "HS256",
"typ": "JWT"
}
Payload: 토큰에 포함된 데이터, 즉 클레임(claim)을 포함
- iss: 토큰 발급자(Issuer)
- sub: 토큰 주체(Subject)
- exp: 토큰 만료 시간(Expiration)
- iat: 토큰 발행 시간(Issued At)
- 커스텀 클레임: 예를 들어 사용자의 ID, 권한 수준 등이 포함될 수 있음
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature: 토큰의 무결성을 보장하기 위해 생성
header와 payload를 특정 알고리즘(e.g., HMAC SHA256)으로 해싱한 후 비밀키를 사용해 서명
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
JWT 토큰은 최종적으로 base64url 인코딩된 header.payload.signature 형태의 문자열이 됨.
⁉️ JWT 토큰이 사용되는 과정
- 로그인
- 토큰 생성
- 클라이언트의 토큰 저장
- 일반적으로 HTTP 쿠키, localStorage, 또는 sessionStorage를 사용하여 저장
- 보안 측면에서는 cookie에 저장하고 HttpOnly와 Secure 옵션을 사용하는 것이 좋음.
- 요청 시 토큰 전송
- http Method
- GET /api/protected Authorization: Bearer <JWT>
- 서버의 토큰 검증
- 응답 및 토큰 재발급
⁉️ JWT 장점 및 주의점
😄 장점
서버 상태를 유지할 필요 X
- 서버는 세션을 저장하지 않아도 됨
- 모든 인증 정보는 토큰에 내포되어 있어 서버 확장이 쉬움
확장성
- 여러 서버 간 인증 정보 공유가 간편
- 분산 시스템에서 사용하기 좋음
❗️주의점
보안
- 토큰 자체에 민감 정보를 담으면 안 됨
- https를 사용하여 전송해야 안전
- 토큰을 저장할 때 보안을 위해 XSS나 CSRF 공격에 대비해야함
토큰 크기
- JWT는 크기가 커질 수 있으므로, Client - Server 간 데이터 전송이 많은 경우 부하가 발생할 수 있음.
- load handle
- JWT 최소화
- JWT 압축
- 토큰 분리
- 세션 기반 인증 고려
- 서버 측 토큰 검증 캐싱
💡용어 정리
XSS (Cross Site Scripting)
공격자가 하나 이상의 웹 스크립트를 통해 코드를 합법적인 웹 사이트 또는 웹 앱에 삽입하는 전술
CSRF (Cross Site Request Forgery)
쿠키의 동작 방식을 이용한 공격 방법으로 사용자의 세션 큐키 또는 다른 인증정보를 이용하여 사용자 모르게
공격자가 의도한 서비스 요청을 처리하는 공격 방법
💡 참고 사이트
https://www.cloudflare.com/ko-kr/learning/security/how-to-prevent-xss-attacks
https://www.cloudflare.com/ko-kr/learning/security/threats/cross-site-request-forgery