6

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

下面是错误。

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

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

4

1 回答 1

5

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

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

有关自定义 IAP 的更多信息,请参阅 Google 官方文档。

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

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

  • 用户界面服务器
  • 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 不适用。

于 2019-04-25T07:58:49.467 回答