知识大全 Asp.Net Forms验证实例
Posted 知
篇首语:忘掉失败,不过要牢记失败中的教训。。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.Net Forms验证实例相关的知识,希望对你有一定的参考价值。
Asp.Net Forms验证实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
以前开发项目时经常是自己开发一套用户权限管理系统进行验证 比较灵活 最近为了单点登录的问题又把Asp Net自带的验证方式看了一遍 发现这种方式也比较方便 功能也还可以 在Asp Net提供了三种常用的验证方式 Windows方式是和IIS结合起来可以实现基本 摘要 集成 Windows等身份验证 Passport方式是使用Windows Live ID的帐户来进行统一验证的 Forms方式是使用常见的表单来实现验证 一 普通实现方式 这种方式是最简单的 只需要配置一下就可以了 执行aspnet_regsql命令建立数据库 aspnet_regsql命令在C:\\WINDOWS\\Microsoft NET\\Framework\\v 目录下 按提示运行就可以了
新建一个web网站 在Web Config中加入配置
<connectionStrings> <add name= MySqlConnection connectionString= Data Source=dbserver;Initial Catalog=database;user id=userid;password=****; /> </connectionStrings>
<system web> <authorization> <deny users= ? /> </authorization> <authentication mode= Forms > <forms loginUrl= login aspx name= ASPXAUTH /> </authentication>
<membership defaultProvider= SqlProvider > <providers> <clear /> <add connectionStringName= MySqlConnection applicationName= MyApplication enablePasswordRetrieval= false enablePasswordReset= true requiresQuestionAndAnswer= true requiresUniqueEmail= true passwordFormat= Hashed name= SqlProvider type= System Web Security SqlMembershipProvider /> </providers> </membership>
</system web>主要就是指定Forms验证使用的数据库 如果不指定数据库会使用本机默认的aspnetdb 数据库 deny users= ? 表示不允许匿名用户访问 也就是说当匿名用户访问时自动跳转到下面配置的login aspx页面 至于authorization和authentication节的其他属性可以参考MSDN 里面有很详细的介绍
在网站里创建Default aspx和Login aspx页面 在Login aspx页面里面放入Login和CreateUserWizard控件(因为我们新建的库中一个用户也没有 CreateUserWizard控件只是用来建立测试用户的 建好用户后可以把这个控件删除) 在Default aspx页面中随便放入一些内容 当我们访问Default aspx时就会自动转入Login aspx进行验证了
二 自定义实现方式 采用第一种方式时会要求建立一个数据库 很多表 可能并不符合我们自己的业务要求 可以使用以下的自定义方式 利用Login控件的Authenticate事件 这个事件就是用来进行验证的 可以通过指定true值表示验证通过 protected void Login _Authenticate(object sender AuthenticateEventArgs e) //判断用户名密码是否正确 // e Authenticated = true; 完全抛开Login等控件 自己写代码 其实Login控件的核心主要也就是往Cookie里面放入一些值 那么我们可以在自己的代码中来进行这个操作
protected void Button _Click(object sender EventArgs e) //判断用户名密码是否正确 // FormsAuthentication SetAuthCookie(userName false); if (Context Request[ ReturnUrl ] != null) Response Redirect(Context Request[ ReturnUrl ]); else Response Redirect(FormsAuthentication DefaultUrl); 采用以上两种方式就不用建立默认的数据库了 直接使用我们的逻辑进行验证操作
三 自定义角色提供程序 以上说的都是用户级别的验证 在有的情况下需要根据角色来进行验证 比如指定某个目录或某个aspx文件只能让哪几个角色的用户访问 根据角色来控制的话比较方便灵活 在登录验证的时候把角色信息也保存到Cookie中去 protected void Button _Click(object sender EventArgs e) //判断用户名密码是否正确 //
//得到用户的角色 测试时暂时写死 string userRoles = Admins testst ; FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket( user DateTime Now DateTime Now AddMinutes( ) false userRoles / ); string HashTicket = FormsAuthentication Encrypt(Ticket);
//把角色信息保存到Cookie中去 HttpCookie UserCookie = new HttpCookie(FormsAuthentication FormsCookieName HashTicket); Response Cookies Add(UserCookie);
if (Context Request[ ReturnUrl ] != null) Response Redirect(Context Request[ ReturnUrl ]); else Response Redirect(FormsAuthentication DefaultUrl); 把角色信息加密成特定的格式保存
自定义角色提供程序 如果要按照角色进行验证的话 肯定要涉及到角色提供程序 在默认情况下也是会去连接默认的数据库的 我们可以自己写一个角色提供程序来实现自己的逻辑 首先在nfig中加入配置 Code <roleManager defaultProvider= MyRoleProvider enabled= true cacheRolesInCookie= true cookieName= ASPROLES cookieTimeout= cookiePath= / cookieRequireSSL= false cookieSlidingExpiration= true cookieProtection= All > <providers> <clear /> <add name= MyRoleProvider type= MyRoleProvider writeExceptionsToEventLog= false /> </providers> </roleManager>这个就是指定我们的角色提供类MyRoleProvider 这个类必须从System Web Security RoleProvider继承 只要重载实现一个方法就可以了(其他方法返回异常) public override string[] GetRolesForUser(string username) FormsIdentity Id = HttpContext Current User Identity as FormsIdentity; if (Id != null) return Id Ticket UserData Split(new Char[] ); return null; 也就是从我们之前保存到Cookie中的值取得用户角色(FormsAuthentication会自动把保存的cookie转化成User内的值)之后我们就可以在nfig中配置角色验证规则了 <location path= admin > <system web> <authorization> <allow roles= Admins /> <deny users= * /> </authorization> </system web> </location>或者也可以在代码中判断 bool a = User IsInRole( testt );判断起来还是很方便的
四 单点登录 使用Forms的单点登录主要是通过machineKey的配置 machineKey 元素对密钥进行配置 以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密 并将其用于对进程外会话状态标识进行验证 使用这种方式的单点登录目前只能实现相同主机或相同子域站点之间的同步登录 比如和可以实现 但是和就不能实现了 对于非同一父域名下的域名间不能跨站登录 主要配置如下 <machineKey validationKey= E E B F ACB CCD F DDD E A EE ADF B D DB FA F E CCCDB D B D DD decryptionKey= B CBCA B A D FAA B F DF D validation= SHA /> <authentication mode= Forms > <forms loginUrl= login aspx name= ASPXAUTH domain= /> </authentication>要实现单点登录的多个web站点的machineKey必须一样 forms里面的name和domain也必须一样 这样配置好之后 在其中一个站点登录后再调转到另一个站点就不需要再次登录了 注 如果MOSS网站采用Forms验证方式的话 只要把MOSS站点的对应配置改成和自己的Asp Net站点一致 那么可以从自己的站点直接进入MOSS站点 也不需要重新登录(MOSS站点和自己的站点要有相同的用户名)
cha138/Article/program/net/201311/12087相关参考
知识大全 一个简单的ASP.NET Forms 身份认证的实例方法
一个简单的ASP.NETForms身份认证的实例方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一个简单的ASP.NETForms身份认证 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 当访问
ASP.NET验证码技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 验证码技术是目前很多WE
ASP.NET做验证码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 显示验证码的界面前台<
ASP.NET验证码(.aspx) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSy
当Asp.Net验证控件遇到FCKeditor 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使
就来说说Asp.net身份验证、授权 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [本周]如约
ASP.NET常用6种验证控件介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Requi
使用ASP.NET中的Passport验证[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n
使用ASP.NET中的Passport验证[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n