ASP.NET:代码中的用户身份验证(ASP.NET: Authenticating user in

2019-08-07 07:21发布

我玩弄身份验证和授权,为一些任务做准备。 我创建了两个页面:为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是在每个负载假)。 我究竟做错了什么?

Answer 1:

Context.User仅设置当前请求的主体。 一旦重定向发生时,当前请求结束和一个新的与非重写主再次开始(这显然是不被认证)。 因此,设置Context.User实际上并没有任何身份验证。

使用FormsAuthentication.SetAuthCookie()将用户的cookie设置由FormsAuthentication提供程序接受一个有效的值,或将令牌的URL。 您可以重定向你的心脏的内容,因为该cookie显然与用户将来的请求枝。

从MSDN(EM加):

随着窗体身份验证,就可以当你想验证用户,但仍保留与重定向的导航控制使用SetAuthCookie方法。

如前所述,这并不一定需要饼干 - 这个名字是有点误导,因为它仍然可以通过URL工作,如果FormsAuthentication在cookie的模式:

该SetAuthCookie方法增加了一个表单的身份验证票证要么Cookies集合,或将网址,如果CookiesSupported是假的。



Answer 2:

使用FormsAuthentication.SetAuthCookie(..) 。 或FormsAuthentication.RedirectFromLoginPage(..) 。



Answer 3:

实际上你需要设置用户通过身份验证。 所有下面的方法将工作,让你真正从你的登录屏幕了。

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

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



Answer 4:

您需要实际上使该formsAuthentication提供商设置登录的电话。

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

是一个简单的例子



Answer 5:

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



文章来源: ASP.NET: Authenticating user in code