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,試着更改你的密碼.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章