기술면접 개념 정리

[기술면접] 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 토큰이 사용되는 과정

  1. 로그인
  2. 토큰 생성
  3. 클라이언트의 토큰 저장
    • 일반적으로 HTTP 쿠키, localStorage, 또는 sessionStorage를 사용하여 저장
    • 보안 측면에서는 cookie에 저장하고 HttpOnly와 Secure 옵션을 사용하는 것이 좋음.
  4. 요청 시 토큰 전송
    • http Method
    • GET /api/protected Authorization: Bearer <JWT>
  5. 서버의 토큰 검증
  6. 응답 및 토큰 재발급

⁉️ JWT 장점 및 주의점

😄 장점

서버 상태를 유지할 필요 X

  • 서버는 세션을 저장하지 않아도 됨
  • 모든 인증 정보는 토큰에 내포되어 있어 서버 확장이 쉬움

확장성

  • 여러 서버 간 인증 정보 공유가 간편
  • 분산 시스템에서 사용하기 좋음

❗️주의점

보안

  • 토큰 자체에 민감 정보를 담으면 안 됨
  • https를 사용하여 전송해야 안전
  • 토큰을 저장할 때 보안을 위해 XSSCSRF 공격에 대비해야함

토큰 크기

  • JWT는 크기가 커질 수 있으므로, Client - Server 간 데이터 전송이 많은 경우 부하가 발생할 수 있음.
  • load handle
    1. JWT 최소화
    2. JWT 압축
    3. 토큰 분리
    4. 세션 기반 인증 고려
    5. 서버 측 토큰 검증 캐싱
💡용어 정리

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