统一身份认证子系统中的关键技术 - pic_name
MyCollege.Net中最关键的技术是UIA中的身份认证与权限控制。在ASP.NET中通过相应的函数对页面实现身份认证是非常简单的,但是这个简单的函数并没有提供在页面中附加用户角色的功能。因此我们必须利用ASP.NET中身份认证的底层函数来实现附加用户角色的功能。下面是部分重要地代码:
Login.ascx控件中附加用户角色的代码:
private void Button1_Click(object sender, System.EventArgs e)
{
//对参数进行规范化处理,去掉多余的空格
string nickname=TextBox1.Text.Trim();
string password=TextBox2.Text.Trim();
//调用UIA的WebService来完成用户身份验证
if(new BusinessFacade.UserSystem().CheckUser(nickname,password))
{
//将登录用户的信息加入到Session中
Model.UserData user=null;
user=new BusinessFacade.UserSystem().GetUser(nickname);
this.Session[“User”]=user;
//创建身份验证票
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket (1,nickname,DateTime.Now, DateTime.Now.AddMinutes(30), false,””,”/”) ;
string HashTicket = FormsAuthentication.Encrypt (Ticket);
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
//添加到Cookies中
Response.Cookies.Add(UserCookie);
//跳转到适当的页面
if(this.Session[“ReturnURL”]!=null)
Response.Redirect (this.Session[“ReturnURL”].ToString(),true);
else Response.Redirect (“default.aspx”,true);
}
}
Global.asax中恢复用户名和角色的关键代码:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpApplication App = (HttpApplication) sender;
HttpContext Ctx = App.Context ; //获取本次Http请求相关的HttpContext对象
if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理
{
FormsIdentity Id = (FormsIdentity)Ctx.User.Identity ;
FormsAuthenticationTicket Ticket = Id.Ticket ; //取得身份验证票
string[] Roles = Ticket.UserData.Split (\’,\’) ; //将身份验证票中的role数据转成字符串数组
Ctx.User = new GenericPrincipal (Id, Roles) ; //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
}
}