Introduction
本文示範 ASP.NET 網頁表單驗證(form authentication)與授權機制。
Tested on WinXP IIS5.1 and Win2003 IIS6.0
Highlights
本文討論下列項目:
- 設定 ASP.NET application web.config 啟用 Form Authentication 機制
- 建立用來做使用者身分驗證的 login 頁面
- 使用 HTTP Handler 註冊特殊副檔名的處理程式
看完本文後,你將可以完成下列工作:
- 使用 web.config 設定 Form Authentication
- 撰寫程式驗證使用者帳號與密碼
- 為機密文件加上權限管制
範例情境
範例情境說明:
- 網站部份資源有權限管制(例如網頁程式, 文件, 圖片或其它檔案),未經身分確認不准存取。
- 若想存取受管制的資源,系統會自動顯示「登入頁面(Login.aspx)」進行身分確認
範例檔案:
- SecureFolder 資料夾裏的(.aspx)網頁要做權限管制
- 例: SecureFolder 裏有個 ProtectedPage.aspx,未經授權不得存取
- 使用者若存取 SecureFolder/ProtectedPage.aspx,系統會自動顯示 SecureFolder/Login.aspx 進行身分確認
- SecureFolder 資料夾中的部份文件也要做權限管制,例如 .png 和 .pdf 檔
- 使用者若存取 SecureFolder 中的 .png 和 .pdf 檔,系統會自動顯示 SecureFolder/Login.aspx 進行身分確認
網頁存取流程圖如下:
(圖片來源:http://www.asp.net/learn/security/tutorial-07-vb.aspx)
設定 Web.config 啟用 Form Authentication 機制
- 打開檔案總管,切到網站根目錄,例如 C:\InetPub\wwwroot
- 編輯 Web.config 並加入下列設定,這會啟動 Form Authentication 機制。若根目錄下沒有 Web.config,請自行建立:
-
將下列設定加到 system.web 元素下:
- 上述設定說明:
- loginUrl: 設定用來驗證使用者身分的網頁
- 使用 credentials 設定使用者帳號與密碼,範例中設了 cooper 和 jason 兩個帳號。
- passwordFormat: 設定密碼加密方式,可使用 SHA1 或 MD5 加密,Clear 表示不加密
- 將下列設定加到 Web.config 中:
- 上述設定說明:
- 設定 SecureFolder 資料夾裏的檔案必須經過身份確認才能存取
- <deny users=”?” /> 這行用來拒絕匿名使用者
- 關閉並儲存 Web.config
- 完整的 Web.config 內容如下:
建立 Login 頁面
- 在 SecureFolder 下建立一個 Login.aspx
- 將下列程式碼貼到 Login.aspx
-
關閉並儲存 Login.aspx
建立受權限管制的網頁程式(ProtectedPage.aspx)
- 在 SecureFolder 下建立一個 ProtectedPage.aspx
- 將下列程式碼貼到 ProtectedPage.aspx
- 程式說明: 利用 HttpContext.Current.User.Identity.Name 取得登入者名稱
- 關閉並儲存 ProtectedPage.aspx
測試身分驗證範例程式
-
打開 Browser,在網址列輸入 ProtectedPage.aspx 的網址,例如 http://localhost/SecureFolder/ProtectedPage.aspx,如下圖:
-
按下 Enter, 如下圖,此時若有顯示登入頁面(Login.aspx),代表程式有正常執行:
-
在帳號欄輸入 cooper,密碼欄輸入 mypass,按下 Login 鈕登入。如下圖,此時若有顯示歡迎畫面,代表程式有正常執行:
-
按下登出鈕,回到登入頁面,這次任意輸入不存在的帳號與密碼,按下 Login 鈕。如下圖,此時若有顯示 “您輸入的帳號或密碼有誤,請重輸登入。” 的錯誤訊息,代表程式有正常執行:
使用 HTTP Handler 註冊特殊副檔名的處理程式
- 在網站根目錄建一個 bin 資料夾
- 寫一個 FileVerifier.vb 放在 bin 資料夾裏,檔案內容如下:
- 開一個 DOS 視窗,切換到 bin 資料夾
- 執行底下指令把 FileVerifier.vb 編譯成 FileVerifier.dll (若找不到 vbc 指令,請打完整路徑,例如 C:\Windows\Microsoft.Net\Framework\V1.1.4322\vbc.exe) :
- 修改 Web.config,在 location 元素底下加上底下 httpHandlers 三行設定:
- 關閉並儲存 Web.config
- 開啟 IIS, 在網站上按右鍵,點內容>主目錄,畫面上就會顯示網站主目錄設定的視窗,如下圖:
-
按下設定鈕,在 “應用程式副檔名” ListView 中找出 .aspx,按編輯鈕,畫面上就會顯示 “新增/編輯應用程式副檔名對應” 視窗,如下圖:
- 選取執行檔欄位中的字串,按下Ctrl + C 將字串複製到剪貼簿,按取消鈕關閉視窗
- 按下新增鈕,畫面上會再顯示新的 “新增/編輯應用程式副檔名對應” 視窗,在執行檔欄位上按 Ctrl + V貼上剪貼簿的內容
- 在副檔名欄位中輸入 png (WinXP IIS5.1 須輸入 .png),如下圖:
- 按確定鈕關閉視窗
- 放一張 png 圖檔到 SecureFolder 資料夾中,例如 logo.png
- 打開 Browser,在網址列輸入 logo.png 的網址,例如 http://localhost/SecureFolder/logo.png,如下圖:
-
按下 Enter,如下圖,若有顯示登入頁面,代表程式有正常執行:
-
輸入正確的帳號與密碼,按 Login 登入,此時畫面若有顯示 Logo,代表程式有正常執行:
-
照相同的步驟為 pdf 設定副檔名對應,即可為 pdf 檔加上權限管制
參考資料
- How to: Implement Simple Forms Authentication
- Apply ASP.NET Authentication and Authorization Rules to Static Content with IIS 7.0's Integrated Pipeline Feature
- User-Based Authorization
- ASP.NET 程式設計 網站安全管理 by 林賢達 (這裏有一份Copy)
- How to Take Advantage of the IIS 7.0 Integrated Pipeline
- 如何透過HTTP Handler讓Web專案中的圖案(JPG)Response時加上指定的文字
0 意見:
張貼留言