1. Question

웹에서의 토큰 기반 인증(Token-Based Authentication)이란?

2. Answer

웹에서의 토큰 기반 인증(Token-Based Authentication)은 사용자의 인증 정보를 토큰 형태로 서버에서 생성하여 클라이언트에게 발급하는 방법이다. 클라이언트는 이 토큰을 저장하고 있으며, 웹 사이트나 웹 애플리케이션에 접근할 때마다 이 토큰을 서버에 제출함으로써 사용자를 인증한다. 이 인증 방식은 서버가 사용자의 세션 상태를 유지할 필요가 없어 확장성이 높고, RESTful API에서 주로 사용된다. 가장 대표적인 형태로는 JSON Web Token(JWT)이 있다.

A. 로그인 과정 및 토큰 발급

  • 사용자가 아이디와 비밀번호 등의 인증 정보를 입력하여 로그인을 시도한다.
  • 서버는 사용자의 인증 정보를 검증하고, 올바른 경우 암호화된 토큰을 생성하여 클라이언트에게 발급한다.

B. 토큰의 사용

  • 발급받은 토큰은 일반적으로 HTTP request의 Authorization 헤더에 Bearer 스키마를 사용하여 포함된다.
  • 클라이언트는 서버로의 모든 request에 이 토큰을 포함시켜 자신을 인증한다.

C. 서버의 토큰 검증

  • 서버는 request에 포함된 토큰을 해독하고 검증한다.
  • 토큰이 유효하면 request를 인증된 사용자의 것으로 간주하고 처리한다. 토큰이 만료되었거나 유효하지 않은 경우, 인증을 실패 처리하고 적절한 response를 반환한다.

3. Detail

A. 보안 측면 - 토큰 탈취와 위조

토큰이 클라이언트에 저장되고 전송되는 과정에서 탈취 또는 위조될 위험이 있다. 이는 사용자의 계정이 무단으로 사용될 수 있는 위험을 수반한다.

  • HTTPS 사용: 모든 데이터 전송을 암호화하여 토큰의 탈취를 방지한다.
  • 토큰 만료 시간 설정: 짧은 만료 시간을 설정하여 탈취된 토큰의 유용성을 감소시킨다.
  • 서명 기반 검증: 토큰에는 서명이 포함되어 있어, 서버는 토큰의 무결성을 검증할 수 있다.

B. 보안 측면 - 크로스 사이트 스크립팅(XSS)

클라이언트 사이드 스크립트를 통한 토큰 탈취 가능성이 있다.

  • 콘텐츠 보안 정책(CSP): XSS 공격을 방지하기 위해 적절한 콘텐츠 보안 정책을 설정한다.
  • 토큰 저장 방식 선택: 보다 안전한 저장 방식을 선택하고, 가능하면 HttpOnly와 Secure 플래그가 설정된 쿠키를 사용한다.

C. 사용 시 고려사항 - 확장성 및 성능

토큰 기반 인증은 서버의 확장성과 성능에 유리하다.

  • 상태 비저장 구조: 서버는 각 요청에 포함된 토큰만을 검증하므로, 사용자의 세션 정보를 유지할 필요가 없다.
  • 리소스 최적화: 토큰 검증 과정은 계산 리소스를 요구할 수 있으므로, 효율적인 토큰 처리와 리소스 관리가 필요하다.

D. 사용 시 고려사항 - 토큰 관리

  • 토큰 갱신: 사용자의 활동이 있을 때마다 토큰을 갱신하고 새 토큰을 발급한다.
  • 토큰 리볼빙 및 블랙리스팅: 만료된 또는 위험한 토큰을 효과적으로 관리하고 필요시 블랙리스트에 추가한다.

4. Reference

None

댓글남기기