我想使用 Django REST 框架构建一个 REST API。最初它的客户端将是一个网络应用程序,但可以想象 future 的客户端可能包括移动应用程序。
不幸的是,我找到了 documentation 中列出的身份验证类列表。有点困惑。看起来 TokenAuthentication
可以满足我的需求。我宁愿避免 OAuth 的认知开销,除非有令人信服的安全理由。
我想在这个非常早的阶段就做出正确的决定。任何人都可以提供任何建议吗?
编辑:虽然希望不相关,但我想我会提到我将使用 Neo4j 作为应用程序的后端,而不是传统的 SQL 数据库。
最佳答案
Django REST Framework 使您可以灵活地使用多种身份验证方法。由于我有一些时间,而且这对以后有类似问题的访问者会有用,我将概述最常见的身份验证方法的好处。
Initially its client would be a web application, but conceivably future clients could include mobile applications.
通常,在使用与 API 位于同一域和 Django 实例上的 Web 应用程序时,大多数人会使用 SessionAuthentication
,因为它使用现有的身份验证方法与服务器交互。身份验证工作无缝,因此您无需执行第二个身份验证步骤。
大多数 API 还支持某种形式的 BasicAuthentication
,很可能是因为它最容易测试,但也因为它最容易实现。对于您的 Web 应用程序,这不是推荐的身份验证方法,但对于您的移动应用程序,使用它的情况并不少见。我个人会推荐基于 token 的身份验证,这样您就不必担心客户端会拦截用户的凭据。
It looks like
TokenAuthentication
would meet my needs.
很多人使用TokenAuthentication
,因为它理解和使用起来比较简单,一开始似乎能满足大家的需求。 token 直接附加到用户,它们不会自动轮换(though you can make them automatically rotate),因此代表用户工作的每个客户端都获得相同的 token 。如果您需要撤销 token ,这可能会成为一个问题,因为所有其他客户端的 token 也会失效。
I would rather avoid the cognitive overhead of OAuth unless there is a compelling security reason to go that way.
OAuth 2 (OAuth2Authentication
) 在 TokenAuthentication
的优势之上为您提供 token 轮换和 token 过期。还有一个好处是能够撤销单个 token 而不影响正在为用户进行身份验证的其他客户端。您还可以通过使用范围将客户端限制在 API 的个别区域,如果您的 API 的某些区域比其他区域更常用,这将很有用。
我还要提到 JSON Web Tokens ,因为虽然我没有使用过它,但它已经在支持 channel 中出现了很多。就检索 token 而言,它的工作方式与 TokenAuthentication
非常相似,但它具有为客户端提供唯一 token 和 token 过期的额外好处。
关于python - 为 Web 应用程序使用的 Python REST API 选择适当的身份验证类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27578726/