django-rest-knox
django-rest-knox는 장고(django)의 rest 인증 모듈입니다.
Knox는 Django REST Framework의 인증을 보다 쉽게 사용할 수 있도록 도와줍니다.
작은 노력으로 REST 기반의 애플레이션에서 공통적으로 사용하는 패턴을 따르며 안전한 연결을 구성할 수 있는 것이죠.
Knox의 인증은 DRF에 내장된 TokenAuthentication과 흡사하게 토큰 기반으로 작동하면서, 기본 DRF이 가지고 있는 몇 가지 문제들을 보완해 줍니다.
- DRF 토큰은 단일 사용자로 제한되어 있습니다. 이런 제약사항은 토큰이 공유되거나, 여러 기기에서 안전한 연결을 어렵게 만듭니다. 또 서버 측에서 로그아웃될 경우 모든 기기에서 로그아웃되어 버리기도 합니다. Knox는 로그인 뷰 당 하나의 토큰을 제공하면서 사용자 별 토큰을 발급하고 관리합니다. 한 사용자가 로그아웃해도 다른 사용자에게 영향을 주지 않으며 옵션 설정을 통해 모든 사용자를 로그아웃 시킬수도 있습니다.
- DRF 토큰은 데이터베이스에 암호화되지 않은 상태로 저장됩니다. 만약 해커가 데이터베이스를 탈취해 토큰을 가진다면 원하는 계정에 마음대로 접속할 수 있는 문제가 생깁니다. Knox 토큰은 암호화된 형태로만 저장됩니다. 따라서 데이터베이스가 해킹되어도 훔친 토큰으로 아무것도 할 수 없습니다. (암호화 저장을 필수중의 필수이다.)
- DRF 토큰은 생성 시간을 추적하지만 별도의 토큰 만료 매커니즘은 내장하고 있지 않습니다. Knox는 app 설정에서 만료 설정을 할 수 있습니다. 기본 값은 10시간이다.
- (내 생각) 스마트폰 어플은 웹의 쿠키와 다르게 안전한 토큰 저장소가 존재한다. (android-AccountManager, iOS-KeyChain) 그래서 토큰 만료를 생각하지 않을 수도 있지만, 뚫리지 않는 보안은 존재하지 않기 때문에 Token refresh에 대한 정보가 있는지 확인해 볼 필요가 있다고 생각한다.
이 문서는 django-rest-knox의 github의 설명을 번역한 것입니다.
Reference
(해당 게시글은 아래의 블로그를 많이 참고했습니다. 문제시 삭제하겠습니다.)
https://devlog.jwgo.kr/2019/11/06/what-is-django-rest-knox/
https://gogorchg.tistory.com/entry/AndroidiOS-AccessToken을-어떻게-관리-할까
'Server > Django REST framework' 카테고리의 다른 글
[Django] Reverse relations과 Related_name (0) | 2022.07.28 |
---|---|
[Django] DRF Pagination (0) | 2022.07.28 |