본문 바로가기

Django/DRF

DRF token-based vs session based authentication

Token-based authentication in Django Rest Framework uses tokens (string) to authenticate clients, while session-based authentication uses sessions (a more complex structure) to authenticate clients.

In token-based authentication, the client sends an API request with a token in the header, and the server verifies the token to determine if the client is authenticated. Tokens can be revoked, making it easier to handle user logouts and security breaches.

In session-based authentication, a session ID is assigned to the client after login, which is stored on the client (usually in a cookie) and used for subsequent API requests. The session ID is stored on the server, and the server uses it to look up the session data for the client.

Both token and session-based authentication have their own use cases and security trade-offs. Token-based authentication is generally considered more secure, as tokens can be easily revoked, while session-based authentication is considered more convenient, as sessions automatically expire after a certain period of inactivity.

요약하자면 토큰 베이스나 세션 베이스나 DRF에서는 데이터베이스에 저장된다.

다른 점은, 토큰 베이스는 폐지하는게 쉬어서 보안성이 더 높고, 세션 베이스는 기한을 정해두면 자동으로 폐지되기 때문에 더 편리하다는 것이다.

JWT같이, 데이터베이스에 저장하지 않는 방식은 https://github.com/davesque/django-rest-framework-simplejwt 패키지를 사용하면 된다.

그리고 세션은 웹에서만 사용한다. 왜냐하면 세션은 브라우저에 저장하는 쿠키와 같이 사용하기 때문이다. 쿠키를 사용할 수 없는 모바일(위에서 말했듯이 쿠키는 브라우저에서만 사용된다.) 에서의 앱은 토큰을 사용한다.

정확히 말하면 세션을 모바일 환경에서 만들 순 있지만 쿠키를 사용할 수 없다.

Reference

Authentication