[Web] 토큰

세션 기반 인증

Session

  • 세션 기반 인증은 서버에서 사용자들의 정보를 기억하기 위해 세션을 유지(디스크 혹은 메모리)
  • 클라이언트의 상태를 계속해서 유지하고 이를 서비스에 이용하므로 이러한 서버를 Stateful 서버라고 함

세션 기반 단점

  • 트래픽이 늘어날수록 세션을 유지하는 메모리 혹은 DB에 부하가 되고 이는 성능 저하로 이어짐
  • 확장성을 위해 스케일 아웃 시 세션을 분산 시키기가 어려움
  • 쿠키는 단일 도메인 혹은 서브 도메인에서만 작동하도록 설계되어 있어서, 쿠키를 여러 도메인에서 사용하기 어려움

토큰 기반 인증

  • 서버 측에 더이상 클라이언트 정보를 저장하지 않고 토큰을 통해 인증함
  • 서버는 인증받은 사용자들에게 토큰을 발급하고, 클라이언트는 서버에 요청 시 헤더에 토큰을 함께 보냄
  • 서버는 유효성 검사만 하면 되기 때문에 부담이 없음(stateless)

토큰 기반 인증 동작 과정

Token

  1. 사용자가 아이디와 비밀번호로 로그인
  2. 서버 측에서 해당 정보를 검증
  3. 정보가 정확하다면 서버 측에서 사용자에게 Signed 토큰을 발급(Signed는 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 Signature를 가지고 있다는 것)
  4. 클라이언트 측에서 전달받은 토큰을 저장해두고, 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달. 이때 HTTP 요청 헤더에 토큰을 포함
  5. 서버는 토큰을 검증하고, 요청에 응답

토큰 기반 인증 장점

무상태성 및 확장성

  • 토큰은 클라이언트 쪽에만 저장되므로 서버는 stateless
  • 세션 기반과 달리 분산 처리 경우에도 어떤 서버로 요청이 와도 처리가 가능

보안성

  • 클라이언트는 더이상 서버에 쿠키를 전달하지 않으므로, 쿠키 사용에 의한 취약점이 사라짐

확장성(Extensibility)

  • 로그인 정보가 사용되는 분야를 확장할 수 있음
  • 사용자 별로 토큰에 선택적 권한을 부여하여 발급(OAuth 등에 활용)

여러 플랫폼 및 도메인

  • 어떤 플랫폼, 도메인에서도 토큰 유효성 검사만 가능하면 요청을 처리할 수 있음

참고


© 2021. All rights reserved.

Powered by Hydejack v9.1.4