토큰

썩은요플렛's avatar
Aug 08, 2024
토큰
 
 
토큰(Token)은 컴퓨터 과학과 정보 보안에서 다양한 의미로 사용되지만, 일반적으로 인증 및 권한 부여, 데이터 보안, 디지털 자산 등과 관련된 작은 정보 단위를 의미한다.

1. 인증 및 권한 부여에서의 토큰

a. JWT (JSON Web Token)
  • 정의: JSON 포맷으로 정보를 안전하게 전달하기 위한 컴팩트하고 독립적인 방식.
  • 구성: 헤더(Header), 페이로드(Payload), 서명(Signature)의 세 부분으로 구성된다.
    • 헤더: 토큰의 타입과 해싱 알고리즘 정보를 포함한다.
    • 페이로드: 사용자 정보와 추가 데이터를 포함하며, Base64URL 인코딩된다.
    • 서명: 헤더와 페이로드를 해싱하여 비밀 키로 서명한 값이다.
  • 사용 예: 사용자가 로그인하면 서버는 JWT를 생성하여 클라이언트에게 반환하고, 클라이언트는 이를 HTTP 요청의 헤더에 포함시켜 인증된 요청을 보낸다.
 
json코드 복사 { "alg": "HS256", "typ": "JWT" } { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
b. OAuth 토큰
  • 정의: OAuth 프로토콜에서 사용되는 액세스 토큰으로, 사용자가 제3자 애플리케이션에게 자신의 리소스에 접근할 수 있는 권한을 부여할 때 사용된다.
  • 구성: 보통 JWT 형식이나 다른 포맷을 사용할 수 있으며, 액세스 토큰과 리프레시 토큰으로 구분된다.
    • 액세스 토큰: 리소스에 접근할 때 사용되며, 만료 시간이 있다.
    • 리프레시 토큰: 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급받을 때 사용된다.

2. 데이터 보안에서의 토큰

a. 토큰화(Tokenization)
  • 정의: 민감한 데이터를 보호하기 위해 실제 데이터를 대신하여 비슷한 형식의 대체 데이터를 사용하는 방식이다.
  • 예시: 신용카드 번호 "4111 1111 1111 1111"을 "abcd efgh ijkl mnop"와 같은 토큰으로 대체한다.
  • 사용 예: 결제 처리 시스템에서 신용카드 정보를 안전하게 저장하고 전송할 때 사용된다. 실제 카드 번호는 안전한 토큰화 서버에 저장되고, 시스템 내에서는 토큰만 사용된다.

3. 블록체인과 디지털 자산에서의 토큰

a. 암호화폐(Cryptocurrency)
  • 정의: 비트코인, 이더리움 등 블록체인 네트워크에서 사용되는 디지털 화폐.
  • 구성: 블록체인 기술을 기반으로 하여 탈중앙화되고, 보안성이 높다.
  • 사용 예: 디지털 자산 거래, 스마트 계약 실행 등에서 사용된다.
b. 대체 불가능 토큰(NFT, Non-Fungible Token)
  • 정의: 고유성과 희소성을 가진 디지털 자산으로, 블록체인 기술을 통해 소유권과 진위성을 보장받는다.
  • 사용 예: 디지털 아트, 게임 아이템, 가상 부동산 등의 소유권을 증명하고 거래할 때 사용된다.

요약

  • JWT: 주로 웹 애플리케이션의 인증과 권한 부여에 사용된다.
  • OAuth 토큰: 제3자 애플리케이션에게 리소스 접근 권한을 부여하는 데 사용된다.
  • 토큰화: 민감한 데이터를 보호하기 위해 사용된다.
  • 암호화폐: 블록체인 기반의 디지털 화폐이다.
  • NFT: 고유성과 희소성을 가진 디지털 자산이다.
토큰은 각기 다른 맥락에서 사용되지만, 공통적으로 데이터 보안과 인증, 권한 부여, 디지털 자산 관리에 중요한 역할을 한다.
 

세션을 사용하는 대신 토큰을 사용하는 이유

  1. 확장성:
      • 세션: 서버에 상태를 저장해야 하므로 서버 확장이 어렵고, 부하가 커짐.
      • 토큰: 클라이언트 측에서 상태를 관리하므로 서버 부하가 줄고, 확장이 쉬움.
  1. 보안:
      • 세션: 세션 ID가 탈취되면 위험.
      • 토큰: 토큰 자체에 서명이 있어 위변조 방지 가능.
  1. 무상태성:
      • 세션: 서버가 상태를 유지해야 함.
      • 토큰: 서버가 상태를 유지하지 않아 RESTful API와 잘 맞음.
Share article

RottenYogurt's Development Blog