• JWT의 적절한 수명 알아보기

    2021. 7. 3.

    by. Jacob Lee

    728x90

     


     

    JWT 토큰의 수명

    프로젝트 진행하면서 기존의 사용하던 drf의 기본 토큰이 아닌 simplejwt를 활용해서 JWT로 전환하는 업무를 진행했다. 라이브러리를 사용하는 작업이기에 작업면에서 어려운 사항들은 없었지만, 한 가지 고민에 마주하게 되었다. 바로 액세스 토큰과 리프레쉬 토큰의 수명 관련된 문제였다. 

     

    먼저 simplejwt를 사용하면 아래와 같이 액세스 토큰과 리프레쉬 토큰의 수명 설정이 가능하다.

    from datetime import timedelta
    
    ...
    
    SIMPLE_JWT = {
        'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
        'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    	...
    }

     

    위와 같이 simplejwt 사용 시 원하는 기간만큼 토큰의 수명을 설정할 수 있다.

    처음 이 세팅을 보았을 때.. 5분은 조금 짧아 프론트에서 요청을 너무 자주 보내야 할 것 같다는 생각이 들어, 과연 jwt 수명에 있어 적절한 기간은 무엇일까?하며 구글링을 시작했다.

     

    유즈 케이스 알아보기

    구글링을 해보았을 때, 수명에 관해서 다루는 한글로 된 레퍼런스를 단 하나도 찾지 못했다.

    한국에서 어떻게 쓰이는지 유즈 케이스를 알면 좋을 텐데, 아쉬운 마음으로 영문 레퍼런스를 찾아보았다.

     

    찾아보니, 지극히도 case by case 혹은 company by company여서 그런지, 명확하게 서술하는 문서를 찾지는 못했다. 어떤 중간점이라도 발견했으면 했는데, 어떤 서비스는 리프레시 토큰을 expiration 시키지 않는다는 곳도 있었고, 짧게는 며칠, 혹은 1-2주 만에 만료시키는 곳도 있었다.

     

    프로젝트 세팅

    결국 프론트 개발자와 상의 후에 access token은 30분, refresh token은 2주 정도 유지하기로 결정했다.

    내 욕심 같아서는 access token을 10분 내로 유지하고 refresh token은 하루 후 만료되게끔 하고 싶었지만, 클라이언트 사이드에서 리소스도 많이 들고 처음 도입하는 과정이기 때문에, 한 발짝 양보하기로 결정했다.

     

    마치며

    사실상 이 고민의 정답은 없는 것 같다.

    구글링하면서도 정답을 얻기 위해 시간을 들이기보단, 메이저 케이스가 어떤지 알아보고 싶은 마음에 찾아본 것이었다. 아무래도 jwt는 토큰이고, 토큰이 곧 보안이기 때문에, 각자 비즈니스에 맞게 액세스, 리프레쉬 토큰, 그리고 슬라이딩 세션을 구현하고, 또 기업 혹은 프로젝트와 핏이 맞는 적절한 토큰의 수명을 구현하면 되지 않을까 싶다.

     

    728x90

    'Developer > Web Development' 카테고리의 다른 글

    서버 기반 인증 vs. 토큰 기반 인증  (0) 2021.07.03

    댓글