我的Rail3应用程序如何验证来自我的iPhone应用程序的请求?

时间:2011-04-20 00:18:52

标签: iphone ruby-on-rails ios ruby-on-rails-3 ipad

我想在我的iPhone游戏中添加锦标赛模式,并有一个Rails 3应用程序跟踪锦标赛统计数据。基本上,每次比赛结束时,获胜者将使用像...这样的帖子请求报告给我的Rails 3应用程序。

POST http://myrail3app.com/tourney/matchresults?winner=username

显然,任何人都可以监控正在进行的请求的URL,然后一遍又一遍地在他们的计算机上发出相同的请求并作弊。所以我想要一些方法来验证Rails 3应用程序上的请求,确保请求仅来自我的iPhone应用程序。你的想法?

非常感谢你的智慧!

2 个答案:

答案 0 :(得分:1)

使用Jason提到的UDID并不一定会阻止某人多次在桌面浏览器中重新发布它。

您有几个选择,具体取决于您希望获得的复杂程度:

a)您的应用与rails服务器之间的公钥加密

b)您可以使用签名生成服务,类似于Facebook和亚马逊在其请求中处理单身的方式。

  • 您为应用提供了密钥 (最有可能是你的客观c代码 在某处),并生成一个HMAC 签名基于你的所有 您正在发送应用的参数 用你的秘密密钥(见 http://www.ouah.org/ogay/hmac/)。您 然后使用发送的参数 在...上生成另一个签名 导轨侧,并比较签名 发送(例如在铁路: OpenSSL::HMAC.hexdigest('sha256', message, key))。如果是2个签名 是不同的,你知道有人 篡改参数。

  • 查看Facebook (http://developers.facebook.com/docs/authentication/signed_request/) 和亚马逊 (http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide/SummaryOfAuthentication.html) 有关如何执行此操作的示例。

c)根据您是否要在应用程序和rails服务器之间共享其他数据,您可以在rails端实现Oauth提供程序。

答案 1 :(得分:0)

你可以让网站只响应iphone id的选择列表

NSString *deviceUDID = [myDevice uniqueIdentifier];