Django 접속 인증 : Built-in Token VS JWT(JSON Web Token) ! 비교 끝!

BJ Park·2021년 1월 21일
1

Python 개발 이야기

목록 보기
3/5
post-thumbnail

웹이든 앱이든 유저 계정을 기반으로 서비스를 제공하려면 반드시 거쳐야 하는 관문!
어떤 인증 수단을 사용할 것인지를 결정해야 한다.

Django의 장점 중 한가지는 매우 편리하게 잘 준비된 인증수단들 중 한가지를 골라쓸 수 있다는 점!

Django가 제공하는 사용자 접속 인증(Authentication)방법들

  1. 기본인증 (보통 개발용 Only)
  2. 세션인증
  3. 토큰인증
  4. 원격유저인증 (인트라넷 등에서 사용)
  5. JWT를 비롯한 3rd 파티 인증

어떤 인증 수단을 골라야 할까? : 서비스의 유형에 따른 결정

먼저 PC이든 모바일이든 브라우저 기반의 웹앱을 만들고 있다면
장고에서 제공하는 Session인증만으로 충분하다.

하지만 네이티브 모바일 앱 또는 그에 가까운 여러가지 중간형태(하이브리드앱 등)
중 하나를 고민하고 있다면 Token을 사용한 인증을 선택하는 것을 적극적으로 추천한다.

그런데 Django Rest framework에서 기본적으로 제공하는 Token이 있는 한편,(이하 DRF Built-in Token) 인증 구현을 위해 온라인에서 Django 토큰 인증을 검색하다 보면 항상 함께 뜨는 결과로 JWT(JSON Web Token)이라는 게 눈에 띈다.

JWT? 많은 플랫폼에서 광범위하게 사용된다는데? 이걸로 써야 하나? 무슨 차이지?
토큰 인증은 같은 토큰 인증인데 분명 서로 다른 것 같다.
어떻게 다른 건지, 어떤 장단점이 있는지 궁금해져서 꼼꼼히 체크해 보고
나와 같은 궁금증을 가진 사람들에게도 도움이 되길 바라며 한번 정리해보기로 했다.

DRF Built-in Token과 JWT의 차이점

기본 작동 방식 차이

DRF Built-in Token

  • 하나의 토큰으로 모든 사용자 세션을 처리
  • 토큰에 타임 스탬프 불포함

JWT Token

  • 세션 하나당 토큰 하나 발급
  • 토큰마다 만료시간이 정해진 타임스탬프 포함

DB접근 등 처리 과정 차이

DRF Built-in Token 인증 과정

  • 사용자 계정과 토큰 관계 통해 DB 접근
  • 사용자 계정 상태 검사
  • 사용자 인증

JWT Token 인증 과정

  • 토큰 디코드 (객체 정보 수신)
  • 토큰 타임스탬프 검사 (만료여부)
  • 토큰 내 페이로드에 포함된 사용자 ID로 DB접근
  • 사용자 계정 상태 검사
  • 사용자 인증

장점

DRF Built-in Token

  • DB에 있는 토큰 정보 수정을 통해 강제 로그아웃 처리 가능 (비밀번호 변경시에 사용 등)

JWT Token

  • 토큰 만료가 있음
  • 무효한 토큰에 DB접근 불허

단점

DRF Built-in Token

  • 모든 요청이 DB검색으로 이어짐
  • 모든 세션을 하나의 토큰으로만 처리

JWT Token

  • DB추적 없이는 토큰 회수 불가
  • 한번 토큰이 발행되면 누구나 그 토큰으로 접속 가능 (유저 정보가 토큰에 포함)
  • 해석에 따라 사용방법을 달리함. (토큰 갱신 방식에 대한 합의 없음)

Built-in Token VS JWT 선택 가이드

위에 정리된 내용을 토대로 두가지 토큰 인증 방식 중 어떤 것을 선택할지에
가장 중요하게 영향을 미칠만한 보안상의 고려 요인은 아래와 같다고 생각된다.

  1. 내가 만드는 서비스가 DB접근 전에 미리 한차례 인증을 거칠 필요가 있는지
  2. 사용자 계정에 대해 일정시간이 흐른 후 접속을 차단해야 할 필요성이 있는지

나는 개인적으로 DB접근 전에 한차례 추가 검사가 이루어지는
JWT의 기능이 매우 마음에 들어서 JWT를 선택하기로 했다.

개발과정에서는 아직 어떤 인증방식이 더 적합한지를 확신할 수 없는 경우도
많을 것이라고 생각하는데, 애매하다고 여겨진다면 무조건 JWT를 선택하기를 추천하는 바이다.

~fin~

profile
일 잘하는 백엔드 엔지니어

0개의 댓글