我应该在Django Rest Framework中使用JWT或Basic Token身份验证吗?

Edg*_*arT 19 python django rest token jwt

我即将使用Django Rest Framework在我的API中实现令牌认证.但我不确定是否应该使用基本令牌内置DRF或使用JSON Web令牌(JWT)标准(使用此包djangorestframework-jwt)我发现的唯一参考是在DRF文档中:

与内置TokenAuthentication方案不同,JWT Authentication不需要使用数据库来验证令牌.

是否还有其他差异,优点或缺点需要考虑?

注意:API将从网站(使用angularjs)和移动应用程序访问

cch*_*ain 19

无论平台如何,使用JWT令牌都有很多好处.JWT令牌base64在其身体中编码所有用户声明,并且可以在客户端上安全地解码为有状态对象.与替代的不透明令牌相比,这是非常有益的,这些令牌对客户端应用程序没有任何用处.在登录时,您立即在客户端中拥有原子数据,而无需额外往返API以轮询用户信息.

JWT令牌是无状态的:不需要存储或跟踪它们的服务器端,这在许多服务器上可以横向扩展.它们是安全的,因为用于授予它们的私有签名密钥存储在服务器端,任何带有它们的入站API调用都只需使用私钥进行验证,从而保证它们是由Authorization API颁发的.

JWT令牌在Angular,React和任何其他客户端框架中都能很好地工作.因为它们是JSON,您可以base64在客户端解码它们并将客户端UI元素直接绑定到您的声明 - 具有管理员声明的人可以看到管理员菜单,而没有该声明的用户将永远不知道该菜单是否存在(如果正确实施).

除此之外,JWT令牌的行为与任何承载令牌的行为方式相同:

  • 由授权API发布
  • 客户端存储在cookie或本地存储中
  • 传递到Authorization标头中的Resource API

总之,如果您实现JWT令牌,您在客户端和服务器之间来回的N + 1次数会减少,并且缩减的工作量会减少.


un3*_*33k 6

JWT:

  1. Any 拥有它的客户可以要求东西(类似于买东西时的钱)
  2. 一旦发出没有数据库查找 - 嵌入式到期指示验证

JWT 有一个到期日期,在此之前,它将一直有效。当您需要在密码重置时或强制注销用户时,这可能是不可取的。

可以使用令牌黑名单来解决上述问题。这将重新引入 JWT 最初试图避免的持久性或内存中跟踪。但是,跟踪将仅针对选定的密钥,而在基本令牌身份验证中,跟踪针对所有用户。

JWT 可以被任何拥有它的人解码。因此,需要注意令牌中包含的信息。另一方面,Basic Auth Token 只是一个简单的散列,可以看作只是对用户的引用。

考虑到缓存和其他性能增强,人们可能不需要担心开销,而是流的便利性和未来证明。

无论使用JWT+黑名单还是Basic Token Auth,完全控制认证、授权和失效都是一件好事。

因此,may如果对流程进行定制以满足需求,则 Basic Auth Token会更好。