То, что вы хотите сделать, это использовать взаимно-аутентификацию SSL, так что ваш сервер будет принимать только входящие соединения от вашего приложения и ваше приложение будет взаимодействовать только с сервером ,
Вот высокоуровневый подход. Создайте сертификат SSL с самозаверяющим сервером и разверните его на своем веб-сервере. Если вы используете Android, вы можете использовать keytool, входящий в комплект Android SDK для этой цели; если вы используете другую платформу приложений, аналогичные инструменты существуют и для них. Затем создайте самозаверяющий клиент и разверните его в своем приложении в настраиваемом хранилище ключей, включенном в ваше приложение, в качестве ресурса (keytool также генерирует это приложение). Настройте сервер, требующий аутентификации на стороне клиента, и только принять сертификат клиента, который вы создали. Настройте клиента для использования этого сертификата на стороне клиента для идентификации себя и принимайте только тот серверный сертификат, который вы установили на своем сервере для этой части.
Если кто-то, кроме вашего приложения, пытается подключиться к вашему серверу, соединение SSL не будет создано, так как сервер отклонит входящие SSL-соединения, которые не представляют сертификат клиента, который вы включили в ваше приложение.
Шаг за шагом для этого является гораздо более длинным ответом, чем это оправдано здесь. Я бы предложил сделать это поэтапно, так как в Интернете есть ресурсы о том, как работать с самоподписанным SSL-сертификатом в Android (я не так хорошо знаком с тем, как это сделать на других мобильных платформах), как на стороне сервера, так и на стороне клиента. В моей книге «Безопасность приложений для платформы Android», опубликованной O'Reilly, также есть полная версия.
Я не уверен, удовлетворены ли какие-либо ответы на ваш вопрос. Пожалуйста, сообщите, как вы подошли к описанной вами проблеме. Я создаю веб-приложение на основе REST + AJAX, которое можно использовать для незарегистрированных пользователей. Как и я, я хочу защитить ресурсы от ботов. –
Логически не существует способа сделать API по-настоящему частным, если он вызывается с веб-страницы, где каждый может просматривать источник и/или отслеживать данные, отправляемые на сервер. Чтобы поймать ботов, у вас есть обычные трюки, такие как Captcha, но в конечном итоге вам нужна поддержка на заднем плане (WAF, быстрое автоматическое масштабирование и т. Д.), Чтобы иметь дело с возможностью автоматических атак типа DDOS. До тех пор, пока вы обнаружите вероятные атаки DDOS как можно раньше (до создания соединений с БД и т. Д.), Это ничем не отличается от обработки ботов, пытающихся загрузить страницу в первую очередь. –