gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:33:53 28 4
gpt4 key购买 nike

我正在尝试在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 身份验证的 Controller 和不使用 Windows 身份验证的 Controller

/// <summary>
/// a middleware that allows that some requests to bypass Windows authentication
/// </summary>
public class NtlmAndAnonymousSetupMiddleware
{
#region Variables
private readonly RequestDelegate _next;

//TODO: maybe this can be improved to get rid of these magic strings
private List<string> AllowedControllers = new List<string>
{
"/Anonymous",
"/swagger"
};
#endregion

/// <summary>
///
/// </summary>
/// <param name="next"></param>
public NtlmAndAnonymousSetupMiddleware(RequestDelegate next)
{
this._next = next;
}

/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task Invoke(HttpContext context)
{
// if requests target anonymous controller or there is a CORS related OPTIONS request
// => let it be and challenge only for other request methods (GET, POST etc.)
if (context.User.Identity.IsAuthenticated ||
context.Request.Method == "OPTIONS" ||
AllowedControllers.Any(c =>
{
string path = context.Request.Path.ToString();
return path.StartsWith(c, StringComparison.InvariantCulture);
}))
{
await _next(context);
return;
}

await context.ChallengeAsync("Windows");
}

}

一种特殊情况是收到不能通过 Windows 身份验证质询的 OPTIONS 请求(CORS 相关)时。

2。在Startup.cs中注册中间件

/// <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);
// ...
}

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>

关于asp.net-core-mvc - 是否可以在windows身份验证中允许匿名访问某些页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com