我最近在受 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 令牌到期有关)。