Как мое приложение Rail3 может аутентифицировать запрос от моего приложения для iPhone? - PullRequest
0 голосов
/ 20 апреля 2011

Я бы хотел добавить режим турнира в мою игру для iPhone, чтобы приложение Rails 3 отслеживало статистику турнира.По сути, каждый раз, когда матч заканчивается, о победителе сообщается в моем приложении на Rails 3 с помощью пост-запроса, например ...

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

Очевидно, что любой может отслеживать URL-адрес выполняемого запроса, а затем делатьодни и те же запросы на своем компьютере снова и снова и обмануть.Поэтому я хотел бы как-нибудь проверить подлинность запроса в приложении Rails 3, чтобы убедиться, что запрос поступает только из моего приложения для iPhone.Ваши мысли?

Большое спасибо за вашу мудрость!

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Использование UDID, упомянутого Джейсоном, не обязательно мешает кому-либо повторно разместить его в настольном браузере несколько раз.

У вас есть несколько вариантов, в зависимости от того, насколько сложным вы хотите получить:

a) Шифрование с открытым ключом между вашим приложением и сервером rails

b) Вы можете использоватьсервис генерации подписи, аналогичный тому, как Facebook и Amazon обрабатывают особенности в своих запросах.

  • Вы предоставляете секретный ключ для приложения (скорее всего, в вашем целевом c-коде) и генерируетеподпись HMAC, основанная на всех ваших параметрах, которые вы отправляете приложению со своим секретным ключом (см. http://www.ouah.org/ogay/hmac/).. Затем вы используете параметры, переданные для создания другой подписи на стороне рельсов, и сравниваете отправленную подпись (например, в рельсах).: OpenSSL::HMAC.hexdigest('sha256', message, key)). Если две подписи отличаютсяНет, вы знаете, что кто-то вмешался в параметры.

  • См. Facebook (http://developers.facebook.com/docs/authentication/signed_request/) и Amazon (http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide/SummaryOfAuthentication.html)) для примера того, как это сделать.

c) В зависимости от того, хотите ли вы делиться другими данными между вашими приложениями и вашим сервером rails, вы можете реализовать Oauth-провайдера на стороне rails.

0 голосов
/ 20 апреля 2011

вы можете просто заставить сайт отвечать только на выбранный список идентификаторов iphone

NSString *deviceUDID = [myDevice uniqueIdentifier];
...