Django Rest Framework - 阻止访问 API?

标签 django api rest authentication django-rest-framework

我正在使用 Django Rest Framework 和 token 身份验证。到目前为止一切都很顺利。

http://www.django-rest-framework.org/api-guide/authentication#tokenauthentication

但我意识到任何人都可以创建一个与我的 API Hook 的第三方应用程序。我无法检测或阻止它。

我错过了什么吗?我按照指示进行操作,并且:

  • 发送“用户名=blah&密码=blah”至https://example.com/api/auth/ ,并收到一个 Token 作为返回。任何人都可以通过第三方应用程序执行此操作。
  • 该 token 在身份验证 header 中传递以从 API 检索数据。如果拥有用户 token ,任何人都可以执行此操作。

即使用户知道自己的Token,我也只希望他们能够通过官方原生应用访问API。

<强>1。如何保护我的 API(使用 token 身份验证)并确保只有我的应用程序可以连接到它?

<强>2。我可以在 header 中包含某种 key 吗?我在生产中使用 HTTPS, header 以及表单数据(用户名/密码)是否可拦截/可读? (由运行应用程序的人)。

还在学习中,谢谢。

最佳答案

也许我不完全理解你的问题,但是:

是的,应用程序中拥有用户名和密码的每个人都可以创建 token ,如果您将 obtain_auth_token 添加到您的 urlconfig(您的不必)。

所以你可以:

  • 仅提供您的应用用户名和密码
  • 或停用 obtain_auth_token View 并在管理员中或手动创建 token 。

回答您的 HTTPS 问题: HTTPS 加密位于客户端和服务器之间,并且位于 TCP 和 HTTP 之间。因此,中间的每个人(中间的人)都看不到任何 header 、数据,甚至路径。当使用SNI时主机名(Host header )可见,但没有其他内容。

希望这会有所帮助。

关于Django Rest Framework - 阻止访问 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171906/

相关文章:

python - 'InMemoryUploadedFile' 对象没有属性 'encode'

Django 页面未在 Facebook iframe 中呈现

python - 在 Django 模型中,如何创建一个在刷新时重置为 1 的字段?

javascript - Soundcloud PUT API 返回 401

javascript - 如何从第三方api保存json对象

python - 如何使用 django-rest 框架测试客户端发布列表

java - Reddit Api unsupported_grant_type 错误与 Retrofit (java)

ruby-on-rails - Restful 身份验证的无意 session 劫持问题

java - REST xml 答案 - Jaxb - 亚马逊产品 API

java - 休息 : Handling matrix style and template style parameter with same name in a request