Asp.net core mvc 是否可以在windows身份验证中允许匿名访问某些页面?

Asp.net core mvc 是否可以在windows身份验证中允许匿名访问某些页面?,asp.net-core-mvc,windows-authentication,Asp.net Core Mvc,Windows Authentication,我正在尝试在Asp.net core 2.0中实现windows身份验证。 在这里,我只需在创建解决方案时选择windows身份验证选项,即可轻松完成windows身份验证, 但是在这里,我想让一些页面公开,为此,我尝试了一些类似下面的代码,但这些代码不起作用 [Authorize(Roles = "Administrator")] public IActionResult Index() { return View(); } [AllowAnonymous]

我正在尝试在Asp.net core 2.0中实现windows身份验证。 在这里,我只需在创建解决方案时选择windows身份验证选项,即可轻松完成windows身份验证, 但是在这里,我想让一些页面公开,为此,我尝试了一些类似下面的代码,但这些代码不起作用

[Authorize(Roles = "Administrator")]
public IActionResult Index()
    {
        return View();
    }

 [AllowAnonymous]
 public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";

        return View();
    }

那么,是否可以在windows身份验证中公开访问某些页面?

是的,这是可能的。这就是我在ASP.NET Core 2.0.x中实现的方法(不确定它是否在ASP.NET Core 1.x中工作)

1.创建一个中间件,允许区分使用Windows身份验证的控制器和不使用Windows身份验证的控制器
//
///允许某些请求绕过Windows身份验证的中间件
/// 
公共类NtlmAndAnonymousSetupMiddleware
{
#区域变量
private readonly RequestDelegate\u next;
//托多:也许可以改进一下,去掉这些神奇的弦
允许的私有列表控制器=新列表
{
“/匿名”,
“/大摇大摆”
};
#端区
/// 
/// 
/// 
/// 
公共NtlmAndAnonymousSetupMiddleware(RequestDelegate下一步)
{
这个。_next=next;
}
/// 
/// 
/// 
/// 
/// 
公共异步任务调用(HttpContext上下文)
{
//如果请求以匿名控制器为目标,或者存在与CORS相关的选项请求
//=>顺其自然,仅对其他请求方法(GET、POST等)提出质疑
如果(context.User.Identity.IsAuthenticated||
context.Request.Method==“选项”||
AllowedController.Any(c=>
{
字符串路径=context.Request.path.ToString();
返回path.StartsWith(c,StringComparison.InvariantCulture);
}))
{
等待下一步(上下文);
返回;
}
等待上下文。ChallengeAsync(“Windows”);
}
}
一种特殊情况是,当接收到的选项请求(CORS相关)不能达到Windows身份验证挑战时

2.在Startup.cs中注册中间件
//
///允许匿名请求(以后由应用程序处理)
/// 
/// 
受保护的虚拟无效允许匿名(IApplicationBuilder应用程序)
{
app.UseMiddleware();
}
公共void配置(IApplicationBuilder应用程序)
{
异名(app);
// ...
}
3.允许在IIS中进行匿名身份验证 当然,Web应用程序也应该配置为允许匿名身份验证(除了Windows身份验证)

注意:关于web.config,我不记得ASP.NET Core 1.x中是否需要它,但我在IIS中托管时总是使用它:

<configuration>
  <system.webServer>
    <handlers> 
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\TheApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" /> 
  </system.webServer>
</configuration> 


您是否尝试在web.config文件中更改授权?不,在.net core中,我们没有web.config文件
/// <summary>
/// allow anonymous requests (that are handled by application afterwards)
/// </summary>
/// <param name="app"></param>
protected virtual void AllowAnonymous(IApplicationBuilder app)
{
    app.UseMiddleware<NtlmAndAnonymousSetupMiddleware>();
}

public void Configure(IApplicationBuilder app)
{
    AllowAnonymous(app);
    // ...
}
<configuration>
  <system.webServer>
    <handlers> 
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\TheApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" /> 
  </system.webServer>
</configuration>