Ограничения на ключи Google API не вступают в силу
Я создал ключ API Google и использую его для отображения карт в своем приложении для Android. По соображениям безопасности рекомендуется применять ограничения к API, чтобы злоумышленники не могли легко его использовать.
Поэтому я применил ограничения, как показано ниже: И мое приложение отлично работает с текущими ограничениями. Теперь, когда я пытаюсь получить доступ к картам с помощью этого запроса (через браузер):
https://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=600x300&maptype=roadmap&key=AIxxxxxxxxxxxxxxxxxxxxxxxx&signature=6d2cd94cb942dcc8da184cb28cf0e1a0f53e5837
Если ключ — это мой настоящий ключ API, но подпись — это совершенно случайный SHA1, это дает мне следующую ошибку:
Сервер платформы Google Карт отклонил ваш запрос. Не удалось аутентифицировать запрос. Предоставленная «подпись» недействительна для предоставленного ключа API или предоставленный «ключ» недействителен.
Это имеет смысл, поскольку это не мое приложение SHA1, а также я обращаюсь к API GoogleMap через веб-браузер, а не через приложение Android.
Однако если я удалю параметр запроса подписи из запроса, это сработает. Теперь, если кто-то декомпилирует мое приложение и получит ключ API из файла AndroidManifest приложения , он может легко использовать этот ключ для выполнения множества запросов API и злоупотребления моим ключом. Похоже, эти ограничения не работают или я что-то не так понял? Как я могу ограничить возможность использования этого ключа только с моим приложением для Android?
1 ответ
Кажется, я не могу найти подтверждающую документацию, но, исходя из моего опыта, ключевые ограничения Google (по IP-адресу, рефереру, приложению Android и т. д.) не работают для статических карт Google. Как вы заметили, даже если у вас установлены ограничения, вы все равно можете получить доступ к статическим картам через браузер, если опустите подпись.
Это означает, что единственный способ защитить статические карты — это использовать подпись. Статические карты Google позволяют получить доступ как с подписью , так и без нее.
С подписью: если вы включаете параметр подписи, он должен быть правильным. Правильная подпись уникальна для каждого URL-адреса статической карты, к которому вы пытаетесь получить доступ. Как создать эту подпись, описано здесь: https://developers.google.com/maps/documentation/maps-static/digital-signature#sample . -код для подписи URL
Обратите внимание, что подпись создается путем хеширования URL-адреса с секретным ключом, который создается в консоли Google Cloud:https://developers.google.com/maps/documentation/maps-static/digital-signature#get-secret .
Вам следует сгенерировать весь URL-адрес, включая подпись, на своем сервере (а не в коде вашего приложения), где секретный ключ может храниться... в секрете.
Без подписи : если вы опустите параметр подписи, проверка подписи будет пропущена , и, как вы правильно заметили, любой, кто может видеть URL-адрес вашей неподписанной статической карты, может украсть ключ для создания других статических карт (или использовать ключ для других служб, если только вы включили ограничения).
Чтобы ограничить потенциальный ущерб, по умолчанию существует ограничение в 25000 в день для неподписанного доступа. Это ограничение можно изменить ( в том числе до 0 , что фактически делает подписи обязательными для вашего ключа), как описано здесь:https://developers.google.com/maps/documentation/maps-static/digital-signature#limit-unsigned- Запросы