본문으로 바로가기

쿠키, 세션, JWT 비교

category 개발지식 2022. 5. 20. 00:50
반응형

쿠키와 세션 JWT 특징에 앞서  HTTP 프로토콜 특징에 대해 간략하게 알아보자

 

1. 비연결성(Connectionless)

  - 클라이언트와 서버가 연결하여 요청과 응답을 한번 주고받은 경우에 연결을 끊어버리는 특징

  1 클라이언트 Request(요청) -> 서버 

  2. 서버 Response(응답) -> 클라이언트

  3. Connectionless

 

2. 무상태(Stateless)

  - 요청과 응답을 주고받은 후 연결이 끊어졌을 때 상태 정보를 유지하지 않는 특징

  - ex) 네이버 웹 페이지에서 로그인 후에 네이버 웹툰 클릭할 경우에 자동으로 로그아웃 됨(연결끊음)

         네이버 웹툰 페이지에서 다시 로그인을 진행하여야 함

 

위와같은 HTTP 특징으로 사용자 정보 유지를 위해 쿠키 세션 JWT 가 필요 

인증방식

 

 1. 쿠키

   - 클라이언트(웹 브라우저)에서 관리되는 기록정보파일

   - 사용자 인증 유효시간을 명시(설정)할 수 있고 유효시간이 정해진다면 클라이언트(웹 브라우저)가 종료되어도 쿠키가 유지됨

   - 구성요소 (이름(KEY), 값(VALUE), 유효시간(유지), 도메인, 경로)

 

 1.1 쿠키 동작 원리

     1. 클라이언트(웹 브라우저) 서버에게 로그인 요청

     2. 요청받은 서버가 쿠키를 생성하여 HTTP 헤더에 쿠키를 포함하여 클라이언트로 전달

     3. 유효시간 동안 클라이언트(웹 브라우저)에서 쿠키를 가지고있음

     4. 유효시간 동안에 클라이언트(웹 브라우저)가 서버에게 가지고 있는 쿠키를  HTTP 헤더에 쿠키를 포함 요청

     5. 포함된 쿠키로 서버와 클라이언트 간 사용자 인증 진행

   

HTTP 요청을 탈취당할 경우 쿠키도 같이 탈취되어 사용자 정보 유출 가능성이 있다.

그래서 쿠키는 주로 장바구니 및 자동로그인에 사용된다. 

 

2. 세션

  - 세션은 쿠키를 기반으로 하지만 사용자 정보를 클라이언트에 저장하는 쿠키와 다르게 서버에 저장하여 관리

  - 서버에서는 클라이언트를 구별하기 위해 각각 세션ID를 부여하며 클라이언트가 종료되기 전까지 유지

  - 접속시간에 제한두어 강제로 세션을 끊을 수 있음

  - 서버에 저장하기 때문에 보안성이 높다

 

 2.1 세션 동작 원리

     1. 클라이언트가 서버에 요청

     2. 서버에서 클라이언트에게 고유한 세션ID를 부여하고 세션 저장소에 쿠키를 사용하여 저장하여 클라이언트에게 발급

     3. 앞으로 서버는 클라이언트와 요청시 쿠키에 담겨있는 세션ID와 서버측 저장소에 있는 세션정보를 비교

  

사용자가 많아질수록 서버에서 저장하고 관리하기 때문에 서버 메모리를 많이 차지하고 부하가 생기게 되어 

속도나 성능의 저하가 생길 수 있음

 

3. 토큰(Json Web Token)

  - 인증에 필요한 정보들을 암호화시킨 토큰(Claim 기반토큰)

  - 암호화된 토큰을 HTTP 헤더에 포함하여 전송이 가능 (보안성이 뛰어남)

     -> 서버에서 따로 보관 관리 할 필요가 없음

  - 토큰 자체를 쿠키에 담아서 보내줄 수 있음

  - 헤더(Header) : 3가지 요소를 암호화할 알고리즘 같은 옵션이 들어감

      - 타입(typ): 토큰의 타입

      - 알고리즘(alg): 해싱 알고리즘 

  - 페이로드(Payload) : 유저의 고유ID 등 인증에 필요한 정보

      - 정보는 속성과 값으로 표현(Claim)

  - 서명(Verify Signature) : 헤더와 페이로드를 연결하여 연결된 값을 비밀키로 암호화

    - Header.Payload.VerifySignature 생성됨

    - 비밀키가 없다면 복호화는 할 수 없음

 

   3.1 토큰 동작 원리

       1. 클라이언트가 서버에 요청 

       2. 서버에서 유저의 고유ID와 다른 인증 정보들을 Payload에 포함

       3. JWT의 유효기간(유지) 설정 

       4. 비밀키를 이용하여 토큰을 발급

       5. 발급된 토큰을 쿠키, Local Storage, Session Storage 선택하여 저장하여 서버에 토큰을 포함하여 요청

       6. 서버에서 토큰을 비밀키로 복호화하고 검증이 완료되면 응답한다.

  

  토큰은 서버에서 별도로 저장소 및 관리할 필요가 없어 세션처럼 서버측 부하가 없다.

  하지만 발급된 JWT는 삭제가 불가능하며 서버쪽에서 로그아웃을 할 수 없음

  그래서 유효 시간을 짧게 설정을 진행하거나 토큰을 DB에 저장하여 비교하는 방법을 사용해야 함

 

반응형

'개발지식' 카테고리의 다른 글

HTTP HTTPS 의 차이  (0) 2022.05.24
CORS 란  (0) 2022.05.21
SSR(Server Side Rendering), CSR(Client Side Rendering)  (0) 2022.05.20
Webpack 와 Babel 은 무엇일까?  (0) 2022.05.18
리액트는 왜 쓰는가?  (0) 2022.05.16