OAuth AJAX对MVC控制器的调用-OPTIONS和CORS的问题



订单管理

测试参考手册订单测试手册默认目标状态Id测试参考手册提示默认值

网络路由

测试参考手册订单测试路线手册(CanThawAndMix、CanOcr、IsCombinedDtaRouting(

我有一个MVC应用程序,它有时会对MVC控制器进行AJAX调用。一旦用户登录,这就可以正常工作(cookie用于允许呼叫通过(。

但是,如果cookie/令牌已经过期(或者AJAX调用没有有效的cookie/令牌的其他原因(,那么它将失败,并出现CORS错误。

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

以下是发生的情况:(粗体线是重要的一行。除非另有规定,否则所有3行都会发生这种情况(

  • 调用受[authorize]保护的MVC操作。(myIDP.net/home/AjaxCall(
  • 该呼叫经由302被重定向到/oauth2/authorize端点
  • [AAJAX ONLY]-对myIDP.net/oauth2/authorize端点进行OPTIONS调用。它在标头中返回一个Access-Control-Allow-Origin: https://localhost:44382
  • 发送到myIDP.net/oauth2/authorize的GET。返回302重定向到myIDP.net/authentication/login.do
  • [AAJAX ONLY]-对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]-Flow继续成功登录

我很感兴趣的是,SPA应用程序不做OPTIONS,但AJAX应用程序做了。它们都是基于Javascript的,我希望浏览器对它们都能起到同样的作用。但不打OPTIONS电话似乎是有效的。

如何说服AJAX不执行OPTIONS调用

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

最新更新