JSON
- JSON(JavaScript Object Notation) 은 데이터를 주고 받기 위해 사용하는 경량의 데이터 형식 중 하나
- JSON 형식에서는 KEY - VALUE 쌍으로 이루어진 데이터 객체를 사용
Session
- 서버에서 가지고 있는 객체로, 특정 사용자의 로그인정보를 유지하기 위해 사용
[Pros]
- 클라이언트에게는 세션 ID(회원식별목적)를 제공하고, 회원에 대한 중요한 정보를 서버가 가진다.
- 민감한 데이터를 클라이언트에 직접적으로 보내지 않는다.
- 클라이언트 브라우저가 가지고 있는 세션ID 자체에는 개인정보를 포함하고 있지 않다.
[Cons]
- 악의적인 공격자가 세션 ID를 탈취하여 사용자인 척 위장할 수 있다.
=>세션 ID를 탈취당하는 경우, 사용자의 많은 권한 및 개인정보를 탈취당할 수 있다.
- 웹 서버에 세션 정보를 기록하고 있어야하므로, 접속자가 많을 때 서버에 메모리부하가 존재 할 수 있다.
TOKEN 인증방식
JWT(JSON Web Token)이란?
- JWT는 세가지 구성요소(Header, Token, Signature)를 가진다.
- 사용자가 인증을 수행하면, 서버는 다음의 정보를 가진 JWT토큰을 발급한다.
- Header: 사용할 해시 알고리즘등의 메타 정보를 포함
- Payload : Key - Value형식으로 이루어진 정보(Claim) 의 구성
=> 이 값을 서버로 전달한다.
- Signature : (Header + Payload + Key)정보를 해싱하여 Client 에게 함께 전달
** 해싱이란? 디지털 숫자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것
JWT인증 원리
- 사용자는 서버가 처음에 부여했던 권한만큼의 작업을 요청 할 수 있다.
- 데이터를 변경하면 해시 값이 변경되므로, 악의적인 공격자가 Payload를 수정하는 것이 불가능하다.
- 예를 들어 사용자의 등급이 1,2,3,4,5 일 때 5등급의 사람이 1등급으로 Payload를 변경해 보냈다고 할 경우, 서버의 키를 모르므로 서명값이 일치하지 않아 서버가 위조 여부를 알 수 있다.
JWT 방식의 특징
[Pros]
- 세션 기반 인증방식에 비해 서버가 DB에 세션 정보를 가지고 있을 필요가 없다.
- 각 해시값이 어떤 Header와 Payload를 가지는지 일일히 서버 DB에서 저장할 이유가 없다.
=> 서버에서 상태 정보를 저장하지 않아도되므로, 무상태성(stateless)가 유지된다.
[Cons]
- 세션에 비하여 토큰 자체의 데이터 길이가 길다.
- Payload는 암호화되지 않으므로 중요한 정보를 담기 적절하지 않을 수 있다.
- 토큰을 탈취당하는 경우 보안상의 문제가 발생할 수 있다.( ** 때문에 토큰에 사용 기한을 부여한다.)
JWT 유의사항
- Payload 자체는 중간자 공격에 의해 노출될 수 있으므로, 페이로드에 가능한 민감정보를 넣지 않는다.
- 기본적으로 JWT의 목적은 정보 보호보다는 다음의 목적에 가깝다.
1. 위조방지
2. 서버의 메모리 가용 이점 ( DB조회 필요 없음 )
** 실제인증 방식 사례
'CS지식' 카테고리의 다른 글
[CS지식] 프론트엔드 개발자가 알아야하는 컴공지식 - 컴퓨터 구조 기초2 (0) | 2023.06.20 |
---|---|
[CS지식] 프론트엔드 개발자가 알아야하는 컴공지식 - 컴퓨터 구조 기초 (0) | 2023.06.19 |
[CS지식] 프론트엔드 개발자가 알아야하는 컴공지식 - OAuth (0) | 2023.06.17 |
[CS지식] 프론트엔드 개발자가 알아야하는 컴공지식 - REST API (0) | 2023.06.16 |
[CS지식] 프론트엔드 개발자가 알아야하는 컴공지식 - HTTP (0) | 2023.06.16 |