5

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

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 НЕ задает значение для referrer самостоятельно. Я предполагаю, что могу добавить собственного реферера, но тогда мог бы кто-нибудь еще. Этот подход не очень безопасен.

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

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

ответ

1

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

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

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

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

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

1

У вас такое сообщение об ошибке?

Requests from referer <empty> are blocked. 

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

headers = {'Content-Type': 'application/json','Referer': '*.[my-app].appspot.com/*'}