공삼
article thumbnail


토큰 (Token) 이란? 

토큰은 정보를 나타내는 작은 조각으로, 보통 문자열 형태로 표현된다.

 

컴퓨터 시스템에서 토큰은 인증, 권한부여, 데이터 교환등 다양한 컨텍스트에서 활용된다. 

 

토큰기반 인증방식 (Token-Based Authentication)

사용자 인증을 위해 사용되는 방식중 하나로, 인증상태를 서버에서 관리하는 대신, 토큰이라는 정보조각을 사용하여 인증을 처리한다.

 

토큰은 일반적으로 JSON Web Token (JWT)포맷을 따르며, 클라이언트와 서버간 통신에서 사용된다.

 

토큰기반 인증방식 작동방식

  • 로그인 (Login):
    • 사용자가 애플리케이션에 로그인을 시도한다. 이때 사용자가 제공한 신원 정보(일반적으로는 아이디와 비밀번호)를 서버에 제출한다.
  • 인증 (Authentication):
    • 서버는 사용자가 제공한 신원 정보를 검증하여 정상적인 경우, 사용자에게 고유한 토큰을 발급한다. 이 토큰은 사용자를 고유하게 식별하며, 사용자가 인증되었다는 것을 나타낸다.
  • 토큰 발급 (Token Issuance):
    • 서버는 사용자의 인증 정보를 기반으로 토큰을 생성한다. 이 토큰은 일반적으로 JSON Web Token (JWT) 형식을 따르며, 사용자의 신원 정보와 추가적인 정보(유효 기간, 권한 등)를 포함한다.
  • 토큰 전달 (Token Delivery):
    • 서버는 발급된 토큰을 클라이언트에게 전달한다. 이 토큰은 보통 HTTP 응답 헤더나 JSON 응답의 일부로 클라이언트에게 전송된다. 클라이언트는 향후 요청에서 이 토큰을 사용하여 인증을 진행한다.
  • 토큰 사용 (Token Usage):
    • 클라이언트는 향후 요청에서 인증이 필요한 모든 엔드포인트에 토큰을 포함시켜서 요청한다. 서버는 요청을 받은 후 토큰을 검증하고, 토큰이 유효하면 요청을 수락하고 해당 사용자의 요청을 처리한다.
  • 로그아웃 (Logout) 및 토큰 갱신 (Token Refresh):
    • 사용자가 로그아웃하거나 토큰의 유효 기간이 만료되면, 서버는 해당 토큰을 무효화하거나 새로운 토큰을 발급하여 사용자의 세션을 관리한다.

 

 

 


쿠키 ( cookie )

쿠키는 웹 브라우저에 저장되는 작은 데이터 조각이다. 서버는 클라이언트에게 쿠키를 전달하여 클라이언트측에 저장하고, 이후 해당 도메인을 방문할 때마다 브라우저가 해당 쿠키를 서버로 전송하며 인증하는데 사용한다. 

 

쿠키 특징

  • 클라이언트측에 저장되므로 서버에 의해 읽힐수 있다.
  • 만료기간을 설정하여 일시적인 데이터나 지속적인 데이터를 관리할 수 있다.
  • 도메인별로 쿠키를 구분하여 사용가능
  • 보안위험이 있기때문에 중요정보를 저장하기에 적합하지 않을 수 있다.

 

JWT Token을 쿠키에 저장하면 생기는 취약점



CSRF(Cross-Site Request Forgery) 공격
- JWTToken은 자동으로 모든 요청에 포함되어 CSRF 공격에 취약해질 수 있다. 공격자가 희생자의 계정에서 불법적인 작업을 수행할 수 있다. 

XSS(Cross-stie Scripting) 공격
- 쿠키에 저장된 토큰을 스크립트를 이용하여 탈취하거나 조작할 수 있는 경우, 악의적인 공격자가 토큰을 훔쳐 사용할 수 있다. 웹 애플리케이션은 사용자 입력 데이터를 적절히 검증하고 이스케이프 해야한다. 

보안 업데이트 관리
 - JWT토큰은 한번 발급되면 만료되거나 변경되지 않아 토큰의 유효기간을 적절히 관리해야한다. 토큰이 유출된 경우 재발급하고 관련된 보안 업데이트를 신속히 적용해야 한다.

 

세션 ( session )

세션은 쿠키와 반대로 서버측에 사용자의 상태를 관리하는 방식이다.

 

클라이언트가 서버에 접속하면 서버는 해당클라이언트에게 고유한 세션 ID를 부여하고, 이를사용하여 해당 클라이언트의 데이터를 서버에서 관리한다. 세션은 주로 사용자 인증정보를 저장하거나 클라이언트 상태를 유지하기 위해 사용한다. 

 

세션의 특징

  • 클라이언트측에는 세션데이터가 저장되지 않고 서버에서 관리된다.
  • 보안성이 높아 중요한 데이터 저장에 적합하다.
  • 사용자의 상태가 서버에서 관리되기 떄문에 동일한 브라우저라도 탭간에 데이터 공유가 어렵다.
  • 서버측에서 많은 세션을 보유하면 서버쪽에 과부하가 올 수 있다.

 


웹 스토리지 ( Web Storage )

웹 스토리지는 웹 브라우저에서 데이터를 클라이언트측에 저장하는 기술이다. 

 

웹 스토리지는 브라우저의 세션과 관련이 있으며, 사용자의 로컬 컴퓨터에 데이터를 보관하여 웹 에플리케이션의 지속성과 상태관리를 가능하게 한다.

 

로컬 스토리지 (Local Storage)

로컬스토리지는 사용자릐 로컬 브라우저에 데이터를 영구적으로 저장하는 기술이다. 

 

저장된 데이터는 브라우저를 종료하거나 컴퓨터를 재부팅해도 유지되며, 로컬스토리지에 저장된 데이터는 도메인별로 구분되며, JavaScript를 통해 쉽게 접근할 수 있다. 

 

세션 스토리지(Session Storage)

세션스토리지는 사용자의 브라우저 세션동안만 데이터를 저장하는 기능이다.

 

브라우저 탭이나 창을 닫을때는 데이터가 삭제된다. 따라서 임시 데이터나 세션기반 상태관리에 사용된다.

 

 

웹스토리지는 주로 클라이언트 측에서 상태, 사용자 환경설정, 토큰, 캐시데이터등을 저장하기 위해 활용된다.

 

위 두가지 스토리지는 JavaScript의 'localStorage' 와 'sessionStorage'객체를 통해 접근하고 조작할 수 있다. 

 

 

 

쿠키와 웹 스토리지 차이점

둘다 클라이언트측 브라우저에 데이터를 저장한다는 점이 같지만, 차이점이 있다.

 

일반적으로

웹 스토리지는 데이터의 크기가 크거나 장기간 유지되어야하는 경우 사용하며, 

 

쿠키는 작은 크기의 데이터를 임시로 저장하거나 브라우저 세션동안만 필요한 데이터를 저장하는데 사용된다. 하지만 만료기간을 설정하여 일정기간 유지되거나 지우게 할 수 있다. 

 

 

특징 웹 스토리지 쿠키
데이터 크기 상대적으로 큰 데이터 저장 작은 크기의 데이터 저장
데이터 유지 기간 로컬 스토리지: 영구적 / 세션 스토리지: 브라우저 세션 동안 만료 기간 설정 가능
데이터 공유 범위 도메인별로 데이터가 분리됨 도메인별로 데이터가 분리됨
사용 시나리오 사용자 설정, 환경, 상태 관리 로그인 정보, 세션 유지, 장바구니 등
클라이언트 접근 JavaScript API를 통해 조작 JavaScript API를 통해 조작
동기화 브라우저 탭/창 간에 데이터 공유 불가능 브라우저 탭/창 간에 데이터 공유 가능
데이터 손상 가능성 낮음 (서버에서 직접 접근 불가능) 상대적으로 높음 (브라우저에서 직접 수정 가능)

 

 

 

profile

공삼

@g_three

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!