Asp.net core 使用Windows身份验证拦截未经身份验证的请求

Asp.net core 使用Windows身份验证拦截未经身份验证的请求,asp.net-core,iis,windows-authentication,asp.net-core-3.1,Asp.net Core,Iis,Windows Authentication,Asp.net Core 3.1,我有一个启用了Windows身份验证的ASP.NET核心MVC应用程序,我想使用一个基本的拦截器来处理未经身份验证的请求,但它被完全跳过,因为Windows身份验证机制在进入拦截器之前阻止了请求 您知道有没有一种方法可以绕过这种标准行为,而不阻塞拦截器管道中的请求 提前谢谢 使用中间件并在UseAuthorization之前声明它 public class YourMiddleware { private readonly RequestDelegate _next; publ

我有一个启用了Windows身份验证的ASP.NET核心MVC应用程序,我想使用一个基本的拦截器来处理未经身份验证的请求,但它被完全跳过,因为Windows身份验证机制在进入拦截器之前阻止了请求

您知道有没有一种方法可以绕过这种标准行为,而不阻塞拦截器管道中的请求

提前谢谢


使用中间件并在UseAuthorization之前声明它

public class YourMiddleware
{
    private readonly RequestDelegate _next;

    public YourMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Console.WriteLine("Before");
// Here you can decide if you want the next step of the pipeline or not, usually you want
        await _next(context);
    }
}

你好,Dario,感谢您的回复,我已经尝试过这个解决方案,但它不起作用。Windows身份验证功能在中间件管道中的优先级似乎更高。质询响应401.2是由Windows身份验证模块生成的,该模块在IIS处理管道中的ASP.NET核心模块之前很久就执行了,因此任何类似上述截取的尝试都是无用的。您是对的。但是我已经5年没有在IIS上运行过应用程序了,所以我完全不想在Windows环境下运行。我在kestrel和works上运行了这个示例。但你是对的:如果kestrel支持iis,这不是一个正确的解决方案。一个解决方法是在iis上禁用Windows身份验证,但禁用匿名身份验证。然后,您可以从ASP.NET核心端发送401.2质询响应以模拟Windows身份验证。但为什么要在这样的设置中处理未经验证的请求?您可能会找到其他方法来实现这些目的。@LexLi其目的是绕过某些动态控制器的Windows Auth,这些控制器由于不在项目中而来自外部nuget而失去控制。
app.UseMiddleware<YourMiddleware>();
app.UseAuthorization();