asp.net2.0新增加的安全控件

 asp.net2.0新增加的安全控件
asp.net带来几个新的安全控件,在工具栏的Login下面,使得WEB的开发非常的简单.使用新的安全控件你能够执行例如,登录,注册,修改密码等等,而这些你只要拖放控件就能够完成.
首先我们建一个web工程,在Default.aspx页上加入一个LoginView控件,这是一个容器控件,它可以表示用户是否登录,允许用户跳转到另一页.在控件的灵巧标签(Smart Tasks)上可以改变显示方式(Views)LoggedInTemplate(已登录)和anonymousTemplate(未登录).

现在在工程中再新建一个Web Form,取名为Login.aspx(asp.net2.0默认登录页为Login.aspx,如果想更改可以在machine.config.comments找).如果你想用不同的名字,可以在Web.config文件中加入
<system.web>
      <authentication mode="Forms">
         <forms name=".ASPXAUTH"
            loginUrl="Authenticate.aspx"
            protection="Validation" timeout="999999" />
      </authentication>
   ...
Authenticate.aspx为你想改的名字.
向Login.aspx中加入一个Login控件,可以在控件的灵巧标签上的Auto Format选择样式.
接下来需要改变asp.net2.0验证模式,在Web.config中修改,
<system.web>
   <authentication mode="Forms"/>
   ...
这样你就只需向Web站点增加用户,而不用向Windows增加用户了.
 
为你的站点添加用户
在你运行之前,你需要为你的站点新增用户,你可以使用ASP.NET Web Site Administration Tool (WAT)来添加,选择菜单上的Website --> ASP.NET Configuration,进入Security(你已经安装了SQL server 2005)选项,Security允许你为站点新增和删除用户,新增角色和访问权限.
添加完用户后你可以运行程序了,选择Default.aspx点击F5,输入帐户信息,成功登录后,Login链接变为Logout
 

添加用户
asp.net2.0的CreateUserWizard控件让用户自己新增一个免费帐户,像论坛那样.
向default.aspx加入一个CreateUserWizard控件,现在你可以运行程序,填写信息点击Create User,成功后可以看到"Your account has been successfully created."

 

新建的用户信息在哪
我们用WAT建了用户,也用CreateUserWizard控件建了用户,可我们却不知道用户信息在哪,你在Solution Explorer的APP_Data目录中可能找到ASPNETDB.MDF,这个数据库是SQL Server 2005 Express默认的asp.net2.0用户帐户数据库,他包括aspnet_Membership和aspnet_Users二个表,我们之前新建的用户可以在表中找到.你不需要自己建数据库,asp.net2.0会自动为你建好.
 
Membership模式的工作方式
asp.net2.0使用新的安全模式--Membership模式,他允许开发者选择他们自己的安全特性.下图中展示了此模式的可扩展性.
顶层是不同的Web server控件如Login,LoginStatus和LoginView,下面是他们执行所必需的API,Membership class主要用于新增和删除用户MembershipUser class负责用户信息(如密码,密码问题等等),Membership API用Membership Providers保存用户信息.Visual Studio 2005利用一个默认的Membership Provider--SQL Server 2005 Express Membership Provider,Membership Provider在Membership APIs和数据库之间扮演一个桥梁的角色,所以信息能够保持持久性,开发者也不用写底层数据层代码.
 
找回密码
找回密码功能是一个公共操作,你必须是administrator.PasswordRecovery控件可能自动为用户找回密码并发送到用户的指定的Email.
如果你储存的密码是纯文本而不hash值,密码恢复是可用.可是machine.config文件默认密码储存形式是hash的,
我们将其改为以纯文本方式储存密码,
   ...
   <system.web>
   <membership
      defaultProvider="SqlProvider"
      userIsOnlineTimeWindow="15">
      <providers>
      <clear />
      <add
         name="SqlProvider"
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="LocalSqlServer"
         applicationName="SecurityControls"
         enablePasswordRetrieval="true"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="true"
         requiresUniqueEmail="true"
         passwordFormat="Clear" />
      </providers>
   </membership>
   ...
你清除了所有的Membership Providers,追加一个新的SqlMembershipProvider.注意:为了允许密码可恢复,你需要设置enablePasswordRetrieval为true和passwordFormat为Clear.如果你设置passwordFormat为Hashed,那么你必须将enablePasswordReset设置为false.
将PasswordRecovery控件拖入到Default.aspx,在属性窗体设置MailDefinition下的From和Subject.
此时你需要电脑上设置SMTP service,有了它才可以发送邮件,进入Website --> ASP.NET Configuration的Application,然后选择SMTP e-mail settings.
 
更改密码
用户有时需要改变他们的密码,asp.net2.0提供了ChangePassword控件,用户更改密码后还能直接登录.
在工程中新建一个名为"Members"文件夹,在其中新建一个名为"ChangePassword.aspx"Web Form,在Web.config中给Members目录加上一个访问限制.
  ...
   </system.web>
   <location path="Members">
   <system.web>
   <authorization>
   <deny users="?" />
   </authorization>
   </system.web>
   </location>
   </configuration>
这样已登录的用户可以访问Members目录,而匿名用户则被限制.
将ChangePasswrod控件拖入ChangePasswrod.aspx中,选择ChangePassword.aspx运行测试,你会发现页面转到 login.aspx,因为你还没有登录,填写登录信息进入ChangePassword.aspx,试着更改你的密码.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章