top
Loading...
ASP+安全身份驗證的實現
.NET平臺及其ASP+所提供的強大開發功能是每個程序員所不能忽視的,對某種語言的偏好不該影響選擇最具效率的開發工具。而目前,ASP+確實提供了許多JSP所無法比擬的功能。

使用ASP+,你會真正感到使用語言的自由性,編程時在網頁上可看到編譯ASP+頁中C#等語言時的全部編譯信息,而且使用ASP+提供的數十種功能強大的服務器端控件,幾乎可
以實現以前客戶端RAD開發工具所能實現的全部功能,ASP+可以直接方便地使用.NET中的XML技術,使用幾個簡單的函數就可以用XML替代一些數據庫或和其他程序交換信息。

對于未來,將有越來越多的語言支持ASP+的開發,而富士通美國子公司已經推出了Cobol for .NET,讓Cobol也可以開發ASP+應用程序了。惟一遺憾的是,ASP+目前還不能跑在除Windows系列的其他平臺上,但這正是.NET正在做的事。

基于上述優點,越來越多的Web應用將會使用ASP+方式開發,在具體實現如電子商務等應用時,必須重視各種安全性問題,此問題涉及操作系統、網絡管理及程序安全等眾多方面,限于篇幅,本文將介紹如何用ASP+的配置和程序實現安全身份驗證。

ASP+的相關配置

ASP+的配置方法較特別,它使用config.web這個XML類型的文件來存儲配置信息,你可用notepad或XML編輯器方便地修改其內容,規定的設置方式是子目錄繼承或者覆蓋從父目錄得來的配置設定,就是說在root目錄下放了個config.web文件,那么任何下一級目錄將自動繼承這個文件中的配置,假如某個子目錄需要另外的配置時,我們可再另建一個config.web放在該子目錄下。這種配置管理方式對安裝你的應用程序、配置的修改及安全管理都極為有利。

ASP+提供了三種主要的身份驗證方式即:Windows、Cookie和Passport,Windows是指使用Windows自身的安全管理方式,你可通過設置Windows的用戶及IIS等權限來保障安全,對于一些大應用,使用此方法將非常復雜和煩瑣。Passport方式較為方便和安全,用戶只用一個用戶名和密碼可以訪問任何成員站,并且在注銷離開時,所有Passport相關的信息都會清除,你可以在公共場所放心地使用它,相信Passport比較適合Internet的應用。在企業級應用中,使用Cookie方式和SSL、IP限制等一些網管技術同樣可以實現一定的安全性。

下面介紹一下Cookie的配置:

你需建一個如下內容的config.web,并將它放在C:inetpubwwwroot(IIS缺省目錄)下,對于系統安裝時已經建立的config.web,一般在WINNTMicrosoft.NETFrameworkv...目錄下。

<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>

程序設計

你需在root目錄下建立Default.aspx和login.aspx這兩個ASP+程序。

login.aspx程序內容如下:

<%@ 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;

//連接數據庫,用戶名和密碼放在ODBC連接的數據庫QCDB中的表Users中

ADOConnection cn = new ADOConnection("DSN=QCDB");

cn.Open();

ADOCommand cmdQuestion = new ADOCommand("SELECT Password FROM Usersswheresname = '" + YourName.Text + "'", cn);

//選擇相應用戶信息

cmdQuestion.Execute(out dr);

//建一個datareader得到SQL結果

if(dr.Read()) //得到對應的第一個行數據

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程序內容如下:

<%@ 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身份驗證系統提示你</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>

具體執行時,當一個未經認證的用戶瀏覽你的網站的.aspx文件時(注意,Cookie認證只對.aspx文件起作用),系統發現該用戶沒Cookie,于是將它重定向到login.aspx,當用戶輸入正確的用戶名和密碼后,系統為該用戶生成一個Cookie并立刻自動重定向到一開始該用戶要瀏覽的.aspx文件并執行它,缺省的則定向到Default.aspx,上面提供的Default.aspx則提示你已經通過身份認證。

總結

由于我們使用了Session跟蹤應用程序訪問或會話期間特定的Web瀏覽器信息,帶有相應的cookie的HTTP請求被認為是來自同一Web瀏覽器,所以要防止被人使用Sniffer等方法非法截獲Cookie信息,你需要考慮使用SSL或其他安全的通訊鏈路加密方法。

對于上述程序,你可以方便地在Table中加入用戶IP地址的信息,來驗證Intranet用戶。由于Cookie就像一個身份證,為防止有人非法使用你的Cookie,應該讓Cookie隨著瀏覽器的關閉一起清除。

總之,使用Cookie的身份驗證方法再結合各種加密手段以及操作系統完善的安全配置就可以為大多數需要安全認證的應用提供足夠的支持。

北斗有巢氏 有巢氏北斗