Django:基于DRF令牌的身份验证VS JSON Web令牌

问题描述 投票:11回答:1

我正在构建一个真实世界的应用程序,用户将主要从Android,iOS设备和桌面访问该应用程序。

从我的初步研究中,我已经意识到,与基于会话的身份验证相比,基于令牌的身份验证机制对于客户端 - 服务器模型更加优雅和优雅。

在Django,我发现了两种流行的方法 -

  1. http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication
  2. http://getblimp.github.io/django-rest-framework-jwt/

根据我的理解,选项2]是1]的扩展,除了令牌是JSON(序列化)形式。我想了解选项1]和2]之间存在的其他差异以及选择任何一个的优点/缺点。

json django rest django-rest-framework tastypie
1个回答
24
投票

他们都执行类似的任务,几乎没有差异。

代币

DRF的内置令牌认证

  1. 所有会话的一个令牌
  2. 令牌上没有时间戳

DRF JWT令牌认证

  1. 每个会话一个令牌
  2. 每个令牌的到期时间戳

数据库访问

DRF的内置令牌认证

  1. 数据库访问以获取与令牌关联的用户
  2. 验证用户的状态
  3. 验证用户

DRF JWT令牌认证

  1. 解码令牌(获取有效负载)
  2. 验证令牌时间戳(到期)
  3. 数据库访问以获取与有效负载中的id关联的用户
  4. 验证用户的状态
  5. 验证用户

优点

DRF的内置令牌认证

  1. 允许通过替换数据库中的令牌强制注销(例如:密码更改)

DRF JWT令牌认证

  1. 具有到期时间的令牌
  2. 除非令牌有效,否则不会命中数据库

缺点

DRF的内置令牌认证

  1. 数据库命中所有请求
  2. 所有会话的单一令牌

DRF JWT令牌认证

  1. 无法在数据库中跟踪令牌而无法调用令牌
  2. 一旦发出令牌,任何拥有令牌的人都可以发出请求
  3. 规范是开放的解释,没有就如何刷新达成共识
© www.soinside.com 2019 - 2024. All rights reserved.