【问题标题】:Browser blocks API requests on SPA protected by Google IAP浏览器在受 Google IAP 保护的 SPA 上阻止 API 请求
【发布时间】:2023-03-17 16:35:01
【问题描述】:

我最近在受 Google Identity Aware Proxy 保护的网络应用程序中遇到了一个问题。

这是我的设置:

  • 一个 API GKE pod,由后端服务提供服务,受 IAP 保护。
  • 一个 SPA GKE pod,由后端服务提供服务,受 IAP 保护。
  • 两个后端服务配置为使用相同的 OAuth 客户端 ID。
  • API 和 SPA 服务于同一个域 - SPA 服务于 example.domain.com,而 API 服务于 example.domain.com/api。
  • SPA 从 Web 浏览器中的 JavaScript(使用 axios)调用 API。
  • 另外两个服务也存在非常相似的设置,这次是在 GAE 上。

直到昨天,部署在 GAE 和 GKE 上的服务一切正常。但是,今天我开始在浏览器控制台中对浏览器内的 JavaScript 请求偶尔出现错误,说:

Access to XMLHttpRequest at 'https://example.domain.com/api' from origin 'https://example.domain.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我尝试更改服务器上的 CORS 策略,允许所有来源,甚至允许没有 cors 标头的 OPTIONS 请求。在客户端,我尝试更改一些标头请求(之前使用 Axios 默认),例如设置 axios.defaults.withCredentials = true。没有任何帮助。

我能找到的唯一解决方法是在另一个选项卡中手动进入 API URL (example.domain.com/api),然后返回 SPA 选项卡并刷新它,但必须每小时完成一次 (我猜这与 OAUTH 令牌过期有关)。

【问题讨论】:

    标签: google-iap


    【解决方案1】:

    嗯,您使用的是哪个浏览器,您知道浏览器更新是否会触发此问题吗?如果您使用的是 Chrome,那么使用 --disable-features=FetchMetadata,SecMetadata 标志重新启动 Chrome 是否会解决此问题?

    【讨论】:

    • 似乎 chrome 76 更新触发了这个。发生问题时,javascript 请求中只有一个 sec-fetch-mode: cors 标头,现在还有其他相关标头,例如 sec-fetch-site: same-origin 和带有 OAUTH 令牌的 cookie 标头 - 他们昨天没有出现。我今天无法重现该问题,因此我无法判断您对 Chrome 标志的建议是否解决了该问题。
    • @matthewg 今天又开始发生了,不幸的是,用--disable-features=FetchMetadata,SecMetadata 重新启动 chrome 并不能解决问题。还有其他想法吗?
    猜你喜欢
    • 2015-03-09
    • 2020-05-22
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2016-09-24
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多