네트워크

쿠키 / 세션 / JWT

rnrwk0502 2024. 7. 29. 23:17

쿠키(Cookie)란?

쿠키는 사용자를 기억하기 위해 서버가 사용자의 부라우저에 저장하는 작은 데이터(작은 기록 정보 파일)라고 할 수 있다.

 

사용자가 사이트에 방문하면,

1. 클라이언트가 서버에 첫 로그인 인증 요청을 보내면,

2. 서버는 회원 DB에 사용자 확인을 한다.

3. 서버는 클라이언트에게 응답으로 쿠키에 사용자 인증 정보를 담아서 보낸다.

4. 클라이언트는 서버에게 받은 쿠키를 브라우저에 저장 후 요청할 때마다 로그인 정보가 담긴 쿠키를 함께 서버로 보낸다.

5. 서버는 쿠키에 있는 로그인 정보를 확인하고,

6. 클라이언트가 요청한 데이터를 보낸다.

 

쿠키의 장점

  • 인증/인가 작업이 쉽고 간단하다.
  • 사용자의 인증 정보를 클라이언트가 관리하기 때문에 서버 부하가 적다.

쿠키의 단점

  • 사용자의 주요 정보를 매번 요청에 담기 때문에 보안상 문제가 있다.
  • 클라이언트에서 쿠키 정보를 쉽게 변경, 삭제할 수 있고, 가로채기 당할 수 있다.
  • 쿠키의 데이터 크기가 제한적이고, 또 크기가 커진다면 네트워크 부하가 심해진다.

 

세션(Session)

세션 인증 방식은 세션으로 사용자의 인증 정보를 관리하는 방식이다.

1~2. 클라이언트가 서버에 첫 로그인 인증 요청을 보내면, 서버는 회원 DB에 사용자 확인을 한다.

3~4. 서버는 세션 저장소(DB)에 저장하고, 클라이언트 별 유일한 세션 ID를 부여한다. ( 보안 강화 )

5. 해당 세션ID는 클라이언트에게 돌아와 브라우저에 쿠키 값(세션 쿠키)으로 저장된다.

6. 클라이언트는 요청을 보낼 때 이 세션 쿠키를 함께 보낸다.

7~8. 서버에서는 해당 세션 쿠키를 가지고 세션 저장소에 저장된 사용자 데이터를 확인하고 허가한다.

9. 클라이언트가 요청한 데이터를 보낸다.

 

이처럼 세션 ID를 사용해 어떤 사용자가 서버에 로그인 되어있음이 지속되는 상태를 '세션'이라고 한다.

 

세션의 장점

  • 사용자의 로그인 정보를 주고 받지 않기 때문에 상대적으로 안전하다.
  • 한 사용자가 디바이스별 인증을 관리할 수 있다. ( ex. pc로 접속 시 다른 기기의 접근을 막을 수 있다. )
  • 비정상적인 접근 신고가 들어오면, 서버에서 판단하여 해당 세션을 삭제해서 바로 로그아웃시킬 수 있다.

세션의 단점

  • 사용자를 식별할 수 있는 값인 세션ID를 생성하고, 서버에 저장해야하는 작업이 생긴다.
  • 요청이 많아지면 서버 부하가 심해지고 메모리가 부족해질 수 있다.
  • 혹시나 서버에 문제가 있어 메모리가 꺼져버린다면 휘발성이라 데이터가 모두 날라간다.

 

JWT(JSON Web Token)

JSW를 간단하게 설명하면, 사용자의 인증 정보와 서버의 SecretKey로 서버가 생성한 토큰이다.

 

JWT의 구조

JWT는 Header, Payload, Signature 3개로 구성되어 있다.

- Header

  • alg : Signature에서 사용하는 알고리즘
  • typ : 토큰 타입

- Payload

사용자 정보의 한 조각인 클레임(claim)이 들어있다.

  • sub : 토큰 제목
  • aud : 토큰 대상자
  • iat : 토큰이 발급된 시각
  • exp : 토큰의 만료 시각

- Signature

Signature는 헤더와 페이로드의 문자열을 합친 후에, 헤더에서 선언한 알고리즘과 Key를 이용해 암호화한 값이다.

헤더와 페이로드는 단순히 인코딩된 값이어서 누구든 복호화가 가능하나, Signature는 Key가 없으면 복호화할 수 없다.

이를 통해 보안상 안전하다는 특성을 가질 수 있게 되었다.

 

JWT의 작동

1~2. 클라이언트가 서버에 첫 로그인 인증 요청을 보내면, 서버는 회원 DB에 사용자 확인을 한다.

3. 로그인 성공 시, 서버는 로그인 정보를 Payload에 담고, Secret Key를 사용해서 JWT를 발급한다.

4. 서버가 JWT를 클라이언트에 전달한다. 이때, 전달방법은 개발자가 정한다.

5. 클라이언트는 전달받은 JWT를 저장한다. ( 쿠키, local storage 등 ) 

6. 클라이언트가 서버에 요청할 때마다 JWT를 요청에 포함시켜 함께 전달한다.

7. 서버는 클라이언트가 전달한 JWT의 Signature를 Secret Key로 복호화한 후, 위변조 여부 및 유효기간을 검증한다.

8. 검증에 성공하면, JWT에서 사용자 정보를 확인하고 요청에 응답한다.

 

JWT의 장점

  • 로컬에 저장하기 때문에 서버 용량에 영향을 끼치거나 받지 않는다.
  • 보다 안전하다.( 공개키/개인키 or 비밀키를 통해 서명되기 때문에 )
  • http헤더나 url파라미터를 통해 간단하게 전송되기 때문에 네트워크 부하가 적다.

JWT의 단점

  • 구현 복잡도가 증가한다.
  • JWT에 담는 내용이 커질수록 네트워크 비용이 증가한다.
  • Payload 자체는 암호화되지 않기 때문에 사용자의 중요한 정보는 담을 수 없다.

 

출처

https://ksh-coding.tistory.com/113

 

[인증/인가] 쿠키 VS 세션 VS 토큰 (JWT) 방식 중 무엇을 사용할까?

대표적으로 사용자의 인증/인가를 처리할 때 사용하는 방식이 다음과 같이 3가지가 있습니다. 1. 쿠키 방식 2. 세션 방식 3. JWT 토큰 방식 위의 3가지 방식들의 장단점을 살펴보고, 무엇을 사용해

ksh-coding.tistory.com

https://velog.io/@kimdy0915/%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98-JWT%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

인증 방식(쿠키, 세션, JWT)에 대해 알아보자

이번 글에서는 웹 어플리케이션의 인증 방식에 대해 알아보려고 한다.인증 방식을 알아가기에 앞서, 인증과 인가란 무엇인지, 웹 어플리케이션 인증에 어떤 특수성이 있는지, 어떤 인증 방식이

velog.io

https://velog.io/@chuu1019/%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-JWTJson-Web-Token

 

😎 알고 쓰자, JWT(Json Web Token).

jwt 토큰이 어떻게 구성되어있는지, 왜 jwt 토큰을 사용해야하는지 아시나요?

velog.io

 

'네트워크' 카테고리의 다른 글

HTTPS란?  (0) 2024.07.29
naver.com을 검색하면?  (0) 2024.07.29
도메인 & DNS  (0) 2024.07.29
HTTP란?(1)  (0) 2024.07.24
TCP vs UDP(feat.통신 프로토콜이란?)  (0) 2024.07.10