在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. Asp.Net身份认证的方式1. Asp.net的身份验证有"Windows | Forms | Passport"3种方式,其中又以Forms验证用的最多,也最灵活. 2. 在ASP.NET中,整个身份认证的过程其实可分为二个阶段:认证与授权。 a) 认证阶段:识别当前请求的用户是不是一个可识别(的已登录)用户 b) 授权阶段:是否允许当前请求访问指定的资源 这二个阶段在ASP.NET管线中用AuthenticateRequest和AuthorizeRequest事件来表示, 通过查看反编译的源码,如下图:
查看FormsAuthenticationModule的init方法的源代码,可以看到执行AuthenticateRequest事件时会执行认证方法this.OnEnter,如下图:
2. Form表单身份认证1. Forms认证是由FormsAuthenticationModule实现的,URL的授权检查是由UrlAuthorizationModule实现的. 2. Form表单身份认证的配置 认证配置说明: <system.web> <authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" /> </authentication> </system.web> 下面是对默认属性值的描述:
3. Form表单身份认证的原理
新建一个AuthenticationLogin_Test.aspx页面,前端代码如下 <form action="<%= Request.RawUrl %>" method="post"> <fieldset> <legend>用户状态</legend> <% if( Request.IsAuthenticated ) { %> 当前用户已登录,登录名:<%= Context.User.Identity.Name %> <br /> <input type="submit" name="btnLogout" value="退出" /> <% } else { %> <b>当前用户还未登录。</b> <% } %> </fieldset> <fieldset> <legend>普通登录</legend> 登录名:<input type="text" name="loginName" style="width: 200px" value="hoby" /> <input type="submit" name="btnNormalLogin" value="登录" /> </fieldset> </form>
后台代码如下: protected void Page_Load(object sender, EventArgs e) { if (Request.Form["btnLogout"] != null)//点击了注销按钮 { Logout(); } else if (Request.Form["btnNormalLogin"] != null) //点击了登陆按钮 { NormalLogin(); } }
public void Logout() { FormsAuthentication.SignOut(); Response.Redirect("AuthenticationLogin_Test.aspx"); }
public void NormalLogin() { string loginName = Request.Form["loginName"]; if (string.IsNullOrEmpty(loginName)) return; //写入认证的Cookie FormsAuthentication.SetAuthCookie(loginName, true); Response.Redirect("AuthenticationLogin_Test.aspx"); }
Web.config配置如下:
<!--设置认证方式--> </system.web>
通过Firebug查看,Form表单认证通过写入一个Cookie来标识用户是否登陆,Cookie的值是经过加密的, Cookie的默认名称为’.ASPXAUTH’, 用户可以自定义这个名称.
请求其他页面,通过Firebug查看到携带的Cookie信息如下:
用户登录的过程大致是这样的: (1) 检查用户提交的登录名和密码是否正确。 (2) 根据登录名创建一个FormsAuthenticationTicket对象。 (3)调用FormsAuthentication.Encrypt()加密。 (4)根据加密结果创建登录Cookie,并写入Response。
在登录验证结束后,后面的每次请求都将带上前面产生的加密Cookie,供服务器来验证登录状态。
----------------------------------------------- 参考网址 http://www.cnblogs.com/fish-li/archive/2012/04/15/2450571.html http://msdn.microsoft.com/zh-cn/library/ff647070.aspx http://blog.csdn.net/zengjibing/article/details/3918189 http://blog.csdn.net/ChengKing/article/details/567608 |
请发表评论