Этого вида вопроса уже прошу IOS How To Secure Web Service Without LoginКак обезопасить веб-служба приходит только из Android App на сервер без авторизации
, но до сих пор я не смог найти решение, чтобы сделать веб-службу безопасной без пользователя аутентификация. У меня есть веб-сервис, созданный специально для Android-приложения. Я хочу, чтобы весь API попал только из моего приложения Android на сервер. Никто не взламывает его и не ударяет по api от restclient или почтальона. Как сервер будет идентифицировать этот запрос, исходящий из приложения Android явно разработанный и отвечающий соответствующим образом.
Способ 1 Я думал создать код api и отправить этот ключ api в заголовок запроса, который может быть проверен на сервере. Если ключи совпадают, то сервер может предположить, что запрос поступает из приложения whitelisted android. Но проблема в том, что ключ должен присутствовать внутри приложения Android, которое можно легко декомпилировать и его можно взломать. Атакующий может отправить запрос api непосредственно от клиента приложения/web/ios rest после получения ключа.
Способ 2 Ключ Api можно легко украсть даже в sharedprefernce. Поэтому я сохранил это в собственном коде, используя jni, который нельзя декомпилировать, но этот код можно разобрать, а ключ можно прочитать оттуда. Поэтому держать ключ в apk небезопасно. Таким образом, этот подход не удался.
Способ 3 Я думал, что сначала не должен содержать оригинальный ключ внутри приложения. но использовать асимметричные ключи. Частный ключ хранился на сервере, а зашифрованный ключ, полученный из открытого ключа, хранился в приложении Android. API вызывается с вводом в качестве зашифрованного ключа, а сервер расшифровывает ключ API с помощью закрытого ключа и возвращает этот ключ в ответ. этот ключ хранится в области приложения и для последующего запроса этот ключ отправляется в заголовках. Таким образом, теперь запрос становится незащищенным, поскольку оригинальный ключ неизвестен злоумышленнику. но проблема возникает здесь , что зашифрованный ключ + первый апи подвергается в APK
Hacker будет вызывать Апи отправки зашифрованного ключа вместе с URL и получить фактический ключ в ответ на то, что ключ может быть использован в любом месте. Поэтому вопрос заключается в том, как защитить его, чтобы никто не мог использовать ресурсы без входа в систему. Я должен следить за тем, чтобы удача попадала только из приложения.
Метод 4 Для этого требуется логин с google, предоставляющий токен JWT Id, который может быть легко проверен на сервере. но я не хочу, чтобы пользователь заходил в Google. Просто знать, что запрос поступает только от приложения для Android.