ASP.NET 中的表单身份验证(Forms Authentication)

表单验证可以通使用一个登录页面验证用户的用户名和密码。未通过验证的请求会被重定向到登录页面,要求用户输入其凭据信息(同常是用户名和密码)。如果请求通过验证,系统将签发一个身份验证票据,在用户会话期间,这个票据维护用户的身份标识信息以及用户角色。通过FormsAuthentication 类可以访问用户的标识信息和角色。

下面实现一个简单的Forms Authentication:

(1)新建一个新的Web应用程序,创建一个登录页面。

(2)修改应用程序根目录下的web.config文件,设置应用程序的验证模式为表单验证。

<system.web>
<authentication mode="Forms">
    <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">
    </forms>
</authentication>
</system.web>


(3)在限制访问的目录下创建一个web.config文件,修改authorization配置节阻止匿名用户的访问。
<system.web>
  <authorization>
       <deny users="?"/>
  </authorization>
</system.web>

(4)在登录面页中鉴别用户并且创建一个表单验证票据。

下面的代码假定你有一个IsAuthenticated函数用于验证用户,一个GetRoles函数用于获取用户角色。

void OnLogin(object sender, EventArgs e)
 {
  if(IsAuthenticated(username, password))
  {
   string roles = GetRoles(username);
   FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1, // 版本
    username, // 用户名
    DateTime.Now, // 票据的签发时间
    DateTime.Now.AddHours(1), // 票据的过期时间
    false, // 是否为永久Cookie
    roles // 附加的用户数据,此处用来存放用户角色
   );

   string encryptedTicket = FormsAuthentication.Encrypt(ticket);
   HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
   Response.Cookies.Add(cookie);
   Response.Redirect(FormsAuthentication.GetRedirectUrl(username, false));
  }
 }

(5)捕获验证请求事件,创建一个GenericPrinciple对象。

void Application_AuthenticateRequest(object sender, EventArgs e)
 {
  HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
  FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
  string[] roles = ticket.UserData.Split(new char[] { ',' });
  FormsIdentity identity = new FormsIdentity(ticket);
  GenericPrincipal priciple = new GenericPrincipal(identity, roles);
  Context.User = priciple;
 }

转载于:https://www.cnblogs.com/avisnet/archive/2006/09/14/503889.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值