5

內我有一個谷歌的API,我想在我的所有要求它使用一個API密鑰。其中一些請求將源自Google App Engine(Python 2.7)應用程序。我曾計劃使用的網址抓取庫來完成POST請求,大體如下:API的谷歌API的調用URL限制鑰匙取App 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的密鑰限制(因爲App Engine IP一直在變)。

,彷彿讓我失望,因爲它似乎網址抓取未指定自身引用值。這樣的做法。我想我可以添加自己的推薦人,但其他人也可以。這種方法不是很安全。

最佳做法是什麼?鑑於我在App Engine中使用urlfetch,應該如何限制密鑰?如果我確實使用HTTP Referrer限制,我會使用哪個地址?

非常感謝。

回答

1

正如你所觀察到的網址標頭可以僞造,因此設置你的API密鑰引薦限制是相當無用的啓動。

但是你可以添加一個基於X-Appengine-Inbound-Appid頭,這是由GAE基礎設施進行消毒並精確識別應用程序的檢查。從Issuing a request to another App Engine app

當發出另一個App Engine應用程序的請求,您的App Engine應用程序 必須通過添加頁眉 X-Appengine-Inbound-Appid請求維護其身份。如果您指示URL 提取服務不遵循重定向,應用程序引擎會自動添加這個頭 請求。

要指示URL提取服務不遵循重定向,請將 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/*'}