【问题标题】:Django : DRF Token based Authentication VS JSON Web TokenDjango:基于 DRF 令牌的身份验证 VS JSON Web 令牌
【发布时间】:2015-10-14 12:49:03
【问题描述】:

我正在构建一个真实世界的应用程序,用户将主要从 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] 的扩展,除了 Token 是 JSON(序列化)的形式。我想了解选项 1] 和 2] 之间还有哪些其他区别以及选择其中任何一个的优点/缺点。

【问题讨论】:

标签: json django rest django-rest-framework tastypie


【解决方案1】:

他们都执行相似的任务,几乎没有区别。

令牌

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. 规范可以解释,对于如何进行刷新没有达成共识

【讨论】:

  • 对不起,我不明白你的回答。你能澄清一下吗?您是说选项 1 需要记住会话中的用户,而选项 2 只需检查请求 URL 中的用户名,因此选项 2 不需要会话?
  • @SanderVandenHautte 我在答案中添加了更多细节。希望对你有帮助
  • 谢谢!这很有帮助。
  • @un33k 你能详细说明一下吗? > 规格可以解释,关于如何刷新没有共识
  • @sphoenix 这是一个复杂的话题,stackoverflow 不适合进行详细分析。请使用以上作为利弊的参考。然后您可以参考您的设计需求和软件包来找出最适合您的。请注意,身份验证没有灵丹妙药,您选择的任何东西都会产生副作用。我们的使命是尽量减少对您要求的副作用。如果我要推荐一些东西,那就是签名-http cookie 用于身份验证和 JWT 用于授权。 Cookie 有效期 2 周,JWT 每 15 分钟刷新一次。
猜你喜欢
  • 2016-01-23
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2015-10-07
  • 2015-11-18
  • 2016-07-31
相关资源
最近更新 更多