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

ano*_*non 18 django rest json tastypie django-rest-framework

我正在构建一个真实世界的应用程序,用户将主要从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]之间存在的其他差异以及选择任何一个的优点/缺点.

un3*_*33k 31

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

代币

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. 规范是开放的解释,没有就如何刷新达成共识

  • @sphoenix这是一个复杂的主题,stackoverflow 不是进行详细分析的正确位置。请使用上述内容作为利弊的参考。然后您可以参考您的设计需求和套餐来找出最适合您的。请注意,身份验证没有灵丹妙药,您选择的任何内容都会产生副作用。我们的使命是最大限度地减少您的需求的副作用。如果我要推荐一些东西,那就是签名 http cookies 用于身份验证,JWT 用于授权。Cookie 有效期为 2 周,JWT 每 15 分钟刷新一次。 (3认同)