Ограничить запросы API только моему мобильному приложению

Есть ли способ ограничить отправку запросов в REST API только запросами, поступающими из моего собственного бинарного мобильного приложения? Это приложение будет распространено в Google Play и Apple App Store, поэтому должно подразумеваться, что у кого-то будет доступ к его двоичному файлу и попробуйте его перепроектировать.

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

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

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

Solutions Collecting From Web of "Ограничить запросы API только моему мобильному приложению"

Любые учетные данные, которые хранятся в приложении, могут быть выставлены пользователем. В случае Android они могут полностью декомпилировать ваше приложение и легко получить их.

Если соединение с сервером не использует SSL, их можно легко вынюхивать из сети.

Серьезно, любой, кто хочет получить учетные данные, получит их, поэтому не беспокойтесь о их сокрытии. По сути, у вас есть открытый API.

Есть некоторые подводные камни, и для управления общедоступным API требуется дополнительное время.

Многие публичные API по-прежнему отслеживают по IP-адресу и реализуют tarpits, чтобы просто замедлять запросы с любого IP-адреса, который, как представляется, злоупотребляет системой. Таким образом, законные пользователи с одного и того же IP-адреса могут продолжать работать, хотя и медленнее.

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

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

Другим вариантом является регистрация пользователей, поэтому вы можете блокировать учетные данные, а не IP-адрес, когда вы обнаружите злоупотребления.

Нет. Вы публикуете сервис с открытым интерфейсом, и ваше приложение, по-видимому, будет обмениваться данными через этот REST API. Все, что может отправить ваше приложение, может отправить любой другой человек. Это означает, что единственным способом обеспечения доступа является аутентификация в некотором роде, т. Е. Сохранение секретности. Однако вы также публикуете свои приложения. Это означает, что любой секрет в вашем приложении также выдается. Вы не можете иметь это в обоих направлениях; Вы не можете ожидать, что и вы получите секрет и сохраните его в секрете.

Вы ничего не можете сделать. Потому что, когда вы позволяете кому-то, они могут вызывать ваши API. Вы можете сделать, как показано ниже:

Поскольку вы хотите только, и только ваше приложение (с определенным именем и подписью пакета) вызывает ваши API-интерфейсы, вы можете получить ключ подписи вашего apk прагматично и отправить, чтобы отменить в каждом вызове API, и если это так, ответьте на запрос. (Или у вас может быть API-маркер, который ваше приложение вызывает в нем каждое начало приложения, а затем использовать этот токен для других API-интерфейсов – хотя токен должен быть недействительным после нескольких часов работы)

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

Даже подписи apk можно издеваться над чем-то трудным образом, но лучше всего это можно сделать.