引用Google App Engine inter module communication authorization我遇到的问题是在Docs (communication between modules)中说:
您可以配置任何手动或基本缩放模块以接受 通过将其处理程序限制为来自应用程序中其他模块的请求 只允许管理员帐户,指定login:admin 模块配置文件中的适当处理程序。有了这个 限制到位,来自应用程序中任何其他模块的任何URLFetch 将由App Engine和任何请求自动进行身份验证 那些不是来自申请的将被拒绝。
这正是我的模块名称“api1”的配置。在我的 app.yaml 文件中,我有:
# can accept requests from other modules.
# with login: admin and they are authenticated automatically.
- url: /.*
script: _go_app
login: admin
我正在尝试使用 urfetch.fetch()方法从同一个应用中的其他模块进行服务调用,我的实现是:
from google.appengine.api import urlfetch, modules, app_identity
from rest_framework.response import Response, status
@api_view(['POST'])
def validate_email(request):
url = "http://%s/" % modules.get_hostname(module="api1")
payload = json.dumps({"SOME_KEY":"SOME_VALUE"})
appid = app_identity.get_application_id()
result = urlfetch.fetch(url + "emails/validate/document",
follow_redirects=False,
method=urlfetch.POST,
payload=payload,
headers={"Content-Type":"application/json")
return Response({
'status_code': result.status_code,
'content': result.content
}, status=status.HTTP_200_OK)
根据文档,指定了 follow_redirects = False , fetch()会自动在我的调用中插入一个标题(我甚至试图明确添加它)使用“X-Appengine-Inbound-Appid”:MY-APP-ID 。 不幸的是,我得到了fetch调用302重定向的结果,如果我遵循它,它是重定向到身份验证表单。这发生在开发服务器和生产中。
您能告诉我如何在我的 validate_email 方法(属于同一个应用程序中的其他模块)中调用我的api1服务吗? 有没有其他方法来验证调用,因为它似乎在文档中建议的方式不起作用?
谢谢
答案 0 :(得分:0)
正如here所写,这是google appengine public issue tracker现在的跟踪问题。所以每个人都可以去那里检查更新。
与此同时,我解决了从 app.yaml 中移除login: admin
的问题,并在我的服务处理程序中,我手动检查了标头{{1和它的价值。