使用身份感知代理,是否可以使用不同的主机名向同一 GCP 项目中的另一个 GAE“服务”发出跨源请求?

问题描述 投票:0回答:2

设置:

  • 服务 A(前端):GAE 服务静态站点,从 A 发出的所有调用都发生在客户端。
  • 服务 B (api):托管 REST API 的 GAE 实例。

如果没有身份感知代理,我可以通过设置 CORS 以允许来自服务 A 主机名的调用,从前端客户端向不同主机名上的 api 发出请求。

我希望能够在两个服务都位于身份感知代理后面时执行相同的操作。

按照IAP文档中的说明进行操作我有:

  1. 设置我的应用程序以响应选项请求
  2. 使用 gcloud CLI 将设置 access_settings.cors_settings.allow_http_options 更改为 true。

这是我面临的错误:

Access to XMLHttpRequest at 'https://api-dot-my-app-dev.appspot.com/api/123' from origin 'https://frontend-dot-my-app-dev.appspot.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

当我从 localhost 到 localhost 或从服务 A(客户端)到 localhost api 发出相同的请求时,请求成功。

这让我相信该问题与身份感知代理有关。我唯一的猜测是它与 预检请求有关,我在浏览器控制台的网络请求中没有看到任何相关内容。

我真的很希望能够让这两个应用程序在 IAP 后面使用它们自己的主机名,同时仍然进行通信。不幸的是,我对如何做到这一点已经穷尽所有想法。

与此同时,我现在使用下面的替代方案#2 来工作。

替代方案:

  1. 让 API 为静态站点提供服务,以便它们位于同一主机名上
  2. 使用 dispatch.yaml 从同一主机名为两个站点提供服务

如果这可能或可能出现什么问题,有什么想法吗?

编辑:这里是一个演示我的问题的存储库。

编辑2:根据这篇文章,此功能曾经有效,谷歌表示支持它是个好主意,但没有提供时间表。

google-app-engine google-cloud-platform google-iap
2个回答
0
投票

不确定这是否可以应用于您的用例,但我已经看到通过将 access_settings.cors_settings.allow_http_options 更改为 true,允许 CORS 预检请求通过 IAP 传递来解决此类问题。


0
投票

3年过去了,但这个问题仍然具有现实意义。 我遇到了同样的问题,并且相同的域+dispatch.yaml 工作正常。 无需在应用程序引擎中托管网站。它可以托管在任何软件上,但我必须在同一域上配置两者,例如: www.mydomain.com 和 api.mydomain.com

© www.soinside.com 2019 - 2024. All rights reserved.