Django:基于 DRF 令牌的身份验证 VS JSON Web 令牌
Posted
技术标签:
【中文标题】Django:基于 DRF 令牌的身份验证 VS JSON Web 令牌【英文标题】:Django : DRF Token based Authentication VS JSON Web Token 【发布时间】:2015-10-14 12:49:03 【问题描述】:我正在构建一个真实世界的应用程序,用户将主要从 android、ios 设备以及桌面访问该应用程序。
从我的初步研究中,我意识到,与基于会话的身份验证相比,基于令牌的身份验证机制对于客户端-服务器模型来说更好更优雅。
在 Django 中,我发现了两种流行的方法 -
-
http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication
http://getblimp.github.io/django-rest-framework-jwt/
据我了解,选项 2] 是 1] 的扩展,除了 Token 是 JSON(序列化)的形式。我想了解选项 1] 和 2] 之间还有哪些其他区别以及选择其中任何一个的优点/缺点。
【问题讨论】:
我有一些类似的设置。我所做的是,对于我的应用程序客户端令牌身份验证有效,但对于我的 Web 客户端会话身份验证有效。不确定 JWT 会提供什么优势? Appropriate choice of authentication class for python REST API used by web app 的可能副本 FWIW,django-rest-framework-simplejwt
似乎得到维护,而django-rest-framework-jwt
没有。
【参考方案1】:
他们都执行相似的任务,几乎没有区别。
令牌
DRF 的内置令牌认证
-
一个令牌用于所有会话
令牌上没有时间戳
DRF JWT 令牌认证
-
每个会话一个令牌
每个令牌的到期时间戳
数据库访问
DRF 的内置令牌认证
-
获取与令牌关联的用户的数据库访问权限
验证用户状态
验证用户身份
DRF JWT 令牌认证
-
解码令牌(获取有效负载)
验证令牌时间戳(到期)
数据库访问以获取与有效负载中的 id 关联的用户
验证用户状态
验证用户身份
优点
DRF 的内置令牌认证
-
允许通过替换数据库中的令牌来强制注销(例如:密码更改)
DRF JWT 令牌认证
-
具有过期时间的令牌
除非令牌有效,否则不会命中数据库
缺点
DRF 的内置令牌认证
-
数据库命中所有请求
所有会话的单一令牌
DRF JWT 令牌认证
-
如果不在数据库中跟踪令牌,则无法调用它
令牌发出后,任何拥有令牌的人都可以提出请求
规范可以解释,对于如何进行刷新没有达成共识
【讨论】:
对不起,我不明白你的回答。你能澄清一下吗?您是说选项 1 需要记住会话中的用户,而选项 2 只需检查请求 URL 中的用户名,因此选项 2 不需要会话? @SanderVandenHautte 我在答案中添加了更多细节。希望对你有帮助 谢谢!这很有帮助。 @un33k 你能详细说明一下吗? > 规格可以解释,关于如何刷新没有共识 @sphoenix 这是一个复杂的话题,*** 不适合进行详细分析。请使用以上作为利弊的参考。然后您可以参考您的设计需求和软件包来找出最适合您的。请注意,身份验证没有灵丹妙药,您选择的任何东西都会产生副作用。我们的使命是尽量减少对您要求的副作用。如果我要推荐一些东西,那就是签名-http cookie 用于身份验证和 JWT 用于授权。 Cookie 有效期 2 周,JWT 每 15 分钟刷新一次。以上是关于Django:基于 DRF 令牌的身份验证 VS JSON Web 令牌的主要内容,如果未能解决你的问题,请参考以下文章
无法使用用户名/密码登录令牌端点:drf 令牌身份验证和自定义用户模型,Django
从 Django Rest Framework 中的令牌获取经过身份验证的用户