logo

JEONGGON

    블로그
github
mode
목 차
down-arrow

CS JWT

2024.04.16.

post-thumbnail

JWT

1. JWT(JSON Web Token)

1-1. JSON

  • JSON(JavaScript Object Notation)은 데이터를 주고받기 위해 사용하는 경량 데이터 형식 중 하나임
  • 키-값의 쌍으로 이루어진 데이터 객체를 사용함

1-2. Session

  • 서버에서 가지는 객체로 특정 사용자의 로그인 정보 등을 유지하기 위해 사용함

- 세션 장점

  • 클라이언트에게 세션ID를 제공하고 중요정보를 서버가 가짐
  • 민감한 데이터를 클라이언트에 직접 보내지 않음

- 세션 단점

  • 악의적인 공격자가 세션ID를 탈취하여 사용자를 도용할 수 있음
  • 세션ID 탈취 시, 많은 권한과 개인정보를 탈취당할 수 있음
  • 서버에 세션 정보가 저장되는 경우, 서버에 부하를 줄 수 있음

1-3. Token 인증 방식

  • 클라이언트에서 로그인 요청 시, 서버는 토큰을 생성하고 해당 토큰을 응답함
  • 클라이언트는 토큰을 저장하고, 이 후 토큰과 함께 요청을 보냄
  • 서버는 토큰을 검증하고 응답함
  • 토큰에 사용자의 정보가 포함되어 서버는 DB를 조회하지 않고 토큰을 검증할 수 있음
  • 서버는 비밀 키(key)만 가지고 토큰 검증을 수행 할 수 있음

1-4. JWT

  • 인증에 필요한 정보를 암호화한 JSON 형식의 토큰
  • 해당 토큰을 HTTP 헤더에 포함시켜 서버가 클라이언트를 식별 할 수 있도록 함
  • 초기에 서버에서 토큰을 발급하고 클라이언트는 Access Token을 이용해 요청
  • 추후, Refresh Token으로 Access Token 재요청하여 서버에서 Access Token을 재발급함

- JWT 구성요소

  • Header : 사용할 해시 알고리즘
    • ex) {“alg”: “HS256”, “typ”: “JWT”}
  • Payload : 키-값으로 이루어진 실질적인 정보로서 이 페이로드를 서버에 전달함
    • ex) {“sub”: “user”, “id”: “admin”}
  • Signature : (헤더 + 페이로드 + 비밀 키(key)) 정보를 해싱하여 클라이언트에 전달

- JWT 장점

  • 데이터 변경 시, 해시 값이 변경되므로 Payload 수정이 불가능함(위변조 방지)
  • 세션처럼 서버가 세션ID를 가지고 있을 필요없음
  • 즉, 상태정보를 저장하지 않아도 되므로 무상태성(stateless)이 유지됨
  • 토큰 기반이므로 서로 다른 웹 서버에 대해서도 동작함 (쿠키와의 차이)

- JWT 단점

  • 토큰 자체의 데이터 길이가 김
  • 페이로드는 암호화하지 않아 중요한 정보 담기에 적절하지 않을 수 있음
  • 토큰 탈취 시, 보안문제가 되므로 토큰에 사용기한을 부여함
csauthenticationjwt
profile

조정곤

주니어 프론트엔드 개발자

github
linkedin
instagram
email

< 이전글

CS Memory

다음글 >

CS OAuth

Computer_science 포스트 (10)

down-arrow
CS CLICS Request PUT, PATCHCS REST APICS 쿠키, 세션CS 서버CS 컴퓨터 구조CS OAuthCS JWTCS CPUCS Memory