Intereting Posts
Цель CONNECTIVITY_ACTION получена дважды при подключении Wi-Fi USB-соединение и отладка одновременно Android скриншот активности с панелью действий Укажите канал (или частоту) для сканирования Wi-Fi в Android Ошибка приложения при запуске Proguard на GSON (который использует перечисление) Ожидание завершения потока без блокировки нити пользовательского интерфейса Интеграция Google Plus в приложение для Android Может ли служба связывать другую службу Метод getInstance (byte ) не определен для типа Document .. Android Исключение происходит для некоторых пользователей с помощью электронной почты Ошибка во время синхронизации: тайм-аут при развертывании apk на устройстве с использованием maven Как контролировать ширину и высоту диалогового окна Alert Dial по умолчанию в Android? Функция увеличения зума внутри прокрутки Java.lang.IllegalArgumentException: уже добавлено Lokio / AsyncTimeout Получение текущей позиции ViewPager

Позволяет только моим приложениям для Android запускать API конечной точки в java

Я создал конечную точку apis, но проблема в том, что любой, у кого мой идентификатор проекта, может перейти в api explorer и выполнить эти apis. Я положил только идентификатор клиента Android (используя хранилище отладки) поверх объявления класса конечной точки, но все же я могу перейти в режим инкогнито и выполнить apis. Как я могу ограничить apis, чтобы только мои приложения для Android имели доступ, и все остальные будут выбрасываться с некоторым исключением?

API-интерфейсы можно защитить, добавив ключевой параметр, который должен быть корректным для вызова API. Если пользователь API не знает ключ, он не сможет использовать API даже с API Explorer.

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

Недостатки включают в себя очень легко обойти определенного пользователя, просто взглянув на трафик.

Вы должны убедиться, что вы правильно закодировали свой API / сервер, чтобы принимать клиентское приложение только для своего приложения; Убедитесь, что вы не видите com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID как один из идентификаторов клиента в аннотации @Api в классе API:

 @Api( name = "myApi", version = "v1", clientIds = {<your android clientId>}, ) public class myApi { // your API code here } 

Если присутствует идентификатор клиента API Explorer, он позволит ему выполнить API из API. Я не уверен на 100%, но я думаю, что вы все еще можете видеть, что ваш API формирует проводник без идентификатора клиента, но выполнение будет предотвращено с ошибкой.

В этой статье есть дополнительная информация: https://cloud.google.com/appengine/docs/java/endpoints/auth#Specifying_authorized_clients_in_the_API_backend

Возможно, вам захочется подумать о том, чтобы включить надлежащее аутентификацию вокруг вызовов конечной точки (т.е. проверка подлинности каждого пользователя для каждого метода), если она особенно чувствительна. Просто добавление параметра пользователя к @ApiMethod должно быть достаточным для принудительного использования пользователей перед выполнением каждого метода.

Надеюсь, это поможет.

Вы можете использовать на каждом api allowed_client_ids только ANDROID_CLIENT_ID, может быть возможным обходным путем.

Я думаю, что это может помочь, если вы еще не выполнили его: https://cloud.google.com/appengine/docs/python/endpoints/auth#Python_Creating_OAuth_20_client_IDs

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

Вот как это будет работать.

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

На получающей стороне ваш веб-API будет проверять, был ли запрос получен только из вашего приложения Android.

Обратите внимание, что это будет работать ТОЛЬКО для вашего приложения. Он не будет работать, чтобы поймать все общие запросы Android /

Вот несколько моментов для рассмотрения:

Облачные конечные точки поддерживали идентификатор ANDROID CLIENT ID и подписку на пакет, поэтому он должен позаботиться о том, что только подписанное приложение Android с вашей стороны может получить доступ к конечной точке

,

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

,

Удалить доступ для всех через аннотации может быть проблематичным, если вы хотите быстро использовать API-интерфейс API для тестирования API. Таким образом, доступ к API Explorer доступен.