해결된 질문
작성
·
705
0
안녕하세요. 진석님!
강의에서 알려주신 drf-jwt 말고, 다른 수강생분이 문의한 글에서 보니 simple-jwt도 있다고 하셔서 doc 읽어보면서 토큰 적용해보고 있는데요.
로그인 성공하면 access / refresh 토큰 발행되고, access 토큰이 만료되면 refresh 토큰으로 access 토큰을 재발행해야 한다고 이해했습니다. (refresh 토큰 만료기한도 장고 설정값 있는 것 확인했구요!)
궁금한점은.. access 토큰을 갱신하는 방향이 크게 두 가지 일 것 같은데, 어떤식으로 가야하는 걸까요?
1) useEffect 훅 안에서 setInterval로 주기적 갱신
2) 강의에서 만들어주신 useAppContext 안에서 토큰 만료여부 확인 후 명시적 갱신
3) 다른방법
답변 2
1
안녕하세요.
JWT의 access/refresh 토큰 갱신에 대해서는 표준적인 방법이 없고 다양한 의견들이 분분한 상황입니다. 각 토큰을 어디에 관리해야하는 지에 대해서도 의견이 분분하죠.
현재의 제 의견은 JWT는 Android/iOS 네이티브 서비스에서는 JWT을 안전하게 관리할 수 있는 전용 공간이 제공되기에 JWT를 사용할 수 있겠지만, 웹 브라우저 환경에서는 JWT을 안전하게 저장할 방법이 없어서 JWT 인증은 득보다 실이 많은 인증 방법이라고 생각하고 있습니다. // access token을 메모리에 담고 refresh token은 http only 쿠키에 담는 접근에 대해서도 많이 논의되는 데요. 쿠키를 사용한다면 그냥 세션 인증을 사용하는 것이 훨씬 간단하거든요.
현재 본 장고/리액트 강의 리뉴얼을 진행 중에 있고, 12월 말쯤에는 리뉴얼 강의를 공개할 수 있을 듯 한데요. 리뉴얼 강의에서 API 인증에서 세션 인증 방식을 추가로 소개해드리고 있습니다. 대개 DRF를 적용하는 서비스에서는 DRF를 활용해서 API 서비스를 하는 것이 아니라, 자체 서비스에서 사용할 목적일텐데요. 이때에는 JWT 인증을 사용하는 것보다 세션 인증을 사용하는 것이 더 쉽고 안정적이거든요. 세션 인증은 장고 기본에서 탄탄하게 기능을 제공해주고 있죠. 세션을 보안체계도 잘 만들어져있구요. 리액트 서비스와 API 서비스에 같은 서브 도메인을 할당해주고 몇 가지 장고 settings 설정만 해주면 리액트에서 API 호출 시에 인증에 대해서 거의 신경쓰지 않고 세션 인증을 활용할 수 있게 됩니다. 리뉴얼 강의가 공개되면 꼭 한 번 살펴보세요. 공들여 준비한 주제 중에 하나입니다.
일단 질문주신 부분에 대해서는 access 토큰의 만료기한보다 refresh 토큰의 만료기한보다 보통 길 것입니다. 그러니 API 요청 시에 access 토큰이 만료가 되었다면, refresh 토큰을 활용해서 갱신을 하고 다시 API 재요청을 하는 방식은 어떨까요?
살펴보시고 댓글 남겨주세요.
화이팅입니다. :-)
0
빠른 답변감사합니다!
질문 드린 부분은 세션인증 방식을 고려해봐야겠네요. 공들여 준비하고 계신 강의도 크게 기대하고 있을게요!
그리고, 진석님 강의 & 팀내 스터디로 올해초부터 React & Django 사내 토이프로젝트를 진행중에 있는데요. 말씀하신 부분중에 "대개 DRF를 적용하는 서비스에서는 DRF를 활용해서 API 서비스를 하는 것이 아니라, 자체 서비스에서 사용할 목적일텐데요." 라고 하셨는데, 외부 서비스용으로 DRF는 부적절(?) 할까요? 내심으로는 토이프로젝트 완료하고, 벤더사 데이터 인터페이스 용으로 Django API 서버를 생각하고 있었거든요....
항상 열심히 활동해주셔서 감사합니다 :)
어떤 인증을 사용할 것이냐에 대해서, 자체 서비스를 언급드린 것이구요. DRF와는 무관합니다. 자체 서비스라면 도메인을 맞추는 것이 가능하니 세션 인증을 쓰면 간편하고 보안에도 좋은 데, 굳이 어렵게 JWT 인증을 고민할 필요가 없다는 의도였습니다.
외부에 API를 공개하는 목적이라면, API 성격에 따라 어떤 인증방식이 적절할지 고민을 해봐야겠죠. :-)