asp.net-core-mvc - ASP.NET Core MVC Web 应用程序中的 Azure AD 导致 JavaScript 请求出现 CORB
问题描述
将 Azure AD 集成到 ASP.NET Core MVC Web 应用程序会导致 JavaScript 前端向 ASP.NET 控制器发出的请求发生跨域读取阻塞。
我正在编写一个要求用户使用 Microsoft 工作帐户登录的 ASP.NET Core MVC 应用程序。这行得通。我将以下代码添加到 Startup.cs:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddAzureAd(options => Configuration.Bind("AzureAd", options))
.AddCookie(options =>
{
options.LoginPath = "/Account/SignIn/";
options.AccessDeniedPath = "/Account/AccessDenied/";
});
我还在应用程序用户界面中使用 Telerik UI 小部件。因此,我在多个地方使用 JavaScript 向我的 ASP.NET 控制器发出请求。前任:
function onEvent(e) {
$.post("Controller/Foo", function (data) {
...
});
}
当我使用 IIS Express 在本地运行和调试时,这非常有效,但是当我将应用程序部署到运行 IIS 的服务器时,我开始在浏览器开发工具中收到有关跨源读取阻止的警告,并且我的任何 javascript 函数都没有发出请求我的 ASP.NET 控制器接收数据。
这是警告的屏幕截图:
如果有人碰巧知道如何解决这个问题,我将不胜感激;我对这一切都很陌生,我不知道从哪里开始解决这个特殊问题。
我目前的想法是要么我需要弄清楚如何在 javascript 中处理“Access-Control-Allow-Origin”标头,要么需要在 Azure 中完成一些事情。
我做的第一件事是在我的应用程序中启用 CORS,但这只是允许其他域从我的应用程序发出跨域请求,这不是这里发生的事情。
解决方案
如果有人在 Chrome 和 dotnet 核心中遇到这个问题,请注意我使用的是 ResponseCache 属性。在第一个非缓存请求中它工作,随后的请求因 CORB 错误而失败。
一旦我删除了属性,错误就消失了。
这并不能解决问题,但可以为问题可能出在哪里提供一些方向。
我没有打扰响应缓存,因为它不再需要了。
下面是有问题的代码
[ResponseCache(Duration = 15, Location = ResponseCacheLocation.Any, VaryByQueryKeys = new[] {"key", "type", "identifier", "app"})]
推荐阅读
- regex - 正则表达式在锚名称中查找空格?
- c# - C#工厂异步套接字错误“主机断开连接”
- javascript - 在 WordPress 网站中使用 AJAX 传入 sessionStorage 数据
- macos - CoreGraphics:如果图像被缩放,绘制 NSImage 的性能会受到影响
- java - 在 Java 上的一个线程中等待多个事件
- r - R将两个列表合并为一个,从每个列表中交替绘制元素
- r - dplyr:评估名称在向量中的变量的总和
- ios - NSURLSession 完成处理程序意味着如果 didReceiveChallenge 被自动调用
- java - Spring批处理分区,多个步骤按顺序运行?
- html - 着色父菜单点