asp.net中的自定义身份验证

时间:2011-06-24 19:41:01

标签: asp.net authentication

在ASP.NET中针对用户的自定义数据库设置身份验证的最佳方法是什么?我目前的设置不是很好,我确信有更好的方法来进行身份验证,但我能找到的只是一些七八年的文章。我目前的设置如下:

  • 应用程序使用Windows用户名(通过Windows身份验证)来确定用户是否在允许用户的数据库中。这是通过调用Page_Load中的Authenticate方法完成的。
  • 如果用户不在允许的用户中,则该页面会重定向到登录屏幕。

这种方法的缺陷是它调用:

Response.Redirect("~/login.aspx", false)

执行Page_load方法的整个主体。有更好的身份验证方式吗?像自定义页面类或HTTPModules这样的工作会起作用吗?

2 个答案:

答案 0 :(得分:1)

您可以在请求中尽早进行检查,例如OnInit,或者您可以做一些更强大的工作,例如实施您自己的会员提供商:MSDN article / Video tutorial < / p>

答案 1 :(得分:0)

好的,基本上我是这样做的。我写了这个继承自System.Web.UI.Page的类。我覆盖OnInit事件,这是身份验证发生的地方(根据用户数据库查找Windows用户名)。如果用户未通过身份验证,则isTerminating设置为true,OnLoad事件仅在isTerminatingfalse时运行。我尝试将Response.Redirect与第二个参数设置为false,但这仍然会运行所有后续页面事件。 (即使拨打HttpApplication.CompleteRequest()

public class BasePageClass : Page
{
    private bool isTerminating = false;

    protected override void OnInit(EventArgs e)
    {
        isTerminating = !AuthenticationManager.Authenticate();

        base.OnInit(e);
    }

    protected override void OnLoad(EventArgs e)
    {
        if (!isTerminating)
        {
            base.OnLoad(e);
        }
    }
}

我不知道是否运行OnLoad事件是最好的事情,但似乎“似乎”工作正常。