3 系统实现
1) ASP.NET中的安全机制 学位系统采用ASP.NET安全架构中的表单验证方式实现用户登录。使用表单身份验证时,通过指定的登录页面收集用户的凭证信息,如果未验证身份的用户试图访问受保护的文件或资源(其中,URL授权拒绝用户访问)将被重新定向到该登录页面,用户在此处尝试通过身份验证。用户提供凭据并提交该窗体,如果应用程序对请求进行身份验证,系统会发出一个Cookie,其中包含用于重新获取标识的凭据或密钥。随后发出的请求在请求头中具有该Cookie,ASP.NET事件处理程序使用应用程序开发人员指定的任何验证方法对这些请求进行身份验证和授权。其验证流程如图3所示。 图3 基于窗体的身份验证流程 基于窗体的身份验证开发步骤如下: (1) 将IIS配置为使用匿名访问。 (2) 将 ASP.NET 配置为使用表单身份验证。在Web.config文件中配置authentication元素的属性,设置为身份验证模式。 <authentication mode="Forms"> <forms name=".ASPXAUTH" protection="Encryption" timeout="15" loginUrl="Login.aspx" /> </authentication> (3) 检索数据存储验证用户,从自定义数据存储中检索角色列表(不是基于角色可不用)。 (4) 使用FormsAuthenticationTicket创建一个Cookie并回发到客户端,并存储角色到票中。 FormsAuthentication.SetAuthCookie(Username,true | false) HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1) //cookies保存时间 如果需要存储角色,采用: FormsAuthenticationTicket authTicket = new Forms AuthenticationTicket(1, // 版本号,设置为1
txtUserName.Text, // 用户标示
DateTime.Now, // Cookie的发出时间, 设置为 DateTime.Now
DateTime.Now.AddMinutes(20),// Cookie的有效时间
false, // 是否持久性 roles ); //roles为存储的用逗号分割的角色串 string encryptedTicket = FormsAuthentication. Encrypt (authTicket); //把身份验证票加密