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

Should I use JWT or Basic Token authentication in Django Rest Framework?

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

Unlike the built-in TokenAuthentication scheme, JWT Authentication doesn't need to use a database to validate a token.

还有其他区别、优点或缺点需要考虑吗?

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

无论平台如何,使用 JWT 令牌都有很多好处。 JWT 令牌 base64 将所有用户声明编码在他们的 body 中,并且可以在客户端安全地解码为有状态的 object。与对客户端应用程序提供零使用的替代不透明令牌相比,这是非常有益的。登录后,您立即在客户端中拥有原子数据,无需额外往返 API 以轮询用户信息。

JWT 令牌是无状态的:无需在服务器端存储或跟踪它们,这在许多服务器之间的横向扩展性更强。它们是安全的,因为用于授予它们的私有签名密钥存储在服务器端,任何带有它们的入站 API 调用都只用私钥验证,保证它们是由您的授权 API.

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

除此之外,JWT 令牌的行为方式仍然与任何不记名令牌相同:

  • 授权发行API
  • 由客户端存储在 cookie 或本地存储中
  • 已在 Authorization header
  • 中传递给资源 API

总而言之,如果您实施 JWT 令牌,您的客户端和服务器之间的 N+1 次来回往返次数将会减少,扩展工作量也会减少。

智威汤逊:

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

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

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

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

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

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

因此,Basic Auth Token may 如果可以自定义流程来满足需求会更好。