我即将使用 Django Rest Framework 在我的 API 中实现 token 身份验证。 但我不确定是否应该使用基本 token 内置 DRF 或使用 JSON Web token (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 token 都有很多好处。 JWT token base64
将所有用户声明编码在其正文中,并且可以在客户端安全地解码为有状态对象。与为客户端应用程序提供零使用的替代不透明 token 相比,这是非常有益的。登录后,您会立即在客户端中获得原子数据,而无需额外往返 API 来轮询用户信息。
JWT token 是无状态的:无需在服务器端存储或跟踪它们,这在许多服务器上具有更高的水平可扩展性。它们是安全的,因为用于授予它们的私有(private)签名 key 存储在服务器端,任何带有它们的入站 API 调用都只需使用私有(private) key 进行验证,保证它们是由您的 Authorization API 颁发的。
JWT token 在 Angular、React 和任何其他客户端框架中都能很好地工作。因为它们是 JSON,您可以在客户端中对它们进行 base64
解码并将客户端 UI 元素直接绑定(bind)到您的声明 - 拥有管理员声明的人可以看到管理菜单,而没有该声明的用户永远不会知道如果正确实现,菜单存在。
除此之外,JWT token 的行为方式仍与任何不记名 token 相同:
- 由授权 API 颁发
- 由客户端存储在 cookie 或本地存储中
- 在
Authorization
header 中传递给资源 API
总之,如果您实现 JWT token ,您将在客户端和服务器之间来回的 N+1 次往返次数减少,扩展工作量也将减少。