gpt4 book ai didi

asp.net-mvc-3 - 在 ASP.NET 中,是否有因 Windows 身份验证登录失败而触发的事件? (记录 Windows 身份验证失败的详细信息)

转载 作者:行者123 更新时间:2023-12-02 10:46:18 25 4
gpt4 key购买 nike

我正在构建一个 .NET 4.0、ASP.NET MVC 3 Intranet 应用程序,该应用程序以集成模式在 IIS 7.5 上运行。 Windows 身份验证用于管理对网站的访问。 Windows 身份验证模块已启用,所有其他身份验证模块均已禁用。

目前,当用户提供不正确的凭据时,Windows 身份验证模块会正确拒绝凭据并重新显示登录提示。执行此操作 3 次,然后显示标准 .NET 401 未经授权访问页面。这是预期和可取的。

我的目标:我希望能够将失败的身份验证尝试的详细信息记录到我自己的自定义事件日志中。特别是,捕获尝试登录时使用的用户名。 (我承认出于安全原因不可能捕获密码。)

我的目标可能实现吗?

我已经构建了一个工作的 IHttpModule 模块并将其作为事件处理程序添加到 WindowsAuthenticationModule ,像这样:

myWindowsAuthenticationModule.Authenticate += WindowsAuthentication_Authenticate;

但是,在尝试登录失败的情况下,我的代码不会被调用,大概是因为 WindowsAuthenticationModule 已经确定登录失败,因此没有必要调用我的模块。我的模块确实在尝试成功登录后被调用,因此我确信我的事件处理程序已正确设置。

据我所知,WindowsAuthenticationModule 不会公开身份验证失败时触发的事件,因此该选项不适用。

有什么想法吗?或者我是在向一棵没有解决方案的树吠叫吗?

最佳答案

我正在研究同样的问题,看起来没有用于 Windows 身份验证的事件,即使身份验证事件对于表单和窗口来说很常见。

但我找到了解决方案!

http://www.codeproject.com/Articles/11202/Redirecting-to-custom-401-page-when-quot-Access-de

更新

摘自原文

protected void Application_EndRequest(Object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context.Response.Status.Substring(0,3).Equals("401"))
{
if(User.Identity.IsAuthenticated)
{
// this means user is authenticated, but 401 still returned
// which means no access to page or whatever you are trying to access?
}
}
}

更新2

我还发现这个解决方案并不适用于所有情况。我在不同的环境中进行测试,因此为我工作,但不为其他人工作。

默认情况下,IIS 甚至不会运行这段代码,而只是返回它自己的错误页面,您要做的就是告诉 IIS 让应用程序处理错误。

<httpErrors existingResponse="PassThrough">
</httpErrors>

现在,话虽如此,IIS 不会再返回任何自定义错误,您需要在应用程序中处理它们,即。不仅是401,还有403、405等

关于asp.net-mvc-3 - 在 ASP.NET 中,是否有因 Windows 身份验证登录失败而触发的事件? (记录 Windows 身份验证失败的详细信息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373720/

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