初识ASP.NET MVC窗体验证与权限过滤---1.窗体身份验证
2015-05-16 10:40
447 查看
一直不懂如何解决web系统的登录权限控制问题,在最开始的时候,我用了一个很土的方法。用户登录成功后就把用户的身份信息写到一个会话cookie中。这种方法非常的脆弱而且不安全。比如a用户登录后没有退出功能页面,此时他又登录了b用户的账户,身份cookie已经被改写成了b。如果此时他回到a用户的功能页上继续操作,轻则他会看到b用户的相关信息,重则会出现系统错误。
就算用户正常登录了,如何保证系统对用于做出恰当的权限识别,防止他进入非授权的页面。使用这种简单的土办法同样解决不了。
虽然知道mvc中已经集成了窗体身份验证,并且可以通过过滤器来进行访问控制,但一直没有时间研究(全是借口^_^)。昨天搞到半夜,总算是有点眉目了,特记录备忘。
mvc的窗体身份验证和我的土办法其实原理是一样的。要想服务端知道客户端是谁,肯定要为客户端打上某种“标记”,mvc使用了一个称为 FormsAuthenticationTicket的东东,待登陆后,你创建一个鉴权票据加密后存储到客户端。服务器来根据这个加密cookies判断你的身份,很简单吧。页面代码如下,为了方便演示,没有采集任何输入,直接向服务端发送了异步请求,并指定自己的角色。
![](https://img-blog.csdn.net/20150516110955170)
至此,我们就完成了窗体身份验证,是不是很简单。
就算用户正常登录了,如何保证系统对用于做出恰当的权限识别,防止他进入非授权的页面。使用这种简单的土办法同样解决不了。
虽然知道mvc中已经集成了窗体身份验证,并且可以通过过滤器来进行访问控制,但一直没有时间研究(全是借口^_^)。昨天搞到半夜,总算是有点眉目了,特记录备忘。
mvc的窗体身份验证和我的土办法其实原理是一样的。要想服务端知道客户端是谁,肯定要为客户端打上某种“标记”,mvc使用了一个称为 FormsAuthenticationTicket的东东,待登陆后,你创建一个鉴权票据加密后存储到客户端。服务器来根据这个加密cookies判断你的身份,很简单吧。页面代码如下,为了方便演示,没有采集任何输入,直接向服务端发送了异步请求,并指定自己的角色。
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <script src="~/Scripts/jquery-1.8.2.min.js"> </script> <script> $(function () { $('#btn_login_index').click(function () { $.ajax({ url: '/Home/LogOn', cache: false, data: { UserName: "Andy", Role: "Manager" }, success: function () { location.replace('/Main/index'); } }); }); }); </script> <title>Login</title> </head> <body> <div> <button id="btn_login_index">登录</button> </div> </body> </html>获得授权后跳转到另一个页面。服务器端代码如下:
public string LogOn(string username, string role) { //在实际代码中,以下应该为根据用户名和密码从业务层进行验证并获取权限 //用户名和密码可以采用Base64加密 UserModel user = new UserModel { ID = 2, Name = "Andy", Password = "123456", Roles = new string[] { role } }; //将用户身份存入Session,过期时间为30分钟 Session["username"] = username; Session["userid"] = user.ID; Session["roles"] = user.Roles.Aggregate((x, y) => x + "," + y); //创建窗体验证票据 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1, user.Name, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout), false, user.Roles.Aggregate((i, j) => i + "," + j) ); //加密后写入cookies HttpCookie cookie = new HttpCookie( FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); //将cookies添加到响应 Response.Cookies.Add(cookie); return "yes"; }登陆后,服务器向浏览器发送了两个cookies,.ASPXAUTH就是窗体验证的鉴权cookies,由于我们使用了session,所以服务端又发送了一个sessionid来标示session。若不使用session,则不会发送第二个cookies。
至此,我们就完成了窗体身份验证,是不是很简单。
相关文章推荐
- 初识ASP.NET MVC窗体验证与权限过滤---3.自定义过滤器验证Session超时
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC 窗体身份验证及角色权限治理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- 转:ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例 .
- 转:ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC 窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- 转:ASP.NET MVC:窗体身份验证及角色权限管理示例
- Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码
- Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码
- ASP.NET MVC(模型(Model),视图(View)和控制Controller)实践:实现身份验证权限管理