淺析ASP.NET驗證方式

 在用ASP.NET建立的頁面應用程序中,對於安全性的處理很關鍵,其中包括用戶的登錄控制以及對於不同用戶實施的不同訪問權限的控制。
  ASP.NET本身也提供了不少的身份驗證供開發者使用,其中包括基於windows的身份驗證和基於窗體的身份驗證。以下簡單介紹一下這兩種方式:
1.基於windows的身份驗證
  此種方式的身份驗證在ASP.NET應用程序所在的windows服務器和客戶機之間進行處理。該請求直接發送給IIS來進行驗證。在此種驗證方式中,需要在ASP.NET程序的根目錄下的WEB.CONFIG文件中添加如下內容:
<System.web>
<authentication mode =”Windows”/>
<authorization>
<allow users=”DomainNameUserName1”>
<deny users=”*”>
</authorization>
</System.web>
  這段代碼設定身份驗證模式爲windows,除UserName1之外,其他的用戶都不能登錄到系統中。<allow users=”DomainNameUserName”>指定了允許進入系統的用戶,若允許多個用戶同時進入系統,則在用戶名之間用逗號隔開即可,當然也可以設定允許特定的用戶組裏的用戶,此時需要將 <allow users=”DomainNameUserName”>修改爲<allow roles=”GroupName”>,若要同時指定幾個用戶組的話,那麼同樣在組名之間加上逗號即可。這樣GroupName1和GroupName2裏面的所有用戶均有權限登錄到系統。所有的用戶和組都是在Windows的計算機管理裏面添加的。 總結大全 http://www.lw54.com/html/zongjie/ 
2.基於窗體的身份驗證
  使用此種身份驗證的話,可以將登錄窗口直接放在ASP.NET應用程序中,用戶需要登錄到系統中時,只需要直接在登錄頁面上輸入用戶名和密碼即可。這種身份驗證有一個缺點,就是在登錄時,用戶的電腦上和ASP.NET應用程序之間的用戶名和密碼都是作爲明文傳送的,有機會被第三者截取到。此時需要和SSL聯合起來使用。
  採用基於窗體的身份驗證時,需要在web.config裏面添加如下的代碼:
<system.web>
<authentication mode=”Forms>
<forms name=”Test” loginUrl=”Login.aspx” path=”/”>
</authentication>
<authorization>
<deny users =”?” />
</authorization>
</system.web>
  此段代碼制定了身份驗證的類型是基於窗體的身份驗證,登錄頁面爲Login.aspx。path指定了保存cookie的位置。
  基於窗體的身份驗證的方式中,還可以將用戶的用戶名和密碼存儲在web.config文件中。這些值存儲在<form>元素中的子元素<credentials>中:
<credentials passwordFormat=”Clear”>
<user name=”test” password=”test”>
</credentials>

論文網 http://www.lw54.com

  以上代碼在web.config文件中添加了用戶名爲test,密碼爲test的一個用戶,其中<credentials passwordFormat=”Clear”>表示密碼存儲爲明文,用戶的密碼直接可以與裏面的password值進行比較。Clear還可以用MD5和SHA1代替。採用MD5方式加密,
  MD5表示密碼使用MD5散列摘要進行存儲,在驗證帳號時,用戶密碼需要先使用MD5算法進行散列,然後再與這個值進行比較。使用MD5,密碼的安全性比Clear好。安全性最好的是SHA1,但性能比MD5稍差。
  在後臺需要以下代碼以調用web.config中的用戶名密碼:

畢業論文網 http://www.lw54.com

If (FormsAuthentication.Authenticate (TextBox1.Text, TextBox2.Text))
{
FormsAuthentiation.RedirectFromLoginPage (TextBox1.Text, true);
}
Else
{
Response.Write (“Invide credentials”);
}
  以上的例子中,Button1爲驗證按鈕,TextBox1爲用戶名輸入框,TextBox2爲密碼輸入框。FormsAuthentication.Authenticate方法將用戶輸入的用戶名和密碼與存儲在web.config文件中的用戶名和密碼進行驗證,如果驗證通過了,就調用FormsAuthentiation.RedirectFromLoginPage方法,這個方法的第一個參數是用戶名,用於進行cookie驗證。這個參數不會映射爲賬戶名稱,而是由ASP.NET的URL授權功能使用。第二個參數指定是否生成一個永久的cookie,如果是true,終端用戶從一個瀏覽器會話到下一個會話時,就不需要再次登錄。
  這種驗證方式也可以使用存儲在SQL Server中的用戶名密碼來進行驗證,後臺代碼如下:
string getUser = "select uName,psw from users where uName=@uname and psw=@psw";
SqlConnection myConnection= new SqlConnection(“Data Source=localhost;Initial Catalog=New_Job;Persist Security Info=True;User ID=test;Password=test"); 簡歷大全 http://www.lw54.com/html/jianli/ 
SqlCommand myCommand = new SqlCommand(getUser, myConnection);
myCommand.Parameters.Add(new SqlParameter("@uname", TextBox1.Text));
myCommand.Parameters.Add(new SqlParameter("@psw", md5_encry( TextBox2.Text)));
myConnection.Open();
SqlDataReader sd= myCommand.ExecuteReader();
if (sd.Read())
{
FormsAuthentiation.RedirectFromLoginPage (TextBox1.Text, true);
}
else 
{
Response.Write(“Invalid credentials”)
}
myConnection.Close();
參考文獻:
[1] 《ASP.NET 3.5高級編程》清華大學出版社,楊浩譯,作者:Bill Evjen;Scott Hanselman;Devin Rader
[2] 《C#高級編程》 清華大學出版社 Christian Nagel, Bill Evjen, Jay Glynn等著, 李銘譯


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章