使用 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 Cloud Functions 启用 CORS?
为我的项目对象启用 Google 存储签名 URL 上的 CORS