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