ASP.NET的驗證與授權機制(動態錄影說明)

在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。

緣起:

在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。

 

名詞解釋:

首先再開始介紹怎麼設計之前,先來說明一下兩個名詞:【驗證(authentication)】與【授權(authorization)】
(ps.小喵標上英文不是英文教學、也不是騷包賣弄,這會在Web.Config裡面用得到的兩個Tag唷)

  1. 驗證(authentication):身分檢查,例如:查驗帳號密碼是否正確
  2. 授權(authorization):權限檢查,查看是否有該畫面或資料夾的權限

 

說明順序

接著開始介紹ASP.NET的機制,小喵會依照以下的步驟來介紹。

  1. 精靈:使用精靈產生驗證、授權機制
  2. 機制:了解精靈產生後,預設首頁、登入頁面、拒絕匿名存取、登入後畫面導向,透過實際運作了解這些代表的意義
  3. 精靈幫我們做了什麼:Web.Config內的【驗證(authentication)】與【授權(authorization)】設定
  4. 搭配自己的使用者資料庫:改寫使用自己的資料庫

精靈

首先用精靈的方式來設定【驗證】與【授權】的相關機制,這個部分小喵把過程錄製下來,請參考

http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin01.html

 

機制

接著介紹一下這樣的方式,有了哪些機制

  1. 在【允許匿名瀏覽】狀況下,如何讓登入、未登入瀏覽不同的訊息:這部分上面的教學已經示範了
  2. 如何設定【拒絕】【匿名使用者瀏覽】,也就是未經登入,就不允許瀏覽該畫面
  3. 匿名存取,登入後,轉回剛剛的畫面。(這部分是自動的,不必任何設定預設就是這樣)
  4. 如何設定【只允許】【特定角色瀏覽】

以上這些機制的設定,測試示範,請參考以下的錄影

http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin02.html

 

精靈幫我們做了什麼

我們使用精靈,可以幫我們設定了這些東西,那麼到底精靈幫我們做了些什麼??事實上他幫我們修改了Web.config的一些設定。我們接著就來一一來說明

  1. 登入驗證方式:從區域網路(Windows)、從網際網路(Forms)
    在Web.Config中找到authentication的設定,預設為Windows,剛剛改成【從網際網路】,這裡被改為【Forms】
    
    <authentication mode="Forms" />
  2. 登入頁面設定:設定登入的畫面是哪一個aspx,預設為Login.aspx
  3. 登入後預設首頁:如果從登入畫面進入系統,登入成功後預設要轉到哪一頁(如果沒有設定,預設會轉到Default.aspx)
    這兩個部分精靈並不會幫我們改,不過我們可以手動得更改,找到<authentication mode="Forms" />將之改為以下這樣:(請注意,Web.config的英文字母大小寫必須撰寫正確唷!!)這樣更改後,系統要登入時就會找設定的myLogin.aspx來當作驗證
    
          <authentication mode="Forms" >
            <forms defaultUrl="myDefault.aspx" loginUrl="myLogin.aspx" ></forms>
          </authentication>
    
  4. 設定系統必須登入才能瀏覽(根目錄設定【拒絕匿名使用者】)
    1. 可以在Web.Config中找到授權的設定如下:
      
              <authorization>
                  <deny users="?" />
              </authorization>
      
    2. deny:拒絕
    3. allow:允許
    4. users="?"代表匿名使用者
    5. users="*"代表所有使用者
  5. 資料夾設定特定角色瀏覽:
    重新整理專案後,會發現,Admin與Mem資料夾都多了Web.Config,設定該資料夾的【授權】就在該資料夾中的Web.Config,我們分別來看
    1. 在設定裡面,越上方的越優先
    2. Admin:
      
      <configuration>
          <system.web>
              <authorization>
                  <allow roles="Admin" />
                  <deny users="*" />
              </authorization>
          </system.web>
      </configuration>
    3. Mem:
      
      <configuration>
          <system.web>
              <authorization>
                  <allow roles="Member" />
                  <deny users="*" />
              </authorization>
          </system.web>
      </configuration>

 

搭配自己的使用者資料庫:

上面的方式,是使用內建的精靈設定出來的,他的資料庫是使用SQLExpress產生一個MDF的檔案在App_Data裡面,然而我們可能希望連的是SQL的資料庫,甚至我們可能希望用自己訂定好的資料庫、自己的資料表來運作,這個部分請參考小喵以往的文章

  1. 使用SQL資料庫:ASP.NET 2.0 如何將MemberShip的資料庫建立在自己的資料庫上
  2. 使用自定的使用者資料表:ASP.NET 2.0如何使用Login來存取自己的使用者資料庫

 

當然,這樣的權限控管機制能夠幫我們減少很多的程式碼,不過如果我們希望能夠更進一步的來控制權限,那麼就需要更進階的一些程式設定。小喵的進階權限控管的機制還有點複雜,有興趣的朋友請參考:ASP.NET進階權限控管-Part 1 願景

如果有需要修改密碼的規則,可以參考這一篇【修改ASP.NET內建驗證機制的密碼規則


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat