如何才能使App Engine HTTP URL处理程序仅在内部可调用?

时间:2014-06-11 16:13:20

标签: google-app-engine go

我有一组带有HTTP URL处理程序的不同模块。一些模块处理程序仅用于内部访问,我使用urlfetch从其他模块调用它们。如何确保这些处理程序无法从更广泛的互联网上调用?

任务队列可以通过允许您将login: admin添加到其网址app.yaml来解决此问题。这使您可以确保只能通过内部任务队列函数调用来调用任务队列。我可以用我的处理程序做类似的事吗?我不想在API与其消费者之间分享一个秘密。

2 个答案:

答案 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)
        }
    })
}