【问题标题】:Enabling CORS in MVC application (to be deployed on azure)在 MVC 应用程序中启用 CORS(部署在 azure 上)
【发布时间】:2016-09-29 21:34:45
【问题描述】:

我知道这个论坛上有很多问题都在陈述相同的问题。但我想展示我的特定场景以获得与此相关的指南/建议。 我正在开发一个应该部署在 azure 上的 MVC 应用程序(基本上它使用 .net sdk 和其他包处理 Windows azure)。应用程序运行良好,但 50 -60 分钟的空闲时间(即不刷新)后,连接丢失。 在调试代码期间(通过 Visual Studio 2015 社区版),我发现它将流程重定向到 Sign in () 函数(我没有开发该函数,所以我没有通过理解)。在这里,它创建了一个登录 url(用于使用 azure AD 进行身份验证)并将应用程序重定向到该 url。这是应用程序出错的地方。在浏览器(谷歌浏览器)控制台中,我发现它声明了

MLHttpRequest 无法加载 https://login.windows.net/common/wsfed?wa=wsignin1.0&wtrealm=https%3a%2f%2fdhttps%253a%252f%252flocalhost%253a43778%252f&wct=2016-09-26T19%3a05%3a59Z。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://localhost:43778' 因此不允许访问。

我尝试使用几乎所有方法在应用程序中启用 CORS,即

  • 使用 web.config 条目
  • 使用 nuget 包 Microsoft.AspNet.WebApi.Cors 版本 5.2.2 和 5.2.3,通过 webapiconfig.cs 和/或控制器、操作级别全局启用它。

似乎没有任何帮助,我在请求和响应中找不到与 CORS 相关的标头。 启用 CORS 可能会出现什么问题。请指导。 任何帮助将不胜感激。 谢谢

编辑: 实际上应用程序在空闲时的行为是这样的,一旦我们刷新页面就一切正常了。我只是在调查连接丢失的原因以及即使在如此长的空闲时间之后如何保持应用程序正常运行。如果 CORS 以外的任何东西都可能导致此问题,请指导并建议可能的修复方法。

【问题讨论】:

  • 如果站点部署在 Azure 上,为什么会显示 'localhost:43778?您是否使用 Web 应用程序或网站 URL 更新了 Azure Active Directory 应用程序?
  • CORS 规则在接收端指定。在这种情况下login.windows.net/。这意味着 login.windows.net 已指定不允许您的应用程序。不是反过来。这不是你可以自己改变的。
  • @Haitham 站点尚未实际部署,但我正在本地主机上调试它,是的,我已经使用此 url 更新了 Azure ADD 应用程序
  • 对不起,我的错,你能告诉我们你如何重定向到 AAD 登录页面吗?
  • 嗯,它是一个登录函数,重定向到登录 url 以返回“return new RedirectResult(signInRequest.RequestUrl.ToString());”

标签: asp.net-mvc azure cors azure-active-directory


【解决方案1】:

是的,您的应用中没有缺少 CORS 标头。 login.windows.net 中缺少它。如果您重定向到该页面,则应该不是 CORS 问题。 CORS 仅在您从 JavaScript 调用另一个域时才起作用。检查 JS AJAX 调用。有东西试图调用 login.windows.net,但不是重定向。

【讨论】:

  • 那么我不能在我的请求标头中看到'origin'标头吗?我在代码中指定(同时启用 CORS)。
  • 这不是跨域请求,本地主机上的应用程序请求“login.windows.net”。正在重定向的是服务器端代码,“return new RedirectResult(signInRequest.RequestUrl.ToString());”
  • 服务器返回 HTTP 302 重定向,浏览器转到 URL,而不是涉及 CORS 的请求。只有当 JavaScript 代码进行 HTTP 调用时,浏览器才会查看调用,如果它是跨域的,则发出 HTTP OPTIONS 请求以确定调用是否正常。您遇到与身份验证相关的问题。我建议了解整个应用程序的工作原理。
  • 看起来应用程序是使用 WsFed 身份验证保护的。 javascript 正在向应用程序上的某个控制器发出请求,并且会话已过期。然后服务器返回一个 302 重定向到login.windows.net,并且 js 跟随它。正如 juunas 提到的 Azure AD 不支持 CORS。 js 通过 AJAX 调用的任何 API 都需要以返回 401 的方式进行保护。然后,js 需要捕获 401 并将窗口重定向到 Azure AD 以进行登录。好帖子在这里:cloudidentity.com/blog/2014/04/28/…
猜你喜欢
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多