ASP.NET:在代码中验证用户

时间:2009-09-17 15:57:15

标签: asp.net authentication forms-authentication

我正在玩认证和授权以准备一些任务。我创建了两个页面:Login.aspx和Default.aspx。在配置文件中,我为表单设置了身份验证,并拒绝了未经身份验证的用户访问:

<authentication mode="Forms">
      <forms name="aaa" defaultUrl="~/Login.aspx" />
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>

然后我写了一些简单的代码来在Login.aspx中验证我的用户:

protected void Page_Load(object sender, EventArgs e)
        {
            GenericIdentity identity = new GenericIdentity("aga", "bbb");
            Context.User = new GenericPrincipal(identity, new String[] { "User" }); ;
            Response.Redirect("~/Default.aspx");
        }

当我运行它时,重定向不会发生。而是一遍又一遍地调用Login.aspx,因为用户未经过身份验证(每次加载时Context.User.Identity.IsAuthenticated都为false)。我做错了什么?

5 个答案:

答案 0 :(得分:7)

Context.User仅设置当前请求的主体。重定向发生后,当前请求结束,新的请求再次以未覆盖的主体开始(显然未经过身份验证)。因此,设置Context.User实际上并不会对任何内容进行身份验证。

使用 FormsAuthentication.SetAuthCookie() 会将用户的Cookie设置为FormsAuthentication提供程序接受的有效值,或将该令牌放入URL中。您可以重定向到您内心的内容,因为cookie显然会影响用户以备将来的请求。

来自MSDN(已添加):

  

使用表单身份验证时,如果要对用户进行身份验证但仍保留对重定向的导航控制,则可以使用SetAuthCookie方法。

如上所述,这不一定需要cookie - 名称有点误导,因为如果FormsAuthentication处于无cookie模式,它仍将通过URL工作:

  

SetAuthCookie方法将表单身份验证票证添加到Cookie集合,或者如果CookiesSupported为false,则添加到URL。

答案 1 :(得分:4)

答案 2 :(得分:1)

您需要将用户实际设置为已通过身份验证。以下所有方法都可以使用,让您实际远离登录屏幕。

FormsAuthentication.Authenticate()
FormsAuthentication.RedirectFromLoginPage()
FormsAuthentication.SetAuthCookie()

获得相同结果的方法很多。

答案 3 :(得分:0)

您需要实际调用formsAuthentication提供程序来设置登录。

FormsAuthentication.RedirectFromLoginPage(txtUser.Text,chkPersistLogin.Checked)

是一个简单的例子

答案 4 :(得分:0)

创建虚拟Context.User后,需要执行FormsAuthentication.SetAuthCookie或RedirectFromLoginPage方法。