我'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 回答
无论平台如何,使用JWT令牌都有很多好处 . JWT令牌
base64
编码其身体中的所有用户声明,并且可以在客户端上安全地解码为有状态对象 . 与替代的不透明令牌相比,这是非常有益的,这些令牌对客户端应用程序没有任何用处 . 在登录时,您立即在客户端中拥有原子数据,而无需额外往返API以轮询用户信息 .JWT令牌是无状态的:不需要存储或跟踪它们的服务器端,这在许多服务器上可以横向扩展 . 它们是安全的,因为用于授予它们的私有签名密钥存储在服务器端,任何带有它们的入站API调用都只需使用私钥进行验证,从而保证它们是由Authorization API颁发的 .
JWT令牌在Angular,React和任何其他客户端框架中都能很好地工作 . 因为它们是JSON,所以您可以在客户端中对它们进行解码,并将客户端UI元素直接绑定到您的声明 - 具有管理员声明的人可以看到管理员菜单,而没有该声明的用户将永远不会知道该菜单是否存在(如果正确实施) .
除此之外,JWT令牌的行为与任何承载令牌的行为方式相同:
由Authorization API发布
由客户端存储在cookie或本地存储中
在
Authorization
Headers 中传递给Resource API总之,如果您实现JWT令牌,您在客户端和服务器之间来回的N 1次来回减少,以及缩放的工作量也会减少 .
智威汤逊:
Any
有它的客户可以要求东西(类似于买东西时的钱)一旦发布就没有数据库查找 - 嵌入式到期指示验证
JWT有一个到期日,在此之前,它将保持有效 . 当您需要在密码重置或强制注销时注销用户时,这可能是不合需要的 .
可以使用令牌黑名单来解决上述问题 . 这将重新引入JWT首先试图避免的持久性或内存中跟踪 . 但是,跟踪仅在选定的键上,而基本令牌验证,跟踪适用于所有用户 .
拥有它的任何人都可以解码JWT . 因此,需要注意令牌中包含的信息 . 另一方面,Basic Auth Token只是一个简单的哈希,可以看作只是对用户的引用 .
考虑到缓存和其他性能增强,可能不需要担心开销,而是流程的便利性和未来的证明 .
无论是使用JWT黑名单还是基本令牌身份验证,都可以完全控制身份验证,授权和失效 .
因此,如果定制流以满足需求,则基本验证令牌
may
会更好 .