Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 将ASP.NET核心部署到IIS UI,并将API部署到单独的网站_Asp.net Core_Cors_Axios - Fatal编程技术网

Asp.net core 将ASP.NET核心部署到IIS UI,并将API部署到单独的网站

Asp.net core 将ASP.NET核心部署到IIS UI,并将API部署到单独的网站,asp.net-core,cors,axios,Asp.net Core,Cors,Axios,具有包含UI和API的解决方案 UI 是一个ASP.NET核心MVC项目,它只包含一个HomeController和Index视图,加载到VueJS应用程序中 API 是一个ASP.NET核心Web API,用于使用Windows身份验证为VueJS应用程序提供数据 部署 当前设置(1个IIS网站) 我们有一个origin(),通过它访问API 新设置(2个IIS网站) 对于UI和API我们有两个来源() 对于新的设置,我们需要实现CORS(跨源),以允许其他网站使用API。但是,因此我

具有包含UI和API的解决方案

UI

是一个
ASP.NET核心MVC
项目,它只包含一个
HomeController
Index
视图,加载到
VueJS
应用程序中

API

是一个
ASP.NET核心Web API
,用于使用Windows身份验证为VueJS应用程序提供数据

部署

  • 当前设置(1个IIS网站)
我们有一个origin(),通过它访问API

  • 新设置(2个IIS网站)
对于
UI
API
我们有两个来源()

对于新的设置,我们需要实现CORS(跨源),以允许其他网站使用API。但是,因此我们需要为
选项
飞行前请求启用匿名身份验证


有没有办法防止这种情况发生?

通过使用自定义中间件进行身份验证来解决此问题:

public async Task InvokeAsync(HttpContext context)
{
    // Check if the request is a PREFLIGHT => OPTIONS request
    if (context.User.Identity.IsAuthenticated || context.Request.Method == "OPTIONS")
    {
        await _next(context);
        return;
    }

    await context.ChallengeAsync("Windows");
}
在启动时,在管道的开头添加:

app.UseMiddleware<AuthenticationMiddleware>();
app.UseMiddleware();

这应该会有帮助。@aguafrommars我做了所有这些,但为了让它工作,我需要将匿名身份验证设置为true,以允许来自CORS的选项reguests。问题是要确保它的安全性,或者是否有其他解决方案来禁用匿名身份验证,但让CORS在IIS上工作?或者使用ASP.Net核心身份验证和授权中间件?无法避免需要允许未经身份验证的选项请求。CORS协议需要它。更具体地说,CORS协议要求浏览器忽略CORS飞行前选项请求中的所有凭证。