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

ASP.NET 中的表单身份验证(Forms Authentication)相关推荐

  1. ASP.NET在IE10中Form表单身份验证失效问题解决方法

    我的系统遇到了这个问题,还好有好心网友发布了一篇文章: ---------网上找的原文如下--------------------------- IE10中Session丢失问题引起众多业内人士的关注 ...

  2. 【JSP/SERVLET】Tomcat内置表单身份验证

    一.概述 前面是扯犊子的,JSP/SERVLET基于HTTP规范,提供了几种安全支持,BASIC.DIGEST.FORM.CLIENT-CERT,本文主要介绍一下FORM的安全支持开发,文末有一个小d ...

  3. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(4)暴力破解HTML表单身份验证

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(4)暴力破解HTML表单身份验证 文章目录 黑帽python第二版(Black Ha ...

  4. GOOGLE ADSENSE广告联盟收不到PIN码_快速表单身份验证PIN码方法

    在自己的网站或者博客上投放Google Adsense广告是目前很多站长不错的赚钱途径.尤其是Google Adsense不仅单价高.而且信誉好.支付稳定等天然优势让国内众多广告联盟黯然失色.在流量有 ...

  5. 表单身份验证(受保护的目录)

    根目录下的 web.config <authentication mode="Forms">   <forms name=".COOKIEDEMO&qu ...

  6. asp.net 调用html页面,ASP.NET中HTML页面的访问验证设置方法

    可能有很多朋友和我一样不会留意到这样的问题,在ASP.NET中,使用其自身提供的访问验证功能(表单验证.Passport 验证.Windows 验证),并不会对静态文件(如 html.图像文件.文本文 ...

  7. ASP.Net4中实现自定义的请求验证(转贴)

    1.        请求验证什么? 首先,请看下图: 上图中,是我们常见一个ASP.Net错误提示.由于ASP.Net默认情况是把请求验证(validateRequest)设置是为true,从而使得A ...

  8. 如何验证 Active Directory 使用表单身份验证和 Visual C#.NET

    本文引用下面的 Microsoft.NET 框架类库名称空间: System.Text System.DirectoryServices System.Security.Principal Syste ...

  9. asp.net中提交表单数据时提示从客户端(。。。)中检测到有潜在危险的 Request.Form 值...

    看到这个图是不是很亲切熟悉哈,做过.net的肯定都见过哈 已经 将近4年没碰.net了,今天正好朋友的程序有几个bug,让我帮忙修复下,于是我就抱着试试看的心情改了改,改到最后一个问题的时候也就是上面 ...

最新文章

  1. 使用Docker-容器命令案例1
  2. Linux系统运维之路
  3. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)
  4. Magento: 友好显示库存 User friendly product availability message in Magento
  5. linux_network
  6. 计算机辅助药物设计中的分子动力学模拟
  7. 希捷硬盘校准日志分析
  8. ffmpeg 自定义IO与Seek
  9. linux-- input子系统分析
  10. 大屏用户有福了,vivo大屏旗舰被“猪队友”爆光,售价9999元?
  11. 转:sql server 中的汉字转化为拼音
  12. springboot系列课程笔记-第四章-WEB开发
  13. 说说各种手机输入法的体验
  14. Ubuntu 安装源及初始配置
  15. 【谷歌地图--DirectionsSDK集成】
  16. 使用Arthas热更新时,lombok注解导致mc命令编译失败
  17. 20155305乔磊2016-2017-2《Java程序设计》第五周学习总结
  18. Lottie—json文件解析
  19. c语言AT源码,51单片机读写AT24C02源代码(详细注释)
  20. Cesium中文API 文档

热门文章

  1. web服务器time_wait值过高解决方案
  2. html5 拖拽的简要介绍
  3. IT工程师实战英语之一
  4. Keil主题皮肤设置,自用推荐
  5. Redis分布式锁 Spring Schedule实现任务调度
  6. 您的凭依不工作/登录没有成功
  7. 号称史上最牛逼的几篇博客整理(python+java+js等)
  8. ptyhon时间处理
  9. svn 邮件通知及LOG处理 强制提交log日志
  10. 【STM32 .Net MF开发板学习-11】步进电机控制(非PWM模式)