Ограничение ключа API для Google API Вызывается из URL Fetch в App Engine

У меня есть ключ API для API Google, который я хотел бы использовать во всех своих запросах. Некоторые из этих запросов будут исходить из приложения Google App Engine (Python 2.7). Я планировал использовать библиотеку UrlFetch для выполнения запроса POST, в основном следующим образом:

headers = {'Content-Type': 'application/json'}
payload = {'longUrl': request.long_url}
result = urlfetch.fetch([API_REQUEST_URL],
                method=urlfetch.POST,
                payload=json.dumps(payload),
                headers=headers)

json_result = json.loads(result.content)

Я установил ограничение реферера для моего ключа API на *.[my-app].appspot.com/* с надеждой, что это защитит мой ключ API от несанкционированного использования и сведет на нет необходимость обновления ограничения ключа на основе IP (поскольку IP-адреса App Engine постоянно меняются).

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

Какова лучшая практика? Как мне ограничить ключ, учитывая, что я использую urlfetch из App Engine? Если я использую ограничение HTTP Referrer, какой адрес мне использовать?

Большое спасибо.

2 ответа

Решение

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

Но вы можете добавить проверку на основе X-Appengine-Inbound-Appid заголовок, который очищается инфраструктурой GAE и точно идентифицирует приложение. От отправки запроса к другому приложению App Engine:

При отправке запроса в другое приложение App Engine ваше приложение App Engine должно подтвердить свою идентичность, добавив заголовок X-Appengine-Inbound-Appid на запрос. Если вы указали службе URL Fetch не выполнять перенаправления, App Engine автоматически добавит этот заголовок в запросы.

Чтобы указать службе URL Fetch не выполнять перенаправления, установите fetchfollow_redirects параметр для False,

Примечание. Если вы делаете запросы к другому приложению App Engine, используйте его appspot.com доменное имя, а не пользовательский домен для вашего приложения.

Вы получили это сообщение об ошибке?

Requests from referer <empty> are blocked.

urlfetch кажется не прикрепить Refer автоматически, поэтому вы должны установить Refer в заголовке вашего запроса.

headers = {'Content-Type': 'application/json','Referer': '*.[my-app].appspot.com/*'}
Другие вопросы по тегам