首页 文章

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

提问于
浏览
15

我'm about to implement Token Authentication in my API using Django Rest Framework. But I'我不确定我是否应该 use the basic token build-in DRF or use the JSON Web Token (JWT) standard (使用此包djangorestframework-jwt)我发现的唯一参考是在DRF文档中:

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

Is there any other difference, advantages or disadvantages to consider?

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

2 回答

  • 3

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

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

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

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

    • 由Authorization API发布

    • 由客户端存储在cookie或本地存储中

    • Authorization Headers 中传递给Resource API

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

  • 15

    智威汤逊:

    • Any 有它的客户可以要求东西(类似于买东西时的钱)

    • 一旦发布就没有数据库查找 - 嵌入式到期指示验证

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

    可以使用令牌黑名单来解决上述问题 . 这将重新引入JWT首先试图避免的持久性或内存中跟踪 . 但是,跟踪仅在选定的键上,而基本令牌验证,跟踪适用于所有用户 .

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

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

    无论是使用JWT黑名单还是基本令牌身份验证,都可以完全控制身份验证,授权和失效 .

    因此,如果定制流以满足需求,则基本验证令牌 may 会更好 .

相关问题