본문 바로가기
카테고리 없음

인증,보안 - Cookie, Session, Token

by 삐약 개발자 2025. 2. 5.

Cookie

HTTP 는 stateless(무상태성) 인데 정보가 유지가 될 수 있는 이유 = 쿠키

Cookie 란?

  • 웹사이트를 들어갔을때, 자동으로 정보를 저장함
  • 서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단
  • 해당 도메인에 대해 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달

하나의 탭 = 세션 즉 탭에있는 정보만 저장할땐 세션스토리지 사용함

보통 장시간 보존해야 하는 정보 저장에 적합함 (로그인 상태 유지, 테마 등등)
다양한 옵션을 설정할 수 있음 (시간 설정, 로그아웃 시 쿠키 삭제 등등)

Cookie 전달 방법

  1. 클라이언트가 페이지를 요청
  2. 서버에서 쿠키를 생성
  3. HTTP 헤ㅔ더에 쿠키를 포함시켜 응답
  4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
  5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
  6. 서버네서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

Cookie 종류

  • Session Cookie
    • 보통 만료시간을 설정하고 메모리에만 저장되며 브라우저 종료시 쿠키를 삭제
  • Persistent Cookie
    • 장기간 유지되는 쿠키, 파일로 저장되어 브라우저 종료와 관계없이 사용
  • Secure Cookie
    • HTTPS 에서만 사용, 쿠키 정보가 암호화 되어 저장

Session 이란?

  • 사용자가 이미 서버로부터 인증 받았음을 증명해주는 것이 세션
  • 서버에 할당되어 있음

이미 로그인에 성공했던 사용자임을 나타내기 위하여 세션 아이디 라는 데이터를 만듬
사용자는 서버로부터 받은 세션 아이디를 쿠키로 저장하고 앞으로의 요청에 함께 전달함
그리고 서버는 세션 아이디를 확인하고 서버가 보관하고 있는 세션 아이디중 일치하는 정보가 있는 지 확인후 작동
세션은 로그인 여부 등 사용자와 서버의 관계가 기억되어 보존되고 있는 상태를 말함

  • 일정시간 동안 같은 사용자로부터 들어오는 일련의 요청을 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
  • 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 칭함

세션기반 인증 (Session-based Authentication)

  • 로그인


인증에 따라 리소스의 접근 권한(Authorization) 이 달라짐

실제로 쓰기 어려운 이유

  • 확장이 까다로워서 힘듬
    • 하나의 서버로 돌리지 않기에 까다로움
    • 세션마다 서버가 있음
  • 서버에 부하하가 많이 옴!

Cookie 와 Session 의 차이점

  • 저장위치
    • 쿠키는 클라이언트에 메모리 또는 파일에 저장
    • 세션은 서버 메모리에 저장
  • 보안
    • 쿠키는 브라우저, 로컬 에 저장되어 보안이 비교적 취약
    • 세션은 보통 서버에 저장되어 비교적 안전함
  • 라이프 사이클
    • 쿠키는 브라우저를 종료하더라고 저장됨
    • 세션은 만료시간/날짜를 정해서 지워버릴 수 있음
  • 속도
    • 쿠키는 비교적으로 서버에 요청시 헤더를 바로 참조하면 되기에 속도빠름
    • 세션은 제공받은 세션아이디를 이용해서 서버에서 다시 데이터를 참조해야 하므로 속도가 비교적 느림

Cookie Options

  • Domain
    • 서버와 요청의 도메인이 일치하는 경우 쿠키 전송
    • 쿠키가 전송되게 될 호스트들을 명시
    • 명시되지 않았을 경우 현재문서의 위치의 호스트 일부를 기본값으로 함
  • Path
    • 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송
  • MaxAge or Expires
    • 쿠키의 유효기간 설정
    • MaxAge or Expires 속성이 없는 쿠키 = 세션쿠키
      • 세션쿠키는 현재 세션이 끝날때 삭제가 됨
  • HttpOnly
    • 스크립트의 쿠키 접근 가능 여부 결정
  • Secure
    • HTTPS 프로토콜에서만 쿠키 전송 여부 결정
    • HTTP 에서는 정보 안담기게
  • SameSite
    • CORS 요청의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정
    • true, false 아님

Cookie 생성

새로운 쿠키가 생성되어도 이름값이 다르다면 기존의 쿠키를 덮어쓰지 않음

Token

로그인한 사용자에게 토큰을 생성해 주고 이를 쿠키로 저장함
요청이 있을 때마다 발급 받은 토큰을 제시하여 사용자의 요청을 허용해 주는 방식
계속해서 세션 아이디를 비교하며 사용자의 상태를 체크하는 세션과는 다르게 토큰만 확인하면 되기에 부하를 줄일 수 있음

Token 의 동작 방식

  • 사용자가 서버에 로그인
  • 서버가 로그인 정보를 받아서 토큰 생성
  • 사용자는 브라우저에서 토큰을 받아 임시저장함
  • 사용자는 토큰과 함께 서버에 요청을 보냄
  • 서버는 자신이 만든 토큰이 맞는지 확인 후 토큰이 맞는 경우 올바른 응답을 보냄

단 한번 발행한 토큰은 유효기간이 끝나기 전까지 따로 통제할 수 없어 세션에 비해 토큰 정보를 탈취당할 가능성이 높다는 단점이 있음