С вашим требованием, чтобы пользователь не вводил пароль в любой форме, ваши возможности строго ограничены.Как вы заметили, любой общий секретный ключ в приложении может быть извлечен кем-либо с помощью бинарного извлечения и т. Д. - по сути, вы не можете остановить действительно преданного взломщика, который узнает секрет и затем просто отправит его на сервер.
Существуют подходы, которые не являются водонепроницаемыми, но могут затруднить массовое злоупотребление вашими услугами.Одним из примеров может быть выпуск обновлений для вашего приложения каждый месяц (или две недели, или что-то еще), которые содержат новый общий секрет.Тогда, очевидно, ваш веб-сервис должен ожидать нового общего секрета, а также принимать существующий секрет для каждого периода времени.
Если ваши данные очень чувствительны, вы можете прекратить прослушивание, используя HTTPS;но, как говорит Ник, если вы используете HTTPS для чего-либо, кроме аутентификации, у вас есть дополнительные обручи для перехода во время отправки приложения.