我玩弄身份验证和授权,为一些任务做准备。 我创建了两个页面:为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是在每个负载假)。 我究竟做错了什么?
Context.User
仅设置当前请求的主体。 一旦重定向发生时,当前请求结束和一个新的与非重写主再次开始(这显然是不被认证)。 因此,设置Context.User
实际上并没有任何身份验证。
使用FormsAuthentication.SetAuthCookie()将用户的cookie设置由FormsAuthentication提供程序接受一个有效的值,或将令牌的URL。 您可以重定向你的心脏的内容,因为该cookie显然与用户将来的请求枝。
从MSDN(EM加):
随着窗体身份验证,就可以当你想验证用户,但仍保留与重定向的导航控制使用SetAuthCookie方法。
如前所述,这并不一定需要饼干 - 这个名字是有点误导,因为它仍然可以通过URL工作,如果FormsAuthentication在cookie的模式:
该SetAuthCookie方法增加了一个表单的身份验证票证要么Cookies集合,或将网址,如果CookiesSupported是假的。
使用FormsAuthentication.SetAuthCookie(..) 。 或FormsAuthentication.RedirectFromLoginPage(..) 。
实际上你需要设置用户通过身份验证。 所有下面的方法将工作,让你真正从你的登录屏幕了。
FormsAuthentication.Authenticate()
FormsAuthentication.RedirectFromLoginPage()
FormsAuthentication.SetAuthCookie()
方法很多,以获得相同的结果。
您需要实际上使该formsAuthentication提供商设置登录的电话。
FormsAuthentication.RedirectFromLoginPage(txtUser.Text,chkPersistLogin.Checked)
是一个简单的例子
创建虚拟Context.User后,您需要执行FormsAuthentication.SetAuthCookie或RedirectFromLoginPage方法。