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

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

Ответ 1

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

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

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

Ответ 2

Вам нужно убедиться, что вы правильно закодировали свой 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 должно быть достаточным для принудительного использования пользователей перед выполнением каждого метода.

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

.

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

.

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