【发布时间】: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