我有一组带有HTTP URL处理程序的不同模块。一些模块处理程序仅用于内部访问,我使用urlfetch从其他模块调用它们。如何确保这些处理程序无法从更广泛的互联网上调用?
任务队列可以通过允许您将login: admin
添加到其网址app.yaml
来解决此问题。这使您可以确保只能通过内部任务队列函数调用来调用任务队列。我可以用我的处理程序做类似的事吗?我不想在API与其消费者之间分享一个秘密。
答案 0 :(得分:1)
GAE内置了admin auth:
developers.google.com/appengine/docs/python/users/adminusers
答案 1 :(得分:0)
在您的网址处理程序中,阅读X-Appengine-Inbound-Appid
标头值。它将填充App Engine应用程序的名称,该应用程序通过其url fetch方法调用处理程序。确保使调用的网址获取方法不遵循重定向。
Click here for documentation associated with this.
这是我的Go处理程序,可以实现我的目标:
func internalOnlyHandler(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
appID := appengine.AppID(c)
headerAppID := r.Header.Get("X-Appengine-Inbound-Appid")
if appID == headerAppID {
h.ServeHTTP(w, r)
} else {
http.Error(w, "403 forbidden", http.StatusForbidden)
}
})
}