[네트워크] 쿠키, 세션, 토큰

CJY·2023년 8월 24일
0

네트워크

목록 보기
9/11

쿠키와 세션

쿠키(Cookie)와 세션(Session)은 웹 애플리케이션에서 사용자의 상태 및 데이터를 관리하는 데 사용되는 메커니즘입니다. 둘 다 사용자 경험을 개선하고 사용자를 식별하는 데 도움을 줍니다. 그러나 작동 방식과 사용 목적에서 차이가 있습니다.

  • 쿠키는 클라이언트 측에 저장되는 작은 텍스트 파일입니다.
  • 서버에서 클라이언트로 전송되어 웹 브라우저에 저장되며, 이후 해당 웹 사이트를 방문할 때마다 브라우저가 쿠키를 서버로 보내게 됩니다.
  • 쿠키는 주로 사용자의 로그인 정보, 선호 설정, 장바구니 등을 저장하고 유지하는 데 사용됩니다.
  • 쿠키는 만료 날짜나 유효 기간을 설정할 수 있으며, 설정된 기간 내에는 유효하고, 만료되면 삭제됩니다.
  • 클라이언트 측에 저장되므로 보안에 제한적이며, 중요한 정보는 저장하지 않는 것이 좋습니다.

세션 (Session)

  • 세션은 서버 측에서 유지되는 데이터 저장 공간입니다.
  • 클라이언트가 서버에 처음 요청하면 서버는 고유한 세션 ID를 생성하여 클라이언트에게 전달하고, 해당 세션 ID를 사용하여 세션을 식별합니다.
  • 세션은 서버에 저장되므로 보안이 좀 더 강력합니다.
  • 사용자의 로그인 상태, 장바구니 내역, 세션 관련 데이터 등을 저장하고 유지하는 데 사용됩니다.
  • 세션은 브라우저를 종료하거나 세션이 만료될 때까지 유지되며, 일반적으로 사용자의 비활동 시간에 따라 만료 시간이 조절될 수 있습니다.

정리

쿠키와 세션은 각각의 사용 사례에 따라 선택되어야 합니다. 쿠키는 클라이언트 측에서 작동하며 쉽게 구현될 수 있어 작은 데이터 저장에 유용합니다. 반면 세션은 보안과 관리의 측면에서 강력하며, 중요한 정보를 보다 안전하게 저장하고 유지하기에 적합합니다. 프로그래밍 언어 및 웹 프레임워크마다 다양한 방식으로 쿠키와 세션을 다룰 수 있으며, 사용하는 상황에 따라 적절한 선택을 해야합니다.

토큰

토큰(Token)은 인증이나 권한 부여와 같은 보안 관련 작업을 처리하는 데 사용되는 작은 조각의 데이터입니다. 토큰은 주로 웹 및 애플리케이션 보안에서 사용되며, 사용자의 신원을 확인하거나 특정 리소스에 대한 접근 권한을 관리하는 데 활용됩니다.

종류

토큰은 크게 두 가지 유형으로 나눌 수 있습니다.

  • 인증 토큰(Authentication Token)
    사용자의 신원을 확인하거나 인증하는 데 사용되는 토큰입니다. 주로 로그인 프로세스에서 사용자의 신원을 확인한 후, 서버는 사용자를 식별할 수 있는 토큰을 발급합니다. 이 토큰은 사용자가 다른 요청을 보낼 때마다 함께 전송되며, 서버는 토큰을 확인하여 사용자의 신원을 확인합니다.

    • Access Token: 주로 OAuth나 OpenID Connect와 같은 프로토콜을 통해 발급되며, 클라이언트가 보호된 리소스에 접근할 때 사용됩니다.
    • ID Token: OpenID Connect에서 사용되며, 사용자의 식별 정보와 클라이언트 정보를 포함합니다.
  • 권한 토큰(Authorization Token)
    사용자에 대한 권한 및 권한 부여 정보를 포함하는 토큰입니다. 특정 리소스나 서비스에 접근할 때 어떤 작업이 허용되는지를 나타내는 데 사용됩니다.

장점

  • 보안 강화
    사용자의 비밀번호를 클라이언트 측에서 저장하지 않아도 되므로 보안이 강화됩니다.
  • 확장성
    토큰은 클라이언트와 서버 간의 상태를 저장하지 않기 때문에 확장성이 용이합니다.
  • 사용자 경험 향상
    로그인 세션을 유지할 필요 없이 토큰을 사용하여 사용자의 로그인 상태를 유지하고 다양한 기기에서 접속할 수 있습니다.

보안

토큰의 유출을 방지하고 보안을 유지하기 위해선 다음과 같은 조치를 취해야 합니다.

  • 토큰 보안
    토큰을 안전하게 저장하고 전송하는데에 암호화 및 안전한 전송 프로토콜을 사용합니다.
  • 만료 시간 설정
    토큰에는 유효 기간을 설정하여 일정 시간 후에 만료되도록 합니다.
  • 토큰 관리
    만료된 토큰은 폐기하고, 필요한 권한이나 범위를 설정하여 필요한 정보만 포함되도록 합니다.

정리

토큰은 모던 웹 및 애플리케이션 보안에서 핵심적인 역할을 하며, 인증 및 권한 관리에 대한 효율적인 솔루션을 제공합니다.

JWT

JWT(JSON Web Token)는 웹 표준(RFC 7519)으로 정의된 인증 및 정보 교환을 위한 컴팩트한 데이터 포맷입니다. JWT는 클레임(claim) 형태의 데이터를 JSON 객체로 표현하고, 이를 Base64 인코딩하여 안전하게 전달하며, 서버와 클라이언트 간의 통신에서 사용됩니다. 주로 인증 토큰으로 사용되며, 사용자의 식별 정보와 권한 정보를 포함합니다.

구조

  • 헤더(Header)
    헤더는 토큰의 유형과 암호화 알고리즘 정보를 포함합니다. 헤더는 JSON 객체로 표현되고, Base64 인코딩됩니다.

  • 클레임(Claims)
    클레임은 토큰에 포함될 정보를 나타내며, 여기에 사용자의 식별 정보, 권한 정보 등이 포함됩니다. 클레임은 등록된(registered) 클레임, 공개(public) 클레임, 개인(private) 클레임으로 나뉘며, JSON 형태로 표현되고, Base64 인코딩됩니다.

  • 서명(Signature)
    서명은 헤더와 클레임의 내용을 조합한 후, 비밀 키(secret key)를 사용하여 생성됩니다. 서명은 토큰이 변조되지 않았음을 검증하는 역할을 합니다.

장점

  • 간결성
    JSON 형식을 사용하며, 정보를 쉽게 표현할 수 있습니다.
  • Self-contained
    토큰에 필요한 정보가 모두 포함되어 있어 별도의 세션 저장소를 필요로 하지 않습니다.
  • 분산 시스템에서 활용
    분산된 서비스와 클라이언트 간의 인증 및 데이터 교환에 적합합니다.
  • 확장성
    클레임을 확장하여 원하는 데이터를 포함시킬 수 있습니다.

주의점

  • 암호화
    민감한 정보를 포함할 경우, 토큰을 암호화하여 사용합니다.
  • 토큰 수명
    토큰의 유효 기간을 적절하게 설정하여 불필요한 장기간의 토큰 유출을 방지합니다.
  • 비밀 키 보호
    서명을 위한 비밀 키를 안전하게 관리하고 저장합니다.
  • 정보 노출 방지
    클레임에 민감한 정보가 포함되지 않도록 주의합니다.

정리

JWT는 보안적으로 잘 관리하고 사용한다면 유용한 도구입니다. 그러나 토큰의 약점을 이용한 공격에 주의해야 하며, 특히 민감한 정보가 포함되는 경우 보안 조치를 적절히 적용하여 사용하는 것이 중요합니다.

profile
열심히 성장 중인 백엔드

0개의 댓글