【问题标题】:AppEngine Preserve User when Proxying Across Services/Domains跨服务/域代理时 AppEngine 保留用户
【发布时间】:2017-04-05 21:42:24
【问题描述】:

我正在 AppEngine 上构建一个应用程序,并尝试与我不管理的另外两个 AppEngine 服务进行通信。这两个服务只提供 JSON 数据,但它们需要使用我在我这边验证过的同一个用户(应用程序在同一个组织内,但在不同的子域上工作)。

我有一个使用 Flask 和 urllib.fetch 的基本代理,但在请求期间我丢失了通过 AppEngine 进行身份验证的用户。

基本上,当使用google.appengine.api.users 时,我想确保我的站点和目标端在调用users.get_current_user() 时最终得到相同的值。目前,对get_current_user 的调用在我这边显示了相关信息,但在目标端显示None

有没有办法在标头中传递用户凭据?

我的 urlfetch.fetch 调用没什么特别的:

resp = urlfetch.fetch(url, method=urlfetch.GET,
                            headers=headers,
                            follow_redirects=False)

注意我故意省略了我的实际标题字典定义:)

这有点类似于Cross-Domain Ajax Calls and maintaining session on Google App Engine,但不一样,因为我希望这一切都在服务器端完成。

【问题讨论】:

    标签: python google-app-engine flask proxy


    【解决方案1】:

    不同的服务(即使在 GAE 上的同一个项目中)不会共享有关登录用户的信息。一个(非常尴尬的)解决方案是,如果您没有登录您正在访问的服务的 app.yaml 文件,则需要登录和重定向。但是您仍然必须实际打开您正在访问的服务的页面(例如window.open("https://the-static-page-of-your-service.appspot.com"))以确保用户登录到该服务。请注意,您不能将静态页面放在服务站点的 iframe 中(Google 不会将其登录页面插入此类站点),也不能在站点加载后立即打开此页面(任何体面的浏览器都会考虑这一点一个弹出窗口并阻止它。)我能找到的唯一解决方法是通过用户输入弹出这个窗口,就像一个“登录”按钮。

    本质上,你不能真正做你想做的事——我会研究其他身份验证解决方案。

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2011-06-12
      • 1970-01-01
      • 2015-05-02
      • 2012-04-04
      • 2017-06-04
      相关资源
      最近更新 更多