明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET安全身份驗證的完成

[摘要].NET平臺及其ASP+所提供的強大開發(fā)功能是每個程序員所不能忽視的,對某種語言的偏好不該影響選擇最具效率的開發(fā)工具。 而目前,ASP+確實提供了許多JSP所無法比擬的功能。 使用ASP+,你會真正感到使用語言的自由性,編程時在網(wǎng)頁上可看到編譯ASP+頁中C#等語言時的全部編譯信息,而且使用ASP...

.NET平臺及其ASP+所提供的強大開發(fā)功能是每個程序員所不能忽視的,對某種語言的偏好不該影響選擇最具效率的開發(fā)工具。 而目前,ASP+確實提供了許多JSP所無法比擬的功能。 
使用ASP+,你會真正感到使用語言的自由性,編程時在網(wǎng)頁上可看到編譯ASP+頁中C#等語言時的全部編譯信息,而且使用ASP+提供的數(shù)十種功能強大的服務(wù)器端控件,幾乎可以實現(xiàn)以前客戶端RAD開發(fā)工具所能實現(xiàn)的全部功能,ASP+可以直接方便地使用.NET中的XML技術(shù),使用幾個簡單的函數(shù)就可以用XML替代一些數(shù)據(jù)庫或和其他程序交換信息。 
對于未來,將有越來越多的語言支持ASP+的開發(fā),而富士通美國子公司已經(jīng)推出了Cobol for .NET,讓Cobol也可以開發(fā)ASP+應(yīng)用程序了。惟一遺憾的是,ASP+目前還不能跑在除Windows系列的其他平臺上,但這正是.NET正在做的事。 
基于上述優(yōu)點,越來越多的Web應(yīng)用將會使用ASP+方式開發(fā),在具體實現(xiàn)如電子商務(wù)等應(yīng)用時,必須重視各種安全性問題,此問題涉及操作系統(tǒng)、網(wǎng)絡(luò)管理及程序安全等眾多方面,限于篇幅,本文將介紹如何用ASP+的配置和程序?qū)崿F(xiàn)安全身份驗證。 
ASP+的相關(guān)配置 
ASP+的配置方法較特別,它使用config.web這個XML類型的文件來存儲配置信息,你可用notepad或XML編輯器方便地修改其內(nèi)容,規(guī)定的設(shè)置方式是子目錄繼承或者覆蓋從父目錄得來的配置設(shè)定,就是說在root目錄下放了個config.web文件,那么任何下一級目錄將自動繼承這個文件中的配置,假如某個子目錄需要另外的配置時,我們可再另建一個config.web放在該子目錄下。這種配置管理方式對安裝你的應(yīng)用程序、配置的修改及安全管理都極為有利。 
ASP+提供了三種主要的身份驗證方式即:Windows、Cookie和Passport,Windows是指使用Windows自身的安全管理方式,你可通過設(shè)置Windows的用戶及IIS等權(quán)限來保障安全,對于一些大應(yīng)用,使用此方法將非常復(fù)雜和煩瑣。Passport方式較為方便和安全,用戶只用一個用戶名和密碼可以訪問任何成員站,并且在注銷離開時,所有Passport相關(guān)的信息都會清除,你可以在公共場所放心地使用它,相信Passport比較適合Internet的應(yīng)用。在企業(yè)級應(yīng)用中,使用Cookie方式和SSL、IP限制等一些網(wǎng)管技術(shù)同樣可以實現(xiàn)一定的安全性。 
下面介紹一下Cookie的配置: 
你需建一個如下內(nèi)容的config.web,并將它放在C:\inetpub\wwwroot\(IIS缺省目錄)下,對于系統(tǒng)安裝時已經(jīng)建立的config.web,一般在\WINNT\Microsoft.NET\Framework\v...目錄下。 
<configuration>
<security>
<authentication mode="Cookie">
<cookie decryptionkey="autogenerate" loginurl="/login.aspx" cookie=".ASPXAUTH" />
</authentication>
<authorization>
<deny users="?" /> 
</authorization> 
</security> 
</configuration> 
該配置文件聲明用Cookie方式驗證,在你訪問該目錄及其子目錄下的aspx文件時,如果你沒有認證的Cookie,它就會重定向到login.aspx。如果你需要一個不需要身份認證的目錄(可放用戶申請的程序)則可建一個如下的config.web并放在該目錄下: 
<configuration>
<security>
<authorization>
<allow users="*" />
</authorization>
</security> 
</configuration> 



程序設(shè)計 
你需在root目錄下建立Default.aspx和login.aspx這兩個ASP+程序。 
login.aspx程序內(nèi)容如下: 



<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<html>
<head>
<title>Login</title>
<script language="C#" runat=server Debug="true" >
void Login_Click(Object sender, EventArgs e) {
if(Page.IsValid)
{ ADODataReader dr;
// 連接數(shù)據(jù)庫,用戶名和密碼放在ODBC連接的數(shù)據(jù)庫QCDB中的表Users中
ADOConnection cn = new ADOConnection("DSN=QCDB");
cn.Open();
ADOCommand cmdQuestion = new ADOCommand("SELECT Password FROM Users WHERE name = "" + YourName.Text + """, cn); 
//選擇相應(yīng)用戶信息
cmdQuestion.Execute(out dr); 
//建一個datareader得到SQL結(jié)果 
if(dr.Read()) //得到對應(yīng)的第一個行數(shù)據(jù)
 if(dr["Password"].ToString() == Password.Text)
 CookieAuthentication.RedirectFromLoginPage(YourName.Text, AbidingCookie.Checked);
 else//上面語句生成一個Cookie,如用戶選擇AbidingCookie,則永久保存Cookie
 Msg.Text = "密碼錯誤"; 
 else
 Msg.Text = "用戶名不存在";
}
}
</script>
</head><center><body>
<ASP:Label id="Msg" ForeColor="red" Font-Name="Verdana";
Font-Size="18" runat=server />
<form runat=server>
<table><tr><td><ASP:label text="用戶名: " runat=server/></td>
<td><ASP:textbox id="YourName" runat=server /></td>
</tr><tr><td><ASP:label text="密碼:" runat=server/></td>
<td><ASP:textbox id="Password" TextMode="Password" runat=server /></td>
<td><ASP:button id="btnLogin" Text="確定" OnClick="Login_Click" runat=Server /></td>
<td> </td></tr><tr><td>希望下次不用輸入密碼</td>
<td><ASP:CheckBox id=AbidingCookie runat="server" /> </td>
<td></td></tr></td><td></td></tr></table>
</form></td> <td width="283" height="1" bgcolor="#F0F0F0"></td>
</tr></table></center></div><p></p></body>
</html> 
Default.aspx程序內(nèi)容如下: 
<%@ Page LANGUAGE="c#" %>
<html><head><title>歡迎來到.NET的世界</title>
<script runat=server>
private void Page_Load(Object Src, EventArgs E ) 
{ Welcome.InnerHtml = "祝賀你通過身份驗證" + Context.User.Identity.Name;
} private void Signout_Click(Object sender, EventArgs E) 
{ CookieAuthentication.SignOut(); 
//按下SignOut按鍵清除原Cookie
Response.Redirect("login.aspx");
//讓用戶重輸入新用戶名、密碼
}
</script><body><center>
<h3><font face="Verdana">.NET身份驗證系統(tǒng)提示你</font></h3>
<span id="Welcome" runat=server/><form runat=server>
<input type="submit" OnServerClick= "Signout_Click" Value="取消該登錄身份" runat="server"/><p> 
</form><p><a href="/adduser/">進入管理室</a></p></center></body></html> 
具體執(zhí)行時,當一個未經(jīng)認證的用戶瀏覽你的網(wǎng)站的.aspx文件時(注意,Cookie認證只對.aspx文件起作用),系統(tǒng)發(fā)現(xiàn)該用戶沒Cookie,于是將它重定向到login.aspx,當用戶輸入正確的用戶名和密碼后,系統(tǒng)為該用戶生成一個Cookie并立刻自動重定向到一開始該用戶要瀏覽的.aspx文件并執(zhí)行它,缺省的則定向到Default.aspx,上面提供的Default.aspx則提示你已經(jīng)通過身份認證。 
總結(jié)
由于我們使用了Session跟蹤應(yīng)用程序訪問或會話期間特定的Web瀏覽器信息,帶有相應(yīng)的 cookie 的HTTP請求被認為是來自同一Web瀏覽器,所以要防止被人使用Sniffer等方法非法截獲Cookie信息,你需要考慮使用SSL或其他安全的通訊鏈路加密方法。 
對于上述程序,你可以方便地在Table中加入用戶IP地址的信息,來驗證Intranet用戶。由于Cookie就像一個身份證,為防止有人非法使用你的Cookie,應(yīng)該讓Cookie隨著瀏覽器的關(guān)閉一起清除。 
總之,使用Cookie的身份驗證方法再結(jié)合各種加密手段以及操作系統(tǒng)完善的安全配置就可以為大多數(shù)需要安全認證的應(yīng)用提供足夠的支持。