1

设置:

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

如果没有 Identity Aware Proxy,我可以通过将 CORS 设置为允许来自服务 A 主机名的调用,从前端的客户端向不同主机名上的 api 发出请求。

我希望能够在两种服务都在 Identity Aware Proxy 之后做同样的事情。

按照IAP 文档中的说明,我有:

  1. 设置我的应用程序以响应 OPTIONS 请求
  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 发出相同的请求时,请求成功。

这让我相信这个问题与 Identity Aware Proxy 有关。我唯一的猜测是它与预检请求有关,我在浏览器控制台的网络请求中看不到任何内容。

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

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

备择方案:

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

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

编辑:是一个演示我的问题的仓库。

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

4

1 回答 1

0

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

于 2020-07-14T14:41:08.957 回答