1、站点web.config 配置Authentication 和Authorization 节点
loginUrl: 为用户访问指定页面前默认最先访问的页面。
authorization:为授权所有用户都可以访问
2、在站点子文件夹User下添加web.config,设置可访问当前子文件夹下的文件的用户。
<location path="login.aspx"> 对指定页面进行授权
<allow roles="user"/> 对user角色的用户授权
<deny users="*"/> 拒绝其他所有用户
3、在loginUrl 指定的页面进行跳转路径的分配
Request.QueryString["ReturnUrl"]:为从哪个页面跳转而来,这里即用户访问的页面。
4、根据页面路径跳转到指定路径,如 "/admin/login.aspx"
在Page_Load判断是否已通过验证(IsAuthenticated)并且为指定角色用户(IsInRole("user")) 则直接跳过登录。
5、在login页面输入用户信息 点击登录,经过数据库验证后,通过生成验证票据 FormsAuthenticationTicket,保存到cookie或session中。
验证票据中包括:版本信息,用户名、生效时间、过期时间、是否永久保存和用户数据等。而关于用户角色的信息,我们保存在用户数据中,即"user"。
6、在Global.asax文件中 在管道事件Application_AuthenticateRequest中,将第4步验证票据中的用户数据,即角色信息,设置到当前访问用户。
7、此时在验证票据和cookie未失效前,用户再次访问站点user路径下的文件时,验证的流程即:
A 浏览器请求Index.aspx
B 服务器端接收请求,创建HttpContext、HttpRequest、HttpCookie等
C 执行管道事件在Application_AuthenticateRequest方法中,读取验证票据中的用户信息,保存为当前用户的角色信息。
D 根据站点web.config下配置的loginUrl,访问相应页面,即loginRedirect页面。
E 根据配置文件/user/login 任何用户都可访问,跳转到指定页面,即/user/login.aspx
F IsAuthenticated 已验证,并且C步骤保存的角色信息也为user 直接跳转index.aspx
若C步骤中读取的用户信息保存的角色不是user 则无法跳转index页面,需要重新登录。
记录下~~~~