Я - разработчик Android, создающий свой первый интерфейс для Google App Engine (java) для своих приложений. Я не хочу, чтобы кто-либо еще обращался к этому API, кроме моего приложения. (Я планирую использовать App Engine для проверки покупок InApp в моем приложении для Android). Мои данные не имеют отношения к пользователям, поэтому, Я не хочу, чтобы пользователи имели доступ к моему API, даже если они вошли в систему со своими учетными записями Google (на веб-устройствах или устройствах Android).
Я выполнил следующие шаги: "Указание авторизованных клиентов в интерфейсе API" (https://developers.google.com/appengine/docs/java/endpoints/auth) например, генерировать идентификаторы клиентов и добавлять их в @Api (clientIds и аудитория) кроме "Добавить параметр пользователя" - поскольку мне не нужна аутентификация пользователя.
Затем я развернул движок приложения, и я все еще могу получить доступ к API через API-обозреватель (https://your_app_id.appspot.com/_ah/api/explorer) (Я не добавил идентификатор клиента API_EXPLORER)
Я тестировал APK, который был создан с использованием конечных библиотек, перед добавлением идентификаторов клиентов и все еще мог получить доступ к API.
-
Добавляет ли пользовательский параметр ко всем API конечных точек? для достижения моей цели (ограничьте API только моими приложениями для Android).
-
Могу ли я передать null как имя userAccount из Android-клиента и игнорировать значение параметра пользователя на сервере (так как это будет null)? Будет ли это гарантировать, что API доступен только из моих приложений для Android (поскольку идентификатор клиента генерируется для моего имени пакета и SHA1 APK?)
-
Должен ли я использовать что-то вроде учетной записи службы для этой цели?
В документации для Android, необходимо добавить идентификаторы Android и Web-клиентов, а аудитория должна быть такой же, как идентификатор веб-клиента. Открывает ли этот доступ любой другой веб-клиент? могу ли я пропустить упоминание идентификатора веб-клиента и все еще достичь своей цели?
Цените свое время и помощь.
...... обновление с моим дальнейшим исследованием...
Я сделал следующее:
-
Добавлен пользовательский параметр для API-интерфейсов на бэкэнд - но не проверял нулевое значение. API все еще можно получить без прохождения каких-либо учетных данных (от Android отладки APK и API-браузера)
-
Затем я попробовал
mCredential = GoogleAccountCredential.usingAudience(это, "server: client_id:" + WEB_CLIENT_ID); mCredential.setSelectedAccountName(нуль);
и передал эти учетные данные строителю API (как предложено в некоторых других сообщениях) Причиненный FATAL EXCEPTION. Таким образом, мы не можем передавать имя нулевой учетной записи.
-
Я мог бы назвать API с помощью API-обозревателя без OAuth. Но когда я включил OAuth, он дал ошибку, заявив, что этот идентификатор клиента не разрешен! (Я еще не добавил com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID в client_ids {})
-
Затем я добавил код для вывода OAuthRequestException на бэкэнд, если пользователь имеет значение NULL. Это привело к тому, что API-браузер получал ошибки без OAuth. Он работает с OAuth включен после добавления API_EXPLORER_CLIENT_ID в client_ids)
-
Добавлен код для передачи действительного имени учетной записи пользователя (электронной почты) из моего приложения для Android. Затем я могу получить доступ к API только с моей версией APK. Даже отладчик APK получает исключения! - вот что я ожидал. Итак, я полагаю, что никакие другие приложения для Android не смогут получить доступ к этому API.
Итак, не проверка нулевого пользователя на API-интерфейсе - это плохая идея (как предложено в других сообщениях). Это так же хорошо, как не упоминание каких-либо client_id и отсутствие параметра пользователя.
Только вопрос, который у меня есть в данный момент: Если кто-то может определить WEB_CLIENT_ID из APK, смогут ли они использовать его для создания веб-клиента для доступа к моему API (я не упоминал секрет клиента в любом месте код. Поэтому я думаю, что это невозможно).
Я искал группы Google и Stackoverflow, но все еще не ясно.
-
(Аутентификация моего "приложения" в конечных точках Google не является "пользователем" ) Подтвердить мое приложение " к облачным конечным точкам Google, а не "пользователь"
-
(Как защитить свой API, который был создан с использованием Google Cloud Endpoints?) Как защитить свой API, который был создан с использованием Google Cloud Endpoints?
-
(Ограничьте доступ к конечным точкам Google в Android-приложении) Ограничить доступ к конечным точкам Google в Android-приложении