Определение того, пришел ли запрос из приложения iPhone

У меня есть приложение для iPhone, которое взаимодействует с сервером (оба из них принадлежат мне и написаны для них). Мне нужно определить, пришел ли запрос на мой сервер с iPhone (или любого мобильного устройства, на котором запущено приложение, которое я написал в этом отношении). По сути, я хочу разрешить только написанным мной приложениям взаимодействовать с сервером, и мне нужен способ это проверить. Поскольку я пишу приложения, я могу изменять заголовки и то, что мне не нужно.

Я немного читал о шифровании с открытым ключом, но не думаю, что это сработает. Если бы я отправил какое-то секретное хэш-слово в свои заголовки, чтобы проверить его, не могла ли какая-то внешняя сторона просто получить эти заголовки и использовать те же самые в своем запросе?


person joshholat    schedule 17.02.2012    source источник


Ответы (3)


Вы можете использовать контрольную сумму. Допустим, у вас есть что-то вроде: тема даты

и вычислите контрольную сумму, используя, скажем, MD5 (дата + «строка» + тема), и вы точно так же вычисляете MD5 на сервере. Если они совпадают, они из мобильного клиента.

Это будет работать до тех пор, пока кто-нибудь не разгадает ваш алгоритм.

person Zyberzero    schedule 17.02.2012
comment
Хм, это может сработать. Дата должна быть точной только до дня или около того, хотя в противном случае они никогда не совпадут, потому что вы не знаете, сколько времени займет запрос. - person joshholat; 17.02.2012
comment
Не забывайте, что вам, возможно, придется учитывать разные часовые пояса, которые могут давать разные дни. Вероятно, лучше всего использовать UTC. - person Nick Bull; 18.02.2012

Вы можете заставить свой сервер отправить сообщение вашему приложению, содержащее случайный код. Это сообщение и код меняются каждый раз при отправке.

Затем ваше приложение выполняет какой-то алгоритм для этого сообщения, чтобы «зашифровать» его и отправить обратно на сервер, а затем сервер может проверить его. Таким образом, вам нечего перехватывать и использовать, не зная вашего «шифрования».

Конечно, они могли бы перехватить сообщение с любого направления, а затем отработать ваш алгоритм, но если вы сделаете это достаточно сложным, то на это уйдет какое-то время.

person Nick Bull    schedule 17.02.2012
comment
Это допустимый способ, но запросы поступают из приложений. Чтобы сделать это таким образом, мне нужно, чтобы приложение запросило код, что-то сделало с ответом, а затем сделало еще один запрос на сервер, что, вероятно, является большим количеством ненужной связи. Это, вероятно, было бы лучше, если бы мне нужно было быть более безопасным, чем ответ @Zyberzero. - person joshholat; 17.02.2012

Вы можете просто использовать базовую аутентификацию HTTP, если вам не нужно что-то более безопасное.

person picciano    schedule 17.02.2012
comment
Из-за того, что я пытаюсь сделать, это немного сложнее. Все запросы аутентифицируются одинаково, но мне также нужно определить, откуда приходит запрос, если это имеет смысл. - person joshholat; 21.02.2012