【问题标题】:Google App Engine inter module communication authorizationGoogle App Engine 模块间通信授权
【发布时间】:2015-05-14 12:54:53
【问题描述】:

Google Docs 它说

您可以将任何手动或基本扩展模块配置为接受来自应用程序中其他模块的请求,方法是将其处理程序限制为仅允许管理员帐户,并在模块的配置文件中为相应的处理程序指定 login: admin。设置此限制后,来自应用程序中任何其他模块的任何 URLFetch 都将由 App Engine 自动进行身份验证,并且任何不是来自应用程序的请求都将被拒绝。

所以我这样做了,但不幸的是它不起作用。我正在向模块 B 上的模块 A 请求一个 url,该 URL 受 login: admin 属性保护

我可以在浏览器中获取显示登录页面的 url,在我以管理员身份继续之后,我可以获取我的路线。

它应该如何工作?据我了解,它应该在请求中添加一个包含某种授权令牌的标头。

如果我在模块 A 的请求中获取相同的 url,我会得到相同的重定向。 urllib2 默认跟随302 状态码,结果是登录页面。

我正在使用gcloud preview app run 命令运行环境。模块 A 是默认模块,模块 B 是 Managed VM 容器,这可能是这里的问题吗?

【问题讨论】:

  • 能分享一下相关的模块配置和fetch的调用吗?另外,您是否尝试将模块 B 作为常规模块而不是托管 VM 运行?
  • 一切正常,除了如果我将身份验证放在它将请求重定向到登录页面这一事实。我可以尝试将其作为模块(或至少相关代码)运行以将其缩小到 vm
  • 是的,请添加代码并尝试隔离问题,因为这样更容易帮助您:)
  • 在应用部署的时候有效果吗?
  • 嗨,我在这里遇到了同样的问题,我得到了一个 302 (HTTP) 作为调用的结果:result = urlfetch.fetch(url, follow_redirects=False, method=urlfetch.POST, payload=payload, headers={"Content-Type":"application/json"}) 我不明白,因为它应该已经被记录了以管理员身份登录,因为呼叫来自另一个模块。你的问题解决了吗?

标签: python google-app-engine


【解决方案1】:

我可以确认这种情况正在发生,并且我已经重现了该问题。该问题正在App Engine public issue tracker 中进行跟踪。关注那里以获取任何更新。

目前,我认为手动检查 X-Appengine-Inbound-Appid 标头要好得多,因为这是由基础架构管理的,不能被欺骗。

您也可以实现 OAuth,但这会增加您在小型应用上可能不希望或不需要的开销。

【讨论】:

  • 我试图检查X-Appengine-Inbound-Appid,但不幸的是它在开发服务器上不存在。目前我不知道如何保护托管 VM 上的路由
  • 我确实设置了follow_redirects=False/_ah/start' and /_ah/stop` 处理程序的问题是一样的
  • 就检查 X-Appengine-Inbound-Appid 而言,是的,这应该只在生产中检查,因为它由基础架构管理。如果您不将端口暴露给外部世界,或者至少不宣传您的公共 IP,那么您将完全安全或通过默默无闻来确保安全(分别针对每种情况)
  • follow_redirects 是为了防止 urlfetch 自动跟踪 3xx 重定向响应,我看不出有什么理由可以帮助解决这个问题。如上所述,在生产中使用标头,并保护您的开发环境免受外部请求的影响。
猜你喜欢
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 2020-08-07
  • 2019-01-17
相关资源
最近更新 更多