【问题标题】:Enable CORS with Google IAP使用 Google IAP 启用 CORS
【发布时间】: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 调用示例以进行故障排除?

标签: google-cloud-platform cors google-iap


【解决方案1】:

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

  1. 向您的应用添加响应 OPTIONS 请求的代码。
  2. 将 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 提供信息,我确实更新了答案以反映实施的当前状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多