我应该在 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 次来回往返次数将会减少,扩展工作量也会减少。
智威汤逊:
Any
有客户可以要东西(类似于买东西的钱)
- 发出后没有数据库查找 - 嵌入式到期指示验证
JWT 有到期日,在此之前,它将一直有效。当您需要在密码重置或强制时注销用户时,这可能是不可取的。
令牌黑名单可用于解决上述问题。这将重新引入 JWT 最初试图避免的持久性或内存中跟踪。但是,跟踪将仅针对选定的密钥,而对于基本令牌身份验证,跟踪适用于所有用户。
JWT 可以被任何拥有它的人解码。因此,需要注意令牌中包含的信息。另一方面,Basic Auth Token 只是一个简单的哈希,可以看作只是对用户的引用。
考虑到缓存和其他性能增强功能,人们可能不需要担心开销,而是流程的便利性和未来验证。
无论使用 JWT + 黑名单还是 Basic Token Auth,能够完全控制身份验证、授权和失效是一件好事。
因此,Basic Auth Token may
如果可以自定义流程来满足需求会更好。
我即将使用 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 次来回往返次数将会减少,扩展工作量也会减少。
智威汤逊:
Any
有客户可以要东西(类似于买东西的钱)- 发出后没有数据库查找 - 嵌入式到期指示验证
JWT 有到期日,在此之前,它将一直有效。当您需要在密码重置或强制时注销用户时,这可能是不可取的。
令牌黑名单可用于解决上述问题。这将重新引入 JWT 最初试图避免的持久性或内存中跟踪。但是,跟踪将仅针对选定的密钥,而对于基本令牌身份验证,跟踪适用于所有用户。
JWT 可以被任何拥有它的人解码。因此,需要注意令牌中包含的信息。另一方面,Basic Auth Token 只是一个简单的哈希,可以看作只是对用户的引用。
考虑到缓存和其他性能增强功能,人们可能不需要担心开销,而是流程的便利性和未来验证。
无论使用 JWT + 黑名单还是 Basic Token Auth,能够完全控制身份验证、授权和失效是一件好事。
因此,Basic Auth Token may
如果可以自定义流程来满足需求会更好。