REST身份验证内部项目(iPhone到grails应用程序)使用两条腿的oauth?

REST身份验证内部项目(iPhone到grails应用程序)使用两条腿的oauth?,iphone,grails,oauth,Iphone,Grails,Oauth,我正在创建一个iPhone项目,并将通过REST与服务器通信。我将发送推送通知,从另一个服务启动。我想验证从iPhone到我的服务器的所有通信(例如,由于推送请求不能保证通过,因此与服务器同步通知) 两条腿的Oauth似乎是理想的解决方案,但是关于它的信息并不多,特别是因为大多数库似乎面向消费者而不是提供者。我应该使用什么图书馆 Oauth是不是太过分了?如果是,你有什么建议?目前我正在寻找最简单的解决方案;如果我要花一个多星期的时间来实现Oauth,那就不值得了 谢谢2条腿的oauth会在那里

我正在创建一个iPhone项目,并将通过REST与服务器通信。我将发送推送通知,从另一个服务启动。我想验证从iPhone到我的服务器的所有通信(例如,由于推送请求不能保证通过,因此与服务器同步通知)

两条腿的Oauth似乎是理想的解决方案,但是关于它的信息并不多,特别是因为大多数库似乎面向消费者而不是提供者。我应该使用什么图书馆

Oauth是不是太过分了?如果是,你有什么建议?目前我正在寻找最简单的解决方案;如果我要花一个多星期的时间来实现Oauth,那就不值得了


谢谢

2条腿的oauth会在那里做这项工作

2腿是相对基本的,并且更容易实现3腿(例如,不需要跟踪令牌)。两条腿的oauth所做的就是根据客户机和服务器之间的共享秘密生成您发送的请求的签名。然后,服务器验证签名是否正确。差不多就是这样

iPhone上可能有一些库为您完成了签名请求的大部分工作,而大多数web服务器语言肯定都有用于验证签名的库

从较高的层次来看,以下是您希望做的事情:

  • 以某种方式在服务器和iphone客户端上获取共享秘密(密码、随机生成的字符串等)——这必须在边界之外完成,而不是作为请求的一部分(即,将其硬编码到每个组件中,或放入配置文件)。假设您使用的是HMAC-SHA1进行签名,而不是RSA-SHA1-如果是RSA,则共享公钥
  • 将所有请求参数、URL、帖子正文等组合成一个关于排序等的字符串
  • 通过计算带有密码的HMAC-SHA1哈希字符串,生成请求的签名
  • 在请求后附上签名
  • 将其发送到服务器
  • 服务器接收请求
  • 服务器使用与客户端相同的算法计算签名(以及密码)
  • 如果服务器上生成的签名与从客户端发送的签名匹配,则该请求受信任,否则拒绝访问

通常你不必自己去实现这些。大多数库都允许您生成签名,并根据2腿oauth的需要对其进行验证。

我在稍加修改的oauth rest身份验证上编写了一个快速writeup。希望所使用的一些技术能够帮助您解决问题

iphone上有hmac-sha1/hmac-md5库,我相信AmazonSDK也有。对于php,有内置的hmac-sha1/hmac-md5函数。因此,您只需创建一个包含所有要散列的请求参数/url/body/等的字符串,并在其上使用hmac-sha1/hmac-md5,将签名添加为请求参数,然后通过重新创建签名在服务器上进行比较

我谈了一些你想考虑的事情,以防止滥用WebService,比如把时间戳添加到哈希的一部分。 我在我的服务器上使用cakephp框架,但我不得不为RESTful身份验证拼凑一个自定义组件,但这不是很难做到。您还需要在共享密钥短语查找上使用memcache,因为如果您在数据库中为每个请求进行查找(如果您在数据库中存储会话,则情况相同),这将在负载下销毁数据库