自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET安全認(rèn)證機制基于角色窗體的實現(xiàn)

開發(fā) 后端
本文試圖通過一些例子來說明如何實現(xiàn)基于角色窗體的ASP.NET安全認(rèn)證機制,展示ASP.NET中窗體認(rèn)證強大的功能特性。

簡介:

ASP.NET 中窗體認(rèn)證是一個功能非常強大的特性,只需要很少的代碼就可以實現(xiàn)一個簡單的平臺無關(guān)的ASP.NET安全認(rèn)證機制。 但是,如果你需要一個更復(fù)雜更有效的認(rèn)證機制,那么你就要把眾多用戶分成用戶群組,以利用它的靈活性。

Windows 集成認(rèn)證提供了這種認(rèn)證機制,但它使用的是 NTLM,即Windows NT LAN Manager,因而它不是跨平臺的。現(xiàn)在越來越多的人使用 Linux 系統(tǒng),而 Mozilla Forefox 瀏覽器用戶也越來越多,我們肯定不能把這些人拒之門外,因此我們尋求另外的ASP.NET安全認(rèn)證機制。有兩個選擇:

一是為網(wǎng)站劃分多個區(qū)域,提供多個登錄頁面,強迫用戶一個一個的去注冊和登錄;

二是把用戶分組,并且限制特定用戶組對某頁面或者某區(qū)域訪問的權(quán)限。

后者當(dāng)然是更好的選擇。通過分配角色給各個用戶,我們能夠?qū)崿F(xiàn)這種功能。

微軟為.NET平臺留下了窗體認(rèn)證中基于角色的認(rèn)證機制,但是我們必須自己去實現(xiàn)它。本文力求覆蓋窗體認(rèn)證中基于角色的認(rèn)證機制的一些基本的東西,比如它的概念,它的實現(xiàn),如何在Web應(yīng)用程序中應(yīng)用等。

必要準(zhǔn)備:

我們首先要建立一個數(shù)據(jù)庫,一個Web應(yīng)用項目,幾個不同安全級別的機密目錄,以及幾個ASP.NET頁面。當(dāng)然你也可以在你現(xiàn)有的Web應(yīng)用項目中添加這些。

1、創(chuàng)建數(shù)據(jù)庫

首先要選擇你需要使用的數(shù)據(jù)庫管理系統(tǒng) DBMS。本文使用 SQL Server 2000。

在實際應(yīng)用項目的數(shù)據(jù)庫中,一般都會有用戶數(shù)據(jù)表 Users,它可能包括用戶唯一標(biāo)記:UserID,用戶名:UserName,密碼:Password,用戶的郵件地址:Email,用戶所在城市:City,用戶登錄次數(shù) LoginCount 等??梢酝ㄟ^創(chuàng)建一個 UserInRoles 數(shù)據(jù)表(一般可以包括兩個字段,用戶名:UserName,用戶角色:UserRoles)來實現(xiàn)為用戶分配角色。

為了簡單,我只創(chuàng)建一個 Users 數(shù)據(jù)表,它有3個字段,用戶名 UserName,密碼 Password,用戶角色 UserRoles。創(chuàng)建表之前,你要選擇數(shù)據(jù)庫,或者創(chuàng)建一個新的數(shù)據(jù)庫。要創(chuàng)建一個新的命名為WebSolution的數(shù)據(jù)庫 ,只需要簡單的SQL語句:

  1. Create DATABASE WebSolution  
  2. GO   
  3. 要選擇一個叫msdb的數(shù)據(jù)庫,可以使用SQL語句:   
  4. USE msdb  
  5. GO   
  6. 接下來,我們創(chuàng)建剛才提到的 Users 數(shù)據(jù)表,  
  7. SQL 腳本如下:  
  8. Create TABLE Users  
  9. (  
  10. UserName nvarchar(100) CONSTRAINT   
  11. PK_UserName PRIMARY KEY,  
  12. Password nvarchar(150),  
  13. UserRoles nvarchar(100)  
  14. )   
  15. 可以為這個表創(chuàng)建索引 Credentials,SQL語句如下:  
  16. Create INDEX Credentials ON Users  
  17. (  
  18. UserName,  
  19. Password 
  20. )   

是否創(chuàng)建索引是可選的,由你自己決定。索引的好處和壞處請參考相關(guān)資料。

然后我們?yōu)檫@個Users數(shù)據(jù)庫添加數(shù)據(jù)。角色名稱由你自己自由選擇,但是最好用有意義的名稱,

比如"Administrator"(頂級管理員),"Manager"(管理員),"Member"(加盟成員),"User"(普通用戶)等。

例如:

  1. UserName|Password|Roles  
  2. "willmove"|"pwd123"|"Administrator,User" 
  3. "amuhouse"|"pwd123"|"User"   
  4. 其SQL語句是:   
  5. --注意 '45CB41B32DCFB917CCD8614F1536D6DA'   
  6. 是 'pwd123' 使用 md5 加密后的字符串   
  7. Insert INTO Users(UserName,Password,UserRoles)   
  8. VALUES ('willmove','45CB41B32DCFB917CCD8614F1536D6DA' 
  9. ,'Administrator,User')  
  10. GO  
  11. Insert INTO Users(UserName,Password,UserRoles)   
  12. VALUES ('amuhouse','45CB41B32DCFB917CCD8614F1536D6DA' 
  13. ,'User')  
  14. GO   

要注意的是角色 Roles 是大小寫敏感的,這是因為在 Web.config 文件中是大小寫敏感的?,F(xiàn)在我們?yōu)閷崿F(xiàn)這個安全認(rèn)證機制創(chuàng)建幾個必要的頁面。

首先是用戶登錄頁面 Login.aspx

如果還沒有創(chuàng)建Web應(yīng)用程序,那就現(xiàn)在創(chuàng)建一個。當(dāng)然你也可以在一個已有的Web應(yīng)用程序中創(chuàng)建這個頁面。這里我假設(shè)已經(jīng)創(chuàng)建了一個名稱為 RolebasedAuth的Web應(yīng)用程序(即 Visual Studio .Net 中的Project)。我把這個Login.aspx放在它的根目錄下,也就是通過 http://localhost/RolebasedAuth/Login.aspx 可以訪問。這個Login.aspx放在哪里是無所謂的,但是在ASP.NET安全認(rèn)證機制中它必須是公眾有權(quán)限訪問的。

  #p# 

在應(yīng)用程序根路徑下,我們創(chuàng)建兩個機密的子目錄,分別是 Admin 和 User。

接下來,我們創(chuàng)建一個支持角色認(rèn)證的窗體的基于ASP.NET安全認(rèn)證機制的登錄系統(tǒng)。因為微軟沒有提供簡單的實現(xiàn)機制,我們要自己花些時間去創(chuàng)建認(rèn)證票據(jù)。它需要存貯少量信息,當(dāng)然,有些名稱必須和 Web.config 中配置的一樣,要不ASP.NET 就會認(rèn)為你的認(rèn)證票據(jù)是無效的,從而強制轉(zhuǎn)向到登錄頁面。我們在 VS.NET 中為 Login.aspx 添加兩個TextBox控件,取名 UserNameTextBox, PasswordTextBox,再添加一個Button,取名 LoginButton,點擊它進(jìn)入后臺代碼。

在 LoginButton_Click 方法中添加需要的代碼。如下:

  1. private void LoginButton_Click  
  2. (object sender, System.EventArgs e)  
  3.  
  4. {  
  5. // 初始化   
  6. FormsAuthentication  
  7. // 注意它是在   
  8. System.Web.Security 命名空間  
  9. // 因此要在代碼開始添加   
  10. using System.Web.Security;  
  11. FormsAuthentication.Initialize ();   
  12.  
  13. // 創(chuàng)建數(shù)據(jù)庫連接和數(shù)據(jù)庫操作命令對象  
  14. // 注意它是在   
  15. System.Data.SqlClient 命名空間  
  16. // 因此要在代碼開始處添加   
  17. using System.Data.SqlClient;  
  18. SqlConnection conn =  
  19. new SqlConnection("Data   
  20. Source=sun-willmove;integrated   
  21. security=SSPI;  
  22. Initial Catalog=WebSolution;");   
  23. SqlCommand cmd = conn.CreateCommand();  
  24. cmd.CommandText = "Select UserRoles   
  25. FROM Users Where UserName=@username " +  
  26. "AND Password=@password";  
  27. // 填充各個參數(shù)   
  28. cmd.Parameters.Add("@username",   
  29. SqlDbType.NVarChar, 100).Value =  
  30. UserNameTextBox.Text;  
  31. cmd.Parameters.Add("@password",   
  32. SqlDbType.NVarChar, 150).Value =   
  33. FormsAuthentication.  
  34. HashPasswordForStoringInConfigFile(  
  35. PasswordTextBox.Text, "md5");  
  36.  // 或者 "sha1" 
  37.  
  38. // 執(zhí)行數(shù)據(jù)庫操作命令  
  39. conn.Open();  
  40. SqlDataReader reader = cmd.ExecuteReader();  
  41. if (reader.Read())  
  42. {  
  43. // 為了實現(xiàn)認(rèn)證,創(chuàng)建一個新的票據(jù)  
  44. FormsAuthenticationTicket ticket = new   
  45. FormsAuthenticationTicket(   
  46. 1, // 票據(jù)版本號  
  47. UserNameTextBox.Text, // 票據(jù)持有者  
  48. DateTime.Now, //分配票據(jù)的時間  
  49. DateTime.Now.AddMinutes(30), // 失效時間  
  50. true, // 需要用戶的 cookie   
  51. reader.GetString(0), // 用戶數(shù)據(jù),  
  52. 這里其實就是用戶的角色  
  53. FormsAuthentication.FormsCookiePath);  
  54. //cookie有效路徑   
  55.  
  56. //使用機器碼machine key加密cookie,  
  57. 為了安全傳送  
  58. string hash = FormsAuthentication.  
  59. Encrypt(ticket);  
  60. HttpCookie cookie = new HttpCookie(  
  61. FormsAuthentication.FormsCookieName,   
  62. // 認(rèn)證cookie的名稱  
  63. hash); //加密之后的cookie   
  64.  
  65. //將cookie的失效時間設(shè)置為和  
  66. 票據(jù)tikets的失效時間一致   
  67. if (ticket.IsPersistent) cookie.  
  68. Expires = ticket.Expiration;   
  69.  
  70. //添加cookie到頁面請求響應(yīng)中  
  71. Response.Cookies.Add(cookie);   
  72.  
  73. // 將用戶轉(zhuǎn)向到之前請求的頁面,  
  74. // 如果之前沒有請求任何頁面,就轉(zhuǎn)向到首頁   
  75. string returnUrl = Request.QueryString  
  76. ["ReturnUrl"];  
  77. if (returnUrl == null) returnUrl = "./";   
  78.  
  79. // 不要調(diào)用 FormsAuthentication.  
  80. RedirectFromLoginPage 方法,  
  81. // 因為它會把剛才添加的票據(jù)(cookie)替換掉  
  82. Response.Redirect(returnUrl);  
  83. }  
  84. else 
  85. {  
  86. // 不要告訴用戶"密碼錯誤",  
  87. 這樣等于給了入侵者一個機會,  
  88. // 因為他們知道了他們輸入的用戶名是存在的   
  89. //   
  90. ErrorLabel.Text = "用戶名或者密碼錯誤,請重試!";  
  91. ErrorLabel.Visible = true;  
  92. }   
  93. reader.Close();  
  94. conn.Close();  
  95. }   
  96.  
  97. 前臺 aspx 頁面代碼如下:   
  98. 〈 %@ Page language="c#" Codebehind="Login.aspx.cs"   
  99. AutoEventWireup="false"   
  100. Inherits="RolebasedAuth.Login" %〉  
  101. 〈 !DOCTYPE HTML PUBLIC "-//W3C  
  102. //DTD HTML 4.0 Transitional//EN" 〉  
  103. 〈 HTML〉  
  104. 〈 HEAD〉  
  105. 〈 title〉Login〈 /title〉  
  106. 〈 meta name="GENERATOR" Content="Microsoft   
  107. Visual Studio .NET 7.1"〉  
  108. 〈 meta name="CODE_LANGUAGE" Content="C#"〉   
  109. 〈 meta name="vs_defaultClientScript"   
  110. content="JavaScript"〉  
  111. 〈 meta name="vs_targetSchema"   
  112. content="http://schemas.microsoft.com/  
  113. intellisense/ie5 "〉  
  114. 〈 /HEAD〉  
  115. 〈 body〉  
  116. 〈 form id="Form1" method="post" runat="server"〉  
  117. 〈 P〉  
  118. 〈 asp:Label id="Label1" runat="server"〉  
  119. 用戶名:〈 /asp:Label〉   
  120. 〈 asp:TextBox id="UserNameTextBox" runat="server"〉  
  121. 〈 /asp:TextBox〉〈 /P〉  
  122. 〈 P〉〈 FONT face="宋體"〉 〈 /FONT〉  
  123. 〈 asp:Label id="Label2" runat="server"〉  
  124. 密碼:〈 /asp:Label〉   
  125. 〈 asp:TextBox id="PasswordTextBox" runat="server"   
  126. TextMode="Password"〉〈 /asp:TextBox〉〈 /P〉   
  127. 〈 P〉  
  128. 〈 asp:Label id="ErrorLabel" runat="server"   
  129. Visible="False"〉  
  130. 〈 /asp:Label〉〈 /P〉   
  131. 〈 P〉  
  132. 〈 asp:Button id="LoginButton" runat="server"   
  133. Text="登錄"〉  
  134. 〈 /asp:Button〉〈 /P〉  
  135. 〈 /form〉  
  136. 〈 /body〉  
  137. 〈 /HTML〉   

 #p#

你會注意到上面我們對密碼的處理:將它哈希加密。哈希加密是一種單向算法(不可逆算法),生成唯一的字符數(shù)組。因此即使是改變密碼中一個字母的大小寫,都會生成完全不同的哈希列。我們把這些加密的密碼存儲在數(shù)據(jù)庫中,這樣更安全。在實際應(yīng)用中,你可能想為用戶找回忘記的密碼。但是哈希散列是不可逆的,所以你就不可能恢復(fù)原來的密碼。但是你可以更改用戶的密碼,并且把這個更改后的密碼告訴他。如果一個網(wǎng)站能夠給你舊密碼,那么你要考慮清楚了,你的用戶數(shù)據(jù)是不安全的!事實上,國內(nèi)大部分網(wǎng)站都是沒有經(jīng)過加密直接把用戶的密碼存儲到數(shù)據(jù)庫中的。如何一個黑客入侵成功,那么這些用戶帳戶就很危險了!

如果沒有使用SSL,你的密碼在網(wǎng)絡(luò)中也是以明文傳輸?shù)?。傳輸過程中可能會被竊取。在服務(wù)器端加密密碼只能保證密碼存儲的安全。SSL相關(guān)的資料可以在 http://www.versign.com或 http://www.thewte.com 中找到。

如果你不想以加密方式在數(shù)據(jù)庫中存儲密碼,你可以更改上面的代碼,把

  1. FormsAuthentication.HashPasswordForStoringInConfigFile  
  2. (PasswordTextBox.Text, "md5") 改成  
  3.  PasswordTextBox.Text 即可。  

下一步,我們需要修改 Global.asax 文件。如果你的Web應(yīng)用程序沒有這個文件,請右鍵單擊Web應(yīng)用項目,選擇 "添加->添加新項...->Global Application Class"。在 Global.asax 或者 Global.asax.cs 中,找到叫做 Application_AuthenticationRequest 的方法(函數(shù))。先要確認(rèn)已經(jīng)包含或者使用了 System.Security.Principal 以及 System.Web.Security 命名空間,然后修改它,修改后的代碼:

  1. protected void Application_AuthenticateRequest  
  2. (Object sender, EventArgs e)   
  3. {  
  4. if (HttpContext.Current.User != null)  
  5. {  
  6. if (HttpContext.Current.User.Identity.  
  7. IsAuthenticated)  
  8. {  
  9. if (HttpContext.Current.User.Identity   
  10. is FormsIdentity)  
  11. {  
  12. FormsIdentity id =  
  13. (FormsIdentity)HttpContext.Current.User.Identity;  
  14. FormsAuthenticationTicket ticket = id.Ticket;   
  15.  
  16. // 取存儲在票據(jù)中的用戶數(shù)據(jù),  
  17. 在這里其實就是用戶的角色  
  18. string userData = ticket.UserData;  
  19. string[] roles = userData.Split(',');  
  20. HttpContext.Current.User = new   
  21. GenericPrincipal(id, roles);  
  22. }  
  23. }  
  24. }   
  25. }  

認(rèn)證票據(jù)(用戶名和密碼)是沒有作為cookie的一部分來存儲的,而且也不可以,因為用戶可以修改他們的cookie。

事實上,F(xiàn)ormsAuthentication是用你的機器碼 (machine key,通常在 machine.config 中)來加密票據(jù)(FormsAuthenticationTicket)的。我們使用 UserData 存儲用戶角色,并且生成一個新的憑證。一旦憑證已經(jīng)創(chuàng)建,它會被添加到當(dāng)前上下文中(即 HttpContext),這樣就可以用它來取回用戶角色了。

接下來,我們設(shè)置機密目錄(也就是"安全目錄",特定的使用者如管理員才有權(quán)限訪問的目錄)。首先看看你的Web應(yīng)用程序根目錄下是否有 Web.config 這個文件,如果沒有就創(chuàng)建一個。你也可以在你的子目錄中創(chuàng)建 Web.config 文件,當(dāng)然,這個 Web.config 文件是有限制的(一些參數(shù)它不可以設(shè)置)。要實現(xiàn)安全認(rèn)證,在 Web應(yīng)用程序根目錄下的 Web.config 文件中找到 〈system.web〉 節(jié)點下的

  1. 〈authentication mode="Windows" /〉,  
  2. 把它修改為   
  3. 〈authentication mode="Forms" 〉  
  4. 〈forms name="AMUHOUSE.ASPXAUTH" 
  5. loginUrl="Login.aspx" 
  6. protection="All" 
  7. path="./" /〉  
  8. 〈/authentication〉  
  9. authorization〉  
  10. 〈allow users="*"/〉  
  11. 〈/authorization 〉  

上面的 name="AMUHOUSE.ASPXAUTH" 中,AMUHOUSE.ASPXAUTH 這個名稱是任意的。要控制用戶或者用戶組的權(quán)限,我們可以有兩種方法,一是配置在應(yīng)用程序根目錄下的 Web.config 文件,二是在機密目錄下創(chuàng)建一個獨立的 Web.config 文件。(后者也許會比較好。)如果是前者,這個Web.config 就應(yīng)該包含有下面的內(nèi)容(或者類似的內(nèi)容):

  1. 〈configuration 〉  
  2. 〈system.web 〉  
  3. 〈authentication mode="Forms" 〉  
  4. 〈forms name=" AMUHOUSE.ASPXAUTH" 
  5. loginUrl="login.aspx" 
  6. protection="All" 
  7. path="/"/ 〉  
  8. 〈/authentication 〉  
  9. authorization 〉   
  10. 〈allow users="*"/ 〉  
  11. 〈/authorization 〉  
  12. 〈/system.web 〉  
  13. 〈location path="./Admin" 〉  
  14. 〈system.web 〉  
  15. authorization 〉   
  16. 〈!-- 注意!下面幾行的順序和大小寫是非常重要的! -- 〉  
  17. 〈allow roles="Administrator"/ 〉  
  18. 〈deny users="*"/ 〉  
  19. 〈/authorization 〉  
  20. 〈/system.web 〉   
  21. 〈/location 〉  
  22. 〈location path="./User" 〉  
  23. 〈system.web 〉  
  24. authorization 〉  
  25. 〈!-- 注意!下面幾行的順序和大小寫是非常重要的! -- 〉  
  26. 〈allow roles="User"/ 〉   
  27. 〈deny users="*"/ 〉  
  28. 〈/authorization 〉  
  29. 〈/system.web 〉  
  30. 〈/location 〉  
  31. 〈/configuration 〉  

為了使Web應(yīng)用程序的目錄之前不互相依賴,可以比較方便的改名或者移動,可以選擇在每一個安全子目錄下配置單獨的 Web.config 文件。它只需要配置 〈authorization/〉節(jié)點,如下:

  1. 〈 configuration 〉  
  2. 〈 system.web 〉  
  3. 〈 authorization 〉  
  4. 〈 !-- 注意!下面幾行的順序和大小寫是非常重要的! -- 〉  
  5. 〈 allow roles="Administrator"/ 〉   
  6. 〈 deny users="*"/ 〉  
  7. 〈 /authorization 〉  
  8. 〈 /system.web 〉  
  9. 〈 /configuration 〉 

需要再次提醒的是,上面的角色 roles 是大小寫敏感的,為了方便,你也可以把上面修改為:

  1. 〈 allow roles="Administrator,administrator" /〉 

如果你想允許或者禁止多個角色對這個目錄的訪問,可以用逗號隔開,如:

  1. 〈 allow roles="Administrator,Member,User" /〉  
  2. 〈 deny users="*" /〉  

至此,我們已經(jīng)為網(wǎng)站配置了基于角色的ASP.NET安全認(rèn)證機制了。

你可以先編譯你的程序,然后嘗試訪問一個機密目錄,例如 http://localhost/RolebasedAuth/Admin,這時候你就會被轉(zhuǎn)向到用戶登錄頁面。如果你登錄成功,并且你的角色對這個目錄有訪問權(quán)限,你就重新回到這個目錄下??赡軙杏脩簦ɑ蛉肭终撸┢髨D進(jìn)入機密目錄,我們可以使用一個 Session 來存儲用戶登錄的次數(shù),超過一定次數(shù)就不讓用戶登錄,并且顯示"系統(tǒng)拒絕了你的登錄請求!"。

下面,我們討論如何根據(jù)用戶角色讓W(xué)eb控件顯示不同內(nèi)容。

有時候根據(jù)用戶的角色來顯示內(nèi)容比較好,因為你可能不想為那么多不同的角色(用戶群組)制作一大堆有許多重復(fù)內(nèi)容的頁面。這樣的網(wǎng)站,各種用戶帳戶可以并存,付費的用戶帳戶能夠訪問附加的付費內(nèi)容。另一個例子是一個頁面將顯示一個 "進(jìn)入后臺管理" 按鈕鏈接到后臺管理頁面如果當(dāng)前用戶是 "Administrator"(高級管理員)角色。我們現(xiàn)在就實現(xiàn)這個頁面。

 #p#

我們上面用到的 GenericPrincipal 類實現(xiàn)了 IPincipal 接口,這個接口有一個方法名叫做 IsInRole(),它的參數(shù)是一個字符串,這個字符串就是要驗證的用戶角色。如果我們要顯示內(nèi)容給角色是 "Administrator"的已登錄用戶,我們可以在 Page_Load 中添加下面代碼: 程序代碼

  1. if (User.IsInRole("Administrator"))  
  2. AdminLink.Visible = true;   
  3. 整個的頁面代碼如下  
  4. (為了簡便,把后臺代碼也寫在aspx頁面): 程序代碼   
  5. 〈html 〉  
  6. 〈head 〉  
  7. 〈title 〉歡迎您!〈/title 〉  
  8. 〈script runat="server" 〉   
  9. protected void Page_Load(Object sender,   
  10. EventArgs e)  
  11. {  
  12. if (User.IsInRole("Administrator"))  
  13. AdminLink.Visible = true;  
  14. else 
  15. AdminLink.Visible = false;  
  16. }  
  17. 〈/script 〉   
  18. 〈/head 〉  
  19. 〈body 〉  
  20. 〈h2 〉歡迎!〈/h2 〉  
  21. 〈p 〉歡迎來到阿木小屋   
  22. http://amuhouse.com/ ^_^〈/p 〉  
  23. 〈asp:HyperLink id="AdminLink" runat="server"   
  24. Text="管理首頁" NavigateUrl="./Admin"/ 〉  
  25. 〈/body 〉  
  26. 〈/html 〉   

樣,鏈接到 Admin 目錄的HyperLink 控件只會顯示給角色是 Administrator 的用戶。你也可以根據(jù)為未登錄用戶提供一個鏈接到登錄頁面,如:程序代碼

  1. protected void Page_Load  
  2. (object sender, System.EventArgs e)  
  3. {   
  4. if (User.IsInRole("Administrator"))  
  5. {  
  6. AdminLink.Text = "管理員請進(jìn)";  
  7. AdminLink.NavigateUrl="./Admin";   
  8. }  
  9. else if(User.IsInRole("User"))  
  10. {  
  11. AdminLink.Text = "注冊用戶請進(jìn)";  
  12. AdminLink.NavigateUrl="./User";   
  13. }   
  14. else   
  15. {  
  16. AdminLink.Text = "請登錄";  
  17. AdminLink.NavigateUrl="Login.aspx?  
  18. ReturnUrl=" + Request.Path;  
  19. }   
  20. }   

這里,我們通過設(shè)置叫做ReturnUrl的 QueryString 變量,可以使用戶登錄成功后返回到當(dāng)前的這個頁面.

小結(jié):

本文用于幫助你理解基于角色安全機制的重要性、實用性,并且也通過ASP.NET安全認(rèn)證機制實現(xiàn)了基于角色的安全控制。它并不是一個很難實現(xiàn)的機制,不過它可能需要一些相關(guān)知識如 什么是用戶憑證,如何認(rèn)證用戶身份,以及如何審定授權(quán)用戶。如果你覺得它很有幫助,我會非常高興。我希望它可以引導(dǎo)你在你的網(wǎng)站中去實現(xiàn)基于角色的窗體安全認(rèn)證機制。

【編輯推薦】

  1. ASP.NET環(huán)境下的Shell函數(shù)
  2. 在ASP.NET中向數(shù)據(jù)庫批量插入數(shù)據(jù)
  3. ASP.NET用Post方式向網(wǎng)頁發(fā)送數(shù)據(jù)
  4. ASP.NET 2.0部署WEB應(yīng)用程序淺析
  5. ASP.NET中的HttpWorkerRequest對像
  6. 介紹ASP.NET MVC框架
責(zé)任編輯:冰荷 來源: it55
相關(guān)推薦

2009-07-29 10:56:54

ASP.NET構(gòu)架與安

2009-07-23 16:59:31

ASP.NET認(rèn)證Form表單

2009-12-21 10:05:10

ASP.NET MVC

2009-07-27 13:39:06

Web窗體頁ASP.NET

2009-07-29 13:04:59

2009-08-04 15:22:33

ASP.NET緩存機制

2012-04-16 09:54:26

2009-08-17 16:59:36

ASP.NET緩存機制

2009-08-03 18:35:51

ASP.NET數(shù)據(jù)緩存

2012-05-07 14:50:32

ASP.NET

2009-06-12 09:24:34

ASP.NET窗體ASP.NET MVC

2009-06-19 16:20:14

ASP.NET錯誤處理

2009-04-08 09:58:07

ASP.NET MVCTempData框架

2009-07-20 15:44:32

ASP.NET MVC

2009-07-22 17:45:11

ASP.NET插件

2009-12-07 09:23:05

ASP.NET MVC

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-23 17:05:11

ASP.NET安全性

2009-07-20 15:57:42

ASP.NET安全架構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號