针对web客户端和移动RESTapi安全性的推荐配置



我意识到这个主题有很多问题,我已经研究了几天了。我想确保我的问题尽可能具体,因为我还没有完全了解最佳方法。

目前,我有一个开发的django网站,web客户端可能95%通过django-活塞jsonRESTapi进行通信。另外5%是一些重新调整的登录功能,仍然通过具有CSRF保护的POST表单。理想情况下,我希望将剩余部分也移到RESTapi中。

我现在需要找出最好的推荐解决方案,以可重复使用和愉快地共存的方式保护web客户端和移动客户端(应用程序尚未开发)。我读过很多文章,最终推荐OAuth2(和https)用于移动端,但我仍然对如何设置web客户端安全性感到困惑。我也在理解OAuth2方面,以及我是否可以使用2格形式。目前,web客户端是经过django身份验证的。从技术上讲,jsonp功能在活塞中仍然是活动的,所以我认为任何人都可以使用第三方应用程序的api,只要他们的网络会话有authcookie?

我的api的使用摘要:

  1. API是服务器应用程序的完全私有接口
  2. 如果API不能被第三方web客户端mashup广泛重用,那将是理想的选择
  3. 该数据对necc不敏感。它只是一个社交型网站,大多数个人信息都是基本的用户档案,比如电子邮件、地址等

我的问题摘要:

  1. OAuth2是确保移动应用程序访问安全的最佳推荐方法吗?这与web客户端方面有什么关系吗?如果建议使用OAuth2,它是否应该是应用程序范围内的密钥,并与应用程序版本一起进行版本控制
  2. web客户端是否应该使用通过ajax传递的CSRF,并禁用jsonp以确保其始终相同?基本上,我是否单独处理web客户端安全
  3. 我应该如何组织URL/应用程序实例/子域或其他建议的内容来维护网络与移动安全?我是否只需要单独的url前缀,一个用于使用不同规则的移动设备

我正在寻找django活塞解决这些问题的具体建议。我已经扩展了我的项目,并开始使用这个分叉版本的活塞:https://bitbucket.org/jespern/django-piston-oauth2

我的一个想法是创建一个活塞资源,首先检查其来源是否相同,然后只强制django-auth,否则强制oauth2,但我不确定这是否合适。

更新日期:2012年1月1日

根据Spike提供的信息,我开始使用piston-auth2。我最终创建了一个fork,为nonrel-django(mongodb)添加了一些修复程序,并派生了一些也使用oauth2和活塞的示例:

https://bitbucket.org/justinfx/django-piston-oauth2-nonrel-example

现在,这只是我真正把它与我自己的项目挂钩并使其发挥作用的问题。但这些测试都很有效。

我完全支持OAuth2,所以我将根据该解决方案进行回复。

OAuth2是保护移动应用程序安全的最佳推荐方法吗通道这与web客户端方面有什么关系吗?如果如果OAuth2是应用程序范围的密钥与应用程序版本同步?

是的,OAuth2目前被广泛认为是推荐的方法。它比OAuth1简单得多。我建议阅读规范,而不是关于规范的博客文章,因为规范本身写得很清楚。除了规范之外,看看像Facebook和Foursquare这样的成熟实现是有用的,因为它们并不是在各个方面都遵循规范,而是进行了一些修改,使其更实用、更易于使用。

至于版本控制,从教条的REST角度来看,这是不可取的。然而,从更实际的角度来看,这是非常常见的做法,并使API开发人员和客户的生活更加简单。我建议阅读Apigee博客,因为他们有很多关于版本控制等主题的帖子。

web客户端是否应该使用通过ajax传递的CSRF禁用jsonp以确保其原点始终相同?基本上,我是单独处理web客户端安全性?

如果使用完整的oauth2解决方案,则需要启用跨站点api请求。要拒绝你不知道的应用程序,你可以在查看传入的access_token时添加检查

http://blog.apigee.com/detail/crossing_the_streams_handling_cross-site_api_requests/

我应该如何组织URL/应用程序实例/子域或建议采取什么措施来维护网络与移动安全?我只需要单独的url前缀,一个用于使用不同url前缀的移动设备规则?

只要决定什么对你有效。很多人的移动网站都在";m.mysite.com";或";mobile.mysite.com";这些天。如果使用完整的OAuth2实现,那么这个决定实际上与整个身份验证讨论无关。

我正在寻找django活塞的具体建议来解决这些问题。我已经扩展了我的项目并开始玩使用这种叉形活塞:https://bitbucket.org/jespern/django-piston-oauth2

我不熟悉这个,因为我用的是美味。如果它不能很好地为你工作,有一个优秀的Django OAuth2独立服务器,我使用过:

https://github.com/hiidef/oauth2app

最新更新