【问题标题】:OAuth AJAX Calls to MVC Controller - Issues with OPTIONS and CORSOAuth AJAX 调用 MVC 控制器 - OPTIONS 和 CORS 问题
【发布时间】:2021-03-18 18:05:07
【问题描述】:

订单管理

TestRefManual.OrderableTestManual.DefaultTargetStateId TestRefManual.PromptDefaultValue

网络路由

TestRefManual.OrderableTestRoutingManual(CanThawAndMix、CanOcr、IsCombinedDtaRouting)

我有一个 MVC 应用程序,它有时会对 MVC 控制器进行 AJAX 调用。用户登录后,一切正常(cookie 用于允许呼叫通过)。

但是,如果 cookie/token 已过期(或其他原因导致在没有有效 cookie/token 的情况下进行 AJAX 调用),则它会因 CORS 错误而失败。

我正在分析受[authorize] 保护的呼叫的呼叫流量。我使用服务器端操作、AJAX 调用和来自 SPA 应用程序的调用进行了调用。服务器端操作和 SPA 应用程序都可以正常工作。只有 AJAX 调用失败。

以下是发生的情况:(粗体线是重要的。除非另有说明,否则所有 3 个都会发生这些情况)

  • 调用[authorize] 受保护的 MVC 操作。 (myIDP.net/home/AjaxCall)
  • 呼叫通过 302 重定向到 /oauth2/authorize 端点。
  • [仅限 AJAX] - 对 myIDP.net/oauth2/authorize 端点进行 OPTIONS 调用。它在标头中返回 Access-Control-Allow-Origin: https://localhost:44382
  • 发送到myIDP.net/oauth2/authorize 的GET。它返回一个 302 重定向到myIDP.net/authentication/login.do
  • [仅限 AJAX] - 对 myIDP.net/authentication/login.do 进行了 OPTIONS 调用,它不返回带有 Access-Control-Allow-Origin 的标头。事实上,它返回的内容似乎与调用是 GET 完全相同。这会导致浏览器出现 CORS 错误。
  • [ALL BUT AJAX] - 对 myIDP.net/authentication/login.do 进行了 GET 调用,其响应与 AJAX 流进行的 OPTIONS 调用完全相同。
  • [ALL BUT AJAX] - 流程继续成功登录。

有趣的是,SPA 应用程序不执行 OPTIONS,但 AJAX 执行。它们都是基于 Javascript 的,我希望浏览器对它们都一样。但不做 OPTIONS 调用似乎是有效的。

如何说服 AJAX 不执行 OPTIONS 调用?

【问题讨论】:

    标签: jquery ajax oauth asp.net-core-mvc


    【解决方案1】:

    此问题是由于用于 AJAX 调用的 URL 没有相同的实际应用案例。一旦他们有同样的情况,就解决了。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2014-02-23
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2023-03-28
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多