Как разрешить доступа к API только от определенного приложения Android (IOS, web)?
Можно ли на стороне сервера, там где работает API ограничить к нему доступ так, чтобы обращаться могли только определенные приложения (Android, web с определенных url, IOS), причем без проверки пользователей?
Раньше я считал, что такое ограничение реализовать невозможно, т.к. сервер просто не сможет проверить подлинность источника.
Сегодня я засомневался, когда увидел настройки доступа к Google Maps API, там для API ключа есть настройки, ограничивающие его использование определенным приложением android, для этого используются "контрольная сумма сертификата SHA-1".
Возникает вопрос, как они это делают и насколько это ограничение устойчиво. Закрытый ключ в приложении быть не может, иначе его скомпрометируют, если для доступа используется открытый ключ, то почему бы злоумышленнику не извлечь его из приложения и не использовать в запросе?
Если есть объяснение схеме работы у гугла, поделитесь, пожалуйста, своими соображениями.
Возможно определить клиента по заголовкам запроса, которые подделать не составляет труда. Ну, а у Гугла скорее всего стоит фильтр на ключ по типу клиента.
Думаю, что здесь гугл в своих Картах пользуется какими-то внутренними недокументируемыми механизмами, зная о приложении больше, чем обычные разработчики. Возможно, что даже не передают эту информацию напрямую из приложения Карт, а используя некий механизм внутри системы. Поскольку, если передавать все заголовки и данные из приложения, то их легко отследить и скопировать на другое устройство/систему.