使用 Google IAP 启用 CORS

Posted

技术标签:

【中文标题】使用 Google IAP 启用 CORS【英文标题】:Enable CORS with Google IAP 【发布时间】:2019-04-09 08:46:29 【问题描述】:

我正在尝试通过第三方 javascript 集成对我的 Web api 服务器进行 ajax 调用。但是,在我的 API 服务器上启用 IAP 后,我无法从我的集成服务器调用我的 Web api。 我已将我的集成服务器添加为 Web 应用程序的客户端 ID 中的授权 JavaScript 源。

以下是错误。

从源“https://myintegration.com”访问“https://webapiserver.com/apiendpoint1”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

如果我最后缺少其他配置,请告诉我。 谢谢。

【问题讨论】:

您能否提供您的 API 调用示例以进行故障排除? 【参考方案1】:

CORS 需要未经身份验证的 OPTIONS 请求。您的 API 服务器需要允许它,要做到这一点,您需要:

    向您的应用添加响应 OPTIONS 请求的代码。 将 access_settings.cors_settings.allow_http_options 设置更改为 true,以便 IAP 将 OPTIONS 请求传递到您的应用程序。

More information about customizing IAP 在 Google 官方文档中。

此功能以前不可用,并且存在建议的解决方法:

在同一个 GCP 项目中创建 App Engine 服务:

UI 服务器 API 服务器

UI 服务器调用 API 服务器。要解决 CORS 问题,请使用带有调度文件的路由:https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed#routing_with_a_dispatch_file

一般情况下,UI服务器要调用API服务器时,会调用api-dot-MY_PROJECT.appspot.com

在此解决方法中,UI 服务器使用指定路径 ("/api"): MY_PROJECT.appspot.com/api 调用自身

由于 UI 服务器正在调用自身,因此 CORS 不适用。

【讨论】:

Cloud IAP 目前不支持此功能。但是有一张公开的票:issuetracker.google.com/issues/78326322 Cloud IAP 现在支持 CORS 预检请求。 感谢 Ani 提供信息,我确实更新了答案以反映实施的当前状态。

以上是关于使用 Google IAP 启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

在 Google App Engine 柔性环境中启用 CORS

如何为 Google Places API 启用 CORS

Google Cloud Functions 启用 CORS?

为我的项目对象启用 Google 存储签名 URL 上的 CORS

从 Angular 访问受 Google IAP 保护的 API

我是不是需要为 macOS 应用内购买 (IAP) 启用沙盒网络功能?