1

将 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,但这只是允许其他域从我的应用程序发出跨域请求,这不是这里发生的事情。

4

1 回答 1

0

如果有人在 Chrome 和 dotnet 核心中遇到这个问题,请注意我使用的是 ResponseCache 属性。在第一个非缓存请求中它工作,随后的请求因 CORB 错误而失败。

一旦我删除了属性,错误就消失了。

这并不能解决问题,但可以为问题可能出在哪里提供一些方向。

我没有打扰响应缓存,因为它不再需要了。

下面是有问题的代码

[ResponseCache(Duration = 15, Location = ResponseCacheLocation.Any, VaryByQueryKeys = new[] {"key", "type", "identifier", "app"})]
于 2019-02-21T11:07:39.843 回答