我有一个与这个问题类似的问题(但有一个关键区别 - 我正在使用自己的 API):使用 Google Auth、Angular 4、ASP.Net Core 2 进行身份验证时出现 405
我正在使用 Identity Aware Proxy (IAP) 向我的企业域中的用户验证我们部署在 App Engine 柔性环境中的自定义应用程序,该应用程序是用 Node.js 编写的。该应用程序使用 express 提供资产并维护 RESTful API,并使用IAP 文档建议的签名标头授权请求。
IAP 在限制用户使用应用程序方面按预期运行,但在尝试对我自己的 RESTful API 进行 AJAX 调用时出现问题。当我尝试执行此操作时,HTTP 请求以 302 重定向响应,重定向到 Google oauth2 端点 ( https://accounts.google.com/o/oauth2/v2/auth?client_id=[...]
),然后失败并出现以下错误:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://<my_project>.appspot.com' is therefore not allowed access. The response had HTTP status code 405. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
有问题的 AJAX 是一个 POST 方法请求,但在开发工具的 Network 选项卡中,我还看到一个模仿请求到与 GET 请求相同的端点(相同的标头,只是去掉了有效负载),然后是 OPTIONS 请求到OAuth 端点(由于 OAuth 不处理 OPTIONS 预检请求而生成错误)。
我已经严格按照 IAP 和 App Engine 文档进行操作,因此我怀疑我在实现方面遗漏了文档所暗示的某些内容,而我忽略了这些内容。我需要以不同的方式处理 AJAX 身份验证吗?为什么它被发送到 OAuth 端点?这与我的 CORS 配置有关吗?
我尝试使用cors清除缓存、不同的设备/浏览器、各种 CORS 配置。
为什么请求失败对我来说是有道理的,但我不明白为什么首先提出请求。我了解 CORS 的限制,但我没有(直接)向 Google 服务发送请求,而是向我自己的 RESTful API(尽管托管在 Google 服务上并在 IAP 后面)发送请求。如果用户已经通过身份验证进入我的应用程序并通过 IAP,在我看来,AJAX 请求也应该进行身份验证?