image

前言

前些天一个朋友说他们客户的网站出了点故障,让我帮忙看看,这个网站还是用 ASP.NET WebForm 做的,很久以前的技术了,不过很多客户就是这样,只要网站还能稳定地运行,一般就不会去折腾升级,_

简单地看了下,问题比较简单,只是在连接 LDAP 域账户进行身份验证的过程中出了问题,随手就解决了,不过 Form Authentication 算是一种经典而又灵活的身份验证的方式,尤其是配合近些年比较流行的 LDAP/AD 域账户,账户的安全由 LDAP/AD 域分配和控制,Form Authentication 的灵活性和方便性就体现出来,前段时间写过一篇 ASP.NET MVC 使用 Form Authentication 的例子,今天继续记录和分享一下 ASP.NET WebForm 使用 Form Authentication 的步骤。

Step By Step 步骤

  1. 在 .NET FrameWork 框架下创建一个 ASP.NET WebForm 项目

  2. 配置 Web.config

    <configuration>
    	<system.web>
    		<authentication mode="Forms">
    			<forms loginUrl="Login_.aspx"></forms>
    		</authentication>
    		<!--设置哪些页面需要身份验证,哪些可以匿名访问,下里这里是所有页面都要身份验证-->
    		<authorization>
    			<deny users="?"/>
    		</authorization>
    		......
    	</system.web>
    	......
    </configuration>
    
  3. 创建 Logon.aspx 页面,并编写后端登录方法(留意注释

    using System.Data.SqlClient;
    using System.Web.Security;
    
    private bool ValidateUser( string userName, string passWord )
    {
    	// 从数据库或其它源验证帐号密码
    }
    
    // 点击登录按钮
    private void cmdLogin_ServerClick(object sender, System.EventArgs e)
    {
    	// 方法一
    	// 调用 RedirectFromLoginPage 方法自动生成表单身份验证 Cookie,并重定向用户到事件的适当 cmdLogin_ServerClick 页面
    	// if (ValidateUser(txtUserName.Value,txtUserPass.Value))
    	// 	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value, chkPersistCookie.Checked);
    	// else
    	// 	Response.Redirect("logon.aspx", true);
    	
    	// 方法二,比较灵活
    	// 自定义 FormsAuthenticationTicket 数据,生成身份验证票证,对其进行加密,创建 Cookie,将其添加到响应中,然后重定向用户
    	if (ValidateUser(txtUserName.Value,txtUserPass.Value))
    	{
    		FormsAuthenticationTicket tkt;
    		string cookiestr;
    		HttpCookie ck;
    		tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
    		DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
    		cookiestr = FormsAuthentication.Encrypt(tkt);
    		ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
    		if (chkPersistCookie.Checked)
    			ck.Expires=tkt.Expiration;
    		ck.Path = FormsAuthentication.FormsCookiePath;
    		Response.Cookies.Add(ck);
    
    		string strRedirect;
    		strRedirect = Request["ReturnUrl"];
    		if (strRedirect==null)
    			strRedirect = "default.aspx";
    		Response.Redirect(strRedirect, true);
    	}
    	else
    		Response.Redirect("logon.aspx", true);
    }
    
  4. 编写 Logon.aspx 页面的前端代码,比较简单,忽略

  5. 运行项目,输入账号和密码,点击登录按钮,即可验证登录效果。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部