1 minute read

  • 토큰이란

    유저들의 인증 작업을 처리하는 가장 좋은 방법 중 하나

    • 특징

      • Stateless 서버

        stateful 서버와 반대로 반대로 상태를 유지하지 않음

        상태를 유지하지 않아서 클라이언트와 서버의 연결고리가 없기 때문에 서버의 확장성이 높아짐

      • 모바일 어플리케이션에 적합

        크로스 플랫폼으로 앱에 쿠키같은 인증 시스템은 적합하지 않음 (쿠키 컨테이너 사용해야 함)

        토큰 기반으로 간단하게 번거로움 해결 가능

      • 인증 정보를 다른 어플리케이션으로 전달

        소셜 계정을 이용하여 다른 웹 서비스에서도 로그인 가능하게 함

      • 보안

        어플리케이션 보안 높일 수 있음

  • 토큰을 사용한 이유

    과거의 인증 방식의 불편함을 개선하기 위해 만들어짐

    • 과거의 인증

      서버측에서 유저들의 정보(세션)를 기억하고 있어야 함

      세션을 유지하기 위해 메모리/디스크/DB 시스템에 담아서 사용함

      • 순서

        1. 서버는 클라이언트에게 웹 사이트 제공함

        2. 클라이언트에서 로그인 요청이 있을 시 서버는 요청을 검증하고 검증 값에 따라 세션을 생성하고 유지시키며 클라이언트에게 응답함

        3. 클라이언트에서 요청이 있을 시 세션 저장소에서 세션을 검증하고 클라이언트에게 응답함

      • 문제점

        • 세션

          세션을 메모리/DB 에 저장할 시 램 과부화나 DB 성능에 무리를 줌

        • 확장성

          분산된 시스템을 설계할 시 과정이 매우 복잡해짐

        • CORS

          쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계됐으며 여러 도메인에서 관리 번거로움

  • 작동 원리

    stateless 하기 때문에 인증 정보를 서버나 세션에 담아두지 않음

    • 순서

      1. 서버는 클라이언트에게 웹 사이트 제공

      2. 서버는 클라이언트에서 로그인 요청이 올 시 요청값을 검증하고 토큰을 생성해서 클라이언트에 값에 토큰을 넣어 응답함

      3. 클라이언트는 받은 토큰 정보와 함께 요청하고 서버는 토큰을 검증한 다음 검증 값에 따라 응답함

  • 장점

    • 무상태(stateless) 이며 확장성(scalability) 이 있음

      세션값이 없기 때문에 서버를 확장하기 매우 적합한 환경을 제공함

      서버를 여러대 사용해 분산하여도 세션값을 관리하지 않기 때문에 어떤 서버로 요청이 들어가던 상관없음

    • 보안성

      쿠키를 사용함으로써 인해 발생하는 취약점이 사라짐

    • 확장성 (Extensibility)

      토큰에 선택적인 권한만 부여하여 발급할 수 있기 때문에 다른 서비스에서도 권한을 부여하여 공유할 수 있음

    • 여러 플랫폼 및 도메인

      CORS 에 상관 없이 토큰만 유효하다면 요청이 정상적으로 처리됨

      서버측에서 어플리케이션 응답 부분에 Access-Control-Allow-Origin 만 포함시켜주면 됨

      .asset 파일들을 모두 CDN에서 제공하도록 하고 서버측에서는 오직 API만 다룰 수 있도록 하여 설계할 수 있음

    • 웹 표준 기반

      JWT(토큰 기반 인증 시스템의 구현체)는 웹 표준 RFC 7519 에 등록되어있기 때문에 여러 환경에서 지원함

출처 : https://velopert.com/2350

Categories:

Updated: