在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。
緣起:
在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。
名詞解釋:
首先再開始介紹怎麼設計之前,先來說明一下兩個名詞:【驗證(authentication)】與【授權(authorization)】
(ps.小喵標上英文不是英文教學、也不是騷包賣弄,這會在Web.Config裡面用得到的兩個Tag唷)
- 驗證(authentication):身分檢查,例如:查驗帳號密碼是否正確
- 授權(authorization):權限檢查,查看是否有該畫面或資料夾的權限
說明順序
接著開始介紹ASP.NET的機制,小喵會依照以下的步驟來介紹。
- 精靈:使用精靈產生驗證、授權機制
- 機制:了解精靈產生後,預設首頁、登入頁面、拒絕匿名存取、登入後畫面導向,透過實際運作了解這些代表的意義
- 精靈幫我們做了什麼:Web.Config內的【驗證(authentication)】與【授權(authorization)】設定
- 搭配自己的使用者資料庫:改寫使用自己的資料庫
精靈
首先用精靈的方式來設定【驗證】與【授權】的相關機制,這個部分小喵把過程錄製下來,請參考
http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin01.html
機制
接著介紹一下這樣的方式,有了哪些機制
- 在【允許匿名瀏覽】狀況下,如何讓登入、未登入瀏覽不同的訊息:這部分上面的教學已經示範了
- 如何設定【拒絕】【匿名使用者瀏覽】,也就是未經登入,就不允許瀏覽該畫面
- 匿名存取,登入後,轉回剛剛的畫面。(這部分是自動的,不必任何設定預設就是這樣)
- 如何設定【只允許】【特定角色瀏覽】
以上這些機制的設定,測試示範,請參考以下的錄影
http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin02.html
精靈幫我們做了什麼
我們使用精靈,可以幫我們設定了這些東西,那麼到底精靈幫我們做了些什麼??事實上他幫我們修改了Web.config的一些設定。我們接著就來一一來說明
- 登入驗證方式:從區域網路(Windows)、從網際網路(Forms)
在Web.Config中找到authentication的設定,預設為Windows,剛剛改成【從網際網路】,這裡被改為【Forms】<authentication mode="Forms" />
- 登入頁面設定:設定登入的畫面是哪一個aspx,預設為Login.aspx
- 登入後預設首頁:如果從登入畫面進入系統,登入成功後預設要轉到哪一頁(如果沒有設定,預設會轉到Default.aspx)
這兩個部分精靈並不會幫我們改,不過我們可以手動得更改,找到<authentication mode="Forms" />將之改為以下這樣:(請注意,Web.config的英文字母大小寫必須撰寫正確唷!!)這樣更改後,系統要登入時就會找設定的myLogin.aspx來當作驗證<authentication mode="Forms" > <forms defaultUrl="myDefault.aspx" loginUrl="myLogin.aspx" ></forms> </authentication>
- 設定系統必須登入才能瀏覽(根目錄設定【拒絕匿名使用者】)
- 可以在Web.Config中找到授權的設定如下:
<authorization> <deny users="?" /> </authorization>
- deny:拒絕
- allow:允許
- users="?"代表匿名使用者
- users="*"代表所有使用者
- 可以在Web.Config中找到授權的設定如下:
- 資料夾設定特定角色瀏覽:
重新整理專案後,會發現,Admin與Mem資料夾都多了Web.Config,設定該資料夾的【授權】就在該資料夾中的Web.Config,我們分別來看- 在設定裡面,越上方的越優先
- Admin:
<configuration> <system.web> <authorization> <allow roles="Admin" /> <deny users="*" /> </authorization> </system.web> </configuration>
- Mem:
<configuration> <system.web> <authorization> <allow roles="Member" /> <deny users="*" /> </authorization> </system.web> </configuration>
搭配自己的使用者資料庫:
上面的方式,是使用內建的精靈設定出來的,他的資料庫是使用SQLExpress產生一個MDF的檔案在App_Data裡面,然而我們可能希望連的是SQL的資料庫,甚至我們可能希望用自己訂定好的資料庫、自己的資料表來運作,這個部分請參考小喵以往的文章
- 使用SQL資料庫:ASP.NET 2.0 如何將MemberShip的資料庫建立在自己的資料庫上
- 使用自定的使用者資料表:ASP.NET 2.0如何使用Login來存取自己的使用者資料庫
當然,這樣的權限控管機制能夠幫我們減少很多的程式碼,不過如果我們希望能夠更進一步的來控制權限,那麼就需要更進階的一些程式設定。小喵的進階權限控管的機制還有點複雜,有興趣的朋友請參考:ASP.NET進階權限控管-Part 1 願景
如果有需要修改密碼的規則,可以參考這一篇【修改ASP.NET內建驗證機制的密碼規則】
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |