标签:
自定以身份认证需要继承IIdentity与IPrincipal这两个接口来实现,这个过程是在AuthenticateRequest阶段完成的。以下过程都是模拟实现身份认证的,通过这种方式可以将ticket中保存的数据取出来用于初始化IPrincipal的实现,从而改变HttpContext.Current.User的指向的对象实例。
<authentication mode="Forms"> <forms loginUrl="a.html" name="andy"></forms> </authentication>
1 public class MyPrincipal : IPrincipal 2 { 3 public IIdentity Identity 4 { 5 get { return new MyIdendity("aa"); } 6 } 7 8 public bool IsInRole(string role) 9 { 10 if (string.Compare(role, "a,b", true) == 0) 11 { 12 return true; 13 } 14 else 15 { 16 return false; 17 } 18 } 19 }
1 public class MyIdendity : IIdentity 2 { 3 4 public MyIdendity(string data) 5 { 6 7 } 8 public string AuthenticationType 9 { 10 get { return "MyIdendity"; } 11 } 12 13 public bool IsAuthenticated 14 { 15 get { return true; } 16 } 17 18 public string Name 19 { 20 get { return "andy"; } 21 } 22 }
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 string userRoles = "admin,test"; 4 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 5 1, 6 "a", 7 DateTime.Now, 8 DateTime.Now.AddMinutes(30), 9 true, 10 userRoles, 11 "/" 12 ); 13 string haskTicket = FormsAuthentication.Encrypt(ticket); 14 HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName,haskTicket); 15 Response.Cookies.Add(userCookie); 16 17 } 18 19 protected void Button1_Click(object sender, EventArgs e) 20 { 21 var context = HttpContext.Current; 22 if (context.User.Identity is FormsIdentity) 23 { 24 if (!(context.User is MyPrincipal)) 25 { 26 FormsIdentity forms = (FormsIdentity)context.User.Identity; 27 string data = forms.Ticket.UserData; 28 MyPrincipal principal = new MyPrincipal(); 29 context.User = principal; 30 } 31 } 32 } 33 }
标签:
原文地址:http://www.cnblogs.com/goodlucklzq/p/4409107.html