移植方法的選擇
將站點移植到Visual Basic .NET和.Net框架的第一步是看看有哪些方法可供選擇。現在有三種方法可以使用:
· 將站點和Visual Basic 6.0的組件移植到ASP .NET和Visual Basic .Net
· 將站點移植到ASP .Net,再用COM+ interOperability與現存的Visual Basic 6.0組件通訊
· 不改變現存的站點,而通過增加用ASP .NET和Visual Basic .Net寫的新的功能模塊來擴展站點的功能
在開始開發之前,開發小組確定了利用.Net的哪些功能模塊來替代網站中復雜的,且有時會有問題的代碼,並增加一些新的功能。具體的講,他們希望按下面的要求重建網站:
· 用ASP .Net認證來替代原來的用戶安全機制
· 用ASP .Net Web Form確認控件來替代客戶端用於報告產品漏洞和描述缺點的確認邏輯
· 用ASP .Net Web Services將Microsoft其它的網站溶入beta版產品漏洞報告體系中
· 利用.Net框架的本地化功能建造一個可以很容易實現本地化的Web站點
· 利用ASP .Net向用戶提供個性化的菜單和橫幅圖片
為了充分利用這些特點,開發組決定將ASP頁面移植成ASP .NET頁面。他們將不移植現存的Visual Basic 6.0的ActiveX組件,而是創建新的Visual Basic .Net組件來實現Web Service和本地化。
現在讓我們看看為了完成移植,對這個網站到底做了哪些修改。
結合ASP .Net認證功能
移植的第一步就是用ASP .NET中基於cookIE的認證機制來替換原來的客戶安全機制。這種安全認證機制首先出現在PDC技術預覽中,並在Visual Studio .Net Beta 1中得到了發展。它的目標是確定誰在訪問網站,而不是阻止用戶訪問。因此,開發組修改了成員資格系統,幫助用戶注冊到Web站點,並且在以後的Beta版產品中可以繼續使用。
識別每個訪問者的目的是跟蹤他們報告的漏洞和缺點,並與他們進行必要的交流,以徹底解決問題。除了把用戶的反饋送到特定的測試站點,用戶還可以定制這個站點,以滿足自己的需要,幫助客戶將注意力集中在他們需要的信息上。把用戶和他們感興趣的內容聯系起來能幫助站點管理員了解用戶對什麼問題最感興趣。大多數測試站點包括了Visual Studio .NET和.NET框架各個方面的內容,允許用戶訪問站點上所有的文檔,但某些用於特定方面(比如Visual Studio .Net IDE shell整和)的測試站點利用過濾器向客戶只提供他們感興趣的文檔。
原先使用的認證方式使用一個ASP服務器端文件和一個Visual Basic組件所提供的方法,驗證來訪者所提供的用戶ID和密碼是否是數據庫的成員。這個文件提供了可重用代碼來完成安全檢查,但這就意味著這個文件需要被包含在每一頁的開頭,才能保證這一頁不會被未經過認證的用戶打開。在每一頁包含這個文件給管理員配置不需要安全保護的頁帶來了麻煩。
在ASP .NET中實現認證是很容易的,因為基於cookIE的認證通過將站點的文檔存放在某一個特定的文件夾實現了對文檔的保護。當用戶企圖訪問這個受保護的文檔時,.NET框架將自動判斷用戶是否經過了認證。如果用戶未被認證,.NET框架會把這個未經認證的請求重定向到某一個特定的Html表單,讓用戶輸入認證信息,並提交這個表單。如果用戶得到了認證,.NET框架會產生一個可以辨別用戶的cookIE,並重定向到原先的請求頁面。.Net框架還提供了一些類來幫助我們與認證過程交互和訪問保存在cookIE中的認證信息。
我們可以用Web站點的config.web文件來配置ASP .Net的認證體系。這個配置文件包含了一個用於指定認證方式的塊、該塊指明了Html登陸表單的URL和密碼的格式。圖3是一個設置基於cookIE的認證的config.web文件。
Web站點上原來的那種安全認證方式為每一個訪問者唯一確立了一個對話ID。因為已經生成了這個ID,所以我們在移植認證過程不要改動現存的代碼。ASP .Net認證機制將把未經認證的用戶重定向到登陸頁,讓用戶提交信用證。一旦提交了登陸頁,用戶ID和密碼將被確認,還將產生一個會話ID。
實現ASP .NET認證體系只要修改原來的登陸頁面的兩個地方。我們沒有向客戶的cookIE寫入會話的關鍵字,而是使用了ASP .NET認證cookie,將它的值設為會話的關鍵字。然後通過CookIEAuthentication 類的RedirectFromLoginPage方法將用戶重新引導到原先的請求頁。在接下來的請求中,將通過.Net框架的HttpContext.User類來訪問會話ID。圖4顯示的是修改後的登錄認證檢查。
除了提供了一種更安全、更容易實現的安全認證體制外,ASP .Net認證體制還可以區別對待認證過的和未經認證的內容。因為保護的范圍是由config.web文件中的目錄結構決定的,所以只要把內容移出受保護的文件夾就可以取消對內容的保護了。
為了讓認證機制能發揮作用,所有需要認證才可以訪問的文件的擴展名應改為.aspx(ASP.Net文件的擴展名)。正如你將在下面看到的,這是一個相對簡單的過程。