【发布时间】:2012-02-21 08:59:57
【问题描述】:
我意识到关于这个主题有很多问题,我已经研究了几天了。我想确保我的问题尽可能具体,因为我尚未完全了解最佳方法。
目前我有一个开发的 django 站点,Web 客户端可能通过 django-piston json REST api 进行大约 95% 的通信。另外 5% 是一些重新登录功能,仍然通过具有 CSRF 保护的 POST 表单。理想情况下,我想将其余部分也移动到 REST api 中。
我现在需要找出最好的推荐解决方案,以一种可重用且愉快共存的方式保护 Web 客户端和移动客户端(尚未开发的应用程序)。我已经阅读了许多最终为移动端推荐 OAuth2(和 https)的帖子,但我仍然对如何设置 Web 客户端安全性感到困惑。我也在理解 OAuth2 方面以及我是否可以使用 2-legged 形式。就目前而言,Web 客户端已通过 django 身份验证。从技术上讲,活塞中的 jsonp 功能仍然有效,所以我认为任何人都可以使用来自 3rd 方应用程序的 api,只要他们的网络会话具有身份验证 cookie?
我的api使用总结:
- API 是服务器应用程序的完全私有接口
- 如果 API 不能被第 3 方 Web 客户端混搭广泛重用,那将是理想的选择。
- 数据不敏感。它只是一个社交类型的网站,其中包含最多的个人信息是基本的用户个人资料,例如电子邮件、地址等。
我的问题总结:
- OAuth2 是保护移动应用程序访问的最佳推荐方法吗?它与网络客户端方面有什么关系吗?如果推荐使用 OAuth2,它是否应该是应用程序版本的应用程序范围的密钥?
- Web 客户端是否应该使用通过 ajax 传递的 CSRF,并且只禁用 jsonp 以确保其始终同源?基本上,我是在单独对待 Web 客户端的安全性吗?
- 我应该如何组织 url/应用程序实例/子域或任何推荐的东西来维护 Web 与移动安全?我是否只需要单独的 url 前缀,一个用于使用不同规则的移动设备?
我正在寻找 django-piston 解决这些问题的具体建议。我已经分支了我的项目并开始使用这个分叉版本的活塞:https://bitbucket.org/jespern/django-piston-oauth2
我的一个想法是创建一个活塞资源,首先检查其是否同源,然后仅强制执行 django 身份验证,否则强制执行 oauth2,但我不确定这是否合适。
2012 年 1 月 1 日更新
根据 Spike 提供的信息,我开始使用活塞 oauth2。我最终创建了一个 fork 来为 nonrel django (mongodb) 添加一些修复程序,并且我分叉了某人的示例以也使用 oauth2 和活塞:
https://bitbucket.org/justinfx/django-piston-oauth2-nonrel-example
现在我只需要把它与我自己的项目联系起来并让它发挥作用。但是这些测试都非常有效。
【问题讨论】:
-
现在this 是一个写得很好的问题!很高兴看到有人尝试。
-
谢谢!如果我知道它不是很详细并且以前被问过同样的方式,我真的尽量不问关于 SO 的问题。我在这里看到太多人只是随便丢两句话并要求大家解决那里的问题:-)
标签: django mobile oauth-2.0 restful-authentication django-piston