Computer Science/Network

쿠키(Cookie), 세션(Session), 토큰(Token)의 차이점

2mukee 2022. 12. 27. 22:21
320x100
320x100

쿠키, 세션 토큰의 필요성

: HTTP 통신은 요청과 응답이 종료되면 상태가 유지되지 않기 때문에 상태를 기억하기 위해 사용

: 클라이언트의 구분과 상태 확인을 위해 필요

 

 

 

쿠키 (Cookie)

: 서버가 클라이언트 측에 저장하고 싶은 정보로, 서버가 응답 헤더에 담아 보내면 클라이언트 (브라우저)는 이를 스토리지에 저장

: 클라이언트는 서버에 요청할 때마다 쿠키를 함께 서버에 전송

: 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트를 식별

 

 

 

세션 (Session)

: 비밀번호와 같은 인증 정보를 세션 저장소에 저장하고 이 데이터를 식별하기 위해 session id를 부여

: 이 세션 정보는 서버에 저장됨

 

 

 

 

쿠키와 세션

: 사용자 정보를 서버의 세션 저장소에 저장하고, 세션 ID를 생성

: 세션 ID를 HTTP 헤더에 담아 클라이언트에 전송

: 클라이언트 (브라우저)는 세션 ID를 포함한 쿠키를 저장

: 인증이 필요한 요청에 쿠키를 HTTP 패킷에 담아 서버에 요청

 

- 쿠키와 세션의 차이

: 세션은 서버에서 가지고 있는 클라이언트의 정보

: 쿠키는 서버에서 발급된 세션을 열기 위한 키를 포함한 인증에 필요한 정보

 

- 쿠키와 세션의 필요성

: 쿠키만으로 인증을 할 경우 HTTP 요청을 탈취하면 모든 정보를 가져올 수 있음

: 쿠키는 조작될 가능성이 있어 단독으로 인증에 사용할 경우 위험

: 보안과 관련없는 기능에는 유용하게 사용 가능

 

 

 

 

쿠키/세션 방식의 장단점

- 장점

: 쿠키가 담긴 HTTP 요청이 노출되더라도 쿠키에는 유의미한 값이 존재하지 않음 (중요한 정보는 서버 세션에 존재하기 때문)

: 고유의 ID 값을 발급 받기 때문에 일일이 데이터를 확인하지 않고 서버 자원에 접근 가능

 

- 단점

: 세선 하이재킹 공격 위험 (HTTPS를 사용해 패킷을 탈취해도 정보를 읽기 힘들게 하거나 세션에 유효시간을 부여하여 해결 가능)

: 서버에 추가적인 저장공간 필요 (세선 저장소 필요)

 

 

 

 

토큰 (Token)

: 보조 서비스를 통해 서버 요청을 확인하고, 확인이 완료되면 서버가 토큰을 발급하여 요청에 응답

: 액세스 계층을 하나 더 사용하는 것이기 때문에 도용과 침투가 어려움

: 서버에서 공간을 차지하지 않음

 

- 연결형 토큰

: 키, 디스크, 드라이브 및 기타 물리적 장치가 시스템에 연결되어 액세스를 허용

: USB 디바이스나 스마트카드가 이에 해당

 

- 비접촉형 토큰

: 디바이스와 서버의 연결 없이 가까운 거리에 있음으로써 인증

: MS의 매직링

 

- 분리형

: 디바이스가 다른 디바이스와 접촉하지 않고도 인증 가능

: 휴대전화를 이용한 인증

 

- 토큰의 인증절차

1. 요청: 클라이언트가 서버에 액세스 요청

2. 확인: 서버가 클라이언트의 액세스 가능 여부 확인

3. 토큰: 서버가 인증 디바이스와 통신. 확인 완료 후 토큰을 발급하여 클라이언트에 전달

4. 저장: 작업이 지속되는 동안 토큰이 클라이언트 (브라우저)에 저장됨

 

 

 

 

JWT Token (JSON Web Token)

: 인증에 필요한 정보들을 암호화 시킨 개방형 표준 토큰

: 클라이언트는 액세스 토큰을 HTTP 헤더에 실어 서버에 전송

: 토큰은 임의로 생성된 비밀번호와 같이 동작

: 제한된 수명을 가지며, 한번 만료된 토큰은 사용할 수 없음

 

- 헤더

: 데이터의 암호화 방식과 타입 등을 정의

: alg (서명에 사용하는 알고리즘)

: kid (서명에 사용하는 키를 식별하는 값)

 

- 페이로드

: 서버에서 보낼 데이터 (일반적으로 user의 id와 유효기간 등 포함)

 

- 서명 

: base64 방식으로 인코딩한 헤더, 페이로드, 비밀키의 조합

 

- 장점

: JSON으로 인코딩 하기 때문에 가볍고 접근성이 좋음

: 공개키와 개인키를 나누어 서명이 가능. HAMC 알고리즘을 사용한 암호화도 가능

: 웹 뿐만 아니라 모바일에서도 처리가 쉬우며 확장성이 뛰어남

: 세션/쿠키와 달리 발급 후 검증만 하기 때문에 추가 저장소가 필요하지 않음

 

- 단점

: 한 번 발급된 JWT에 대해서는 유효기간이 완료 될 때까지는 계속 사용이 가능

: 쿠키나 세션과 달리 토큰의 길이가 길어 인증요청이 많아 질수록 네트워크 부하 가중

: payload 자체는 암호화 되지 않기 때문에 민감정보 처리에 주의 필요

 

 

 

 

 

JWT 토큰의 보안전략

- 짧은 만료기한 설정

- Sliding Session

: 서비스를 지속적으로 이용하는 클라이언트에게 토큰 만료 기한을 늘려주는 방법

 

- Refresh Token

: 클라이언트의 로그인 요청 시 서버에서 만료기한이 더 긴 토큰을 전송하는 방법

: 새로운 토큰을 발급하고 검증하기 위해 서버에 별도로 토큰을 저장해야함

 

 

 

 

JWT 토큰의 인증절차

1. 사용자가 로그인을 요청

2. 서버에서는 계정 정보를 읽어 사용자를 확인한 후 사용자의 고유 ID 값을 부여하고 기타 정보와 함께 payload에 저장

3. JWT 토큰의 유효기간 설정

4. 암호화할 비밀키를 이용해 Access token 발급

5. 사용자는 Access token을 받아 브라우저에 저장한 후 인증이 필요할 요청마다 토큰을 헤더에 실어 서버로 전송

6. 검증이 완료되었을 때 payload를 디코딩하여 사용자 ID에 맞는 데이터를 가져옴

 

 

 

세션 / 쿠키 방식과 JWT 토큰의 차이

: 세션/쿠키 방식의 경우 세션 저장소에 사용자 정보를 저장하지만, JWT는 토큰안에 사용자의 정보를 저장

: 클라이언트 입장에서는 HTTP 헤더에 세션 ID나 토큰을 실어서 보낸다는 점에서 동일하지만 서버 입장에서는 인증을 위해 암호화를 한다와 별도의 저장소를 이용한다의 차이점이 존재

 

 

 

 

 

 

 

 

Refference

 

쿠키, 세션, 토큰의 차이점

Authentication : 인증. 내가 누구인지 증명 ! 해주는 것. Authorization : 인가. 음.. 너구나 ! ok 통과다

velog.io

 

Cookie, Session, Token 의 차이점

Cookie, Session, Token 의 차이점 Cookie, Session, Token 의 차이점 계정 정보를 요청 Header 에 넣는 방식 Session / Cookie 방식 인증 절차 Session 과 Cookie 의 차이점 장단점 Token 기반 인증 방식 JWT Token 인증절차

tofusand-dev.tistory.com

 

토큰 기반 인증란 무엇인가? | Okta Identity Korea

토큰 기반 인증이란 사용자가 자신의 아이덴티티를 확인하고 고유한 액세스 토큰을 받을 수 있는 프로토콜을 말합니다. 그렇다면 토큰 기반 인증에는 어떤 종류가 있는지, 그리고 이를 사용했

www.okta.com

 

JWT(JSON Web Token)의 개념부터 구현까지 알아보기

JWT(JSON Web Token) JWT 는 유저를 인증하고 식별하기 위한 토큰(Token)기반 인증이다. RFC 7519 에 자세한 명세가 나와있다. 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나

pronist.dev

 

 

300x250
728x90