목 차![down-arrow]()
〈
CS JWT
2024.04.16.

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 단점
- 토큰 자체의 데이터 길이가 김
- 페이로드는 암호화하지 않아 중요한 정보 담기에 적절하지 않을 수 있음
- 토큰 탈취 시, 보안문제가 되므로 토큰에 사용기한을 부여함
Computer_science 포스트 (10)
