我有一个托管许多asp.net应用程序的网站。一些用MVC2编写,一些用MVC3编写,一些不是内部编写和二进制部署(虽然我们可以找到源代码),还有很多是用ASP.Net 2.0 webforms编写的。在所有这些站点中,我们使用登录应用程序中的单个登录页面。我们可以这样做,因为所有应用程序共享:
我的问题是他们也分享安全问题,没有cookie欺骗保护。 我的计划是在登录cookie中添加一些额外的信息(前2个字节的ip,用户代理)(可能在useradata字段中),然后在接受cookie之前在每个请求上验证这一点。
我的问题是asp.net在哪里检查表单身份验证票证并加载用户,在使用登录之前我可以覆盖它以检查一些额外的事情。
如果我不必将此代码添加到每个global.cs并且可以将它放在某个dll中并在配置文件中引用该dll,那将是一个加分。
答案 0 :(得分:0)
除了编写新的 FormsAuthenticationModule 之外,您无法覆盖身份验证,但有一种更简单的方法。 在ASP.NET管道处理请求时,每一步都会引发一个事件,您可以在此处使用ASP.NET管道并完成工作。
在您的情况下,您可以在 PostAuthenticateRequestHandler 事件处理程序中验证您的Cookie。
HttpCookie authCookie = Context.Request.Cookies["YourFormsCookieName"];
if (IsValidAuthCookie(authCookie))
{
// do some stuff
}
else
{
// expire cookie using FormsAuthentication.Signout()
// do some stuff
}
这是一个有用的链接:Forms Authentication