python - 为 Web 应用程序使用的 Python REST API 选择适当的身份验证类

标签 python django rest authentication django-rest-framework

我想使用 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/

相关文章:

python - 奇怪的 Django AuthenticationForm 行为

javascript - 使用 Angular 和 Django 发送文件

java - 带有 JAX-RX 的 REST API 从 jsp 页面中的表单发送和接收已解析的 JSON

python - App Engine Python 开发服务器 + 任务队列 + 后端

python - 如何使用 Base64 字符串或字节数组设置 QLabel

python - 从python中的UUID v1中提取时间

python - 使用 nginx/gunicorn 上传 Django 文件 - 媒体权限

python - Matplotlib 图例中的字幕

python - 绘图 matplotlib django 顶部的空白

rest - 对嵌套资源上的POST和PUT的正确RESTful响应