啟用Forms身分識別驗證
相信大家對很清楚如何啟用 Forms驗證,但是這裡我還是羅嗦一下。我們只要在 web.config檔案中配置如下就行了:
<authentication mode="Forms"/>
這樣之後,ASP.NET運行時就知道我們啟用了Forms驗證,在生命週期的驗證階段就啟用FormsAuthenticationModule模組。還有一點要特別注意:<authentication/>元素節點只能在應用程式的根資料夾中的 web.config中配置。如果在子檔案夾中使用這個節點就會報錯。這也說明了每個應用程式只能定義一個身分識別驗證類型。
而且在<authentication/>節點中,我們還可以進行更多的設定。如下:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
</forms>
</authentication>
我們下面就看看<forms>節點中的屬性的含義和用途:
name:定義身分識別驗證cookie的名稱。因為我們把身分識別驗證的票據是存放在cookie中的,而且我們必須給身分識別驗證cookie取具有唯一性的名稱,防止和其他的應用程式中的cookie衝突。
loginUrl:從英文名字就可以知道是關於登入的。實際上就是標明把使用者重新導向到哪個頁面取登入。
timeout:設定身分識別驗證cookie持續的時間,以分鐘為單位的。而且這個時間是一個相對的時間,就是說每次對使用者進行驗證時,cookie的期限就會被重新設定。如果在60分鐘內使用者再沒有向伺服器發起請求,那麼cookie就到期,之後如果使用者再次發起請求,那麼就要重新輸入使用者名稱和密碼等資訊。
path:設定cookie的儲存的路徑,一般是設定為"/",我們不要輕易的改變。
我們之前也說過,我們的身分識別驗證的票據是加密以後再存放如cookie中的,然後再把cookie發送到用戶端。當用戶端再次請求的時候,再伺服器端就會解析用戶端發送來的cookie資訊,我們必須要確認:用戶端發送來的cookie資訊就是我們之前從伺服器端發送過去的,也就是說,我們要判斷,我們的 cookie在用戶端是否被篡改了。
所以,這就是<forms/>中屬性protection的用途。protection的值有四個:
Encryption:對cookie的內容資訊進行加密。
Validation:向cookie中的內容添加MAC(訊息驗證碼),以便伺服器判斷cookie是否被篡改了。
None:禁用加密和篡改檢查
All:同時啟用加密和篡改檢查。
預設情況下是"All",因為它可以把資料加密放入cookie中,而且對返回到伺服器端的cookie進行驗證。
啟用Forms身分識別驗證
相信大家對很清楚如何啟用 Forms驗證,但是這裡我還是羅嗦一下。我們只要在 web.config檔案中配置如下就行了:
<authentication mode="Forms"/>
這樣之後,ASP.NET運行時就知道我們啟用了Forms驗證,在生命週期的驗證階段就啟用FormsAuthenticationModule模組。還有一點要特別注意:<authentication/>元素節點只能在應用程式的根資料夾中的 web.config中配置。如果在子檔案夾中使用這個節點就會報錯。這也說明了每個應用程式只能定義一個身分識別驗證類型。
而且在<authentication/>節點中,我們還可以進行更多的設定。如下:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
</forms>
</authentication>
我們下面就看看<forms>節點中的屬性的含義和用途:
name:定義身分識別驗證cookie的名稱。因為我們把身分識別驗證的票據是存放在cookie中的,而且我們必須給身分識別驗證cookie取具有唯一性的名稱,防止和其他的應用程式中的cookie衝突。
loginUrl:從英文名字就可以知道是關於登入的。實際上就是標明把使用者重新導向到哪個頁面取登入。
timeout:設定身分識別驗證cookie持續的時間,以分鐘為單位的。而且這個時間是一個相對的時間,就是說每次對使用者進行驗證時,cookie的期限就會被重新設定。如果在60分鐘內使用者再沒有向伺服器發起請求,那麼cookie就到期,之後如果使用者再次發起請求,那麼就要重新輸入使用者名稱和密碼等資訊。
path:設定cookie的儲存的路徑,一般是設定為"/",我們不要輕易的改變。
我們之前也說過,我們的身分識別驗證的票據是加密以後再存放如cookie中的,然後再把cookie發送到用戶端。當用戶端再次請求的時候,再伺服器端就會解析用戶端發送來的cookie資訊,我們必須要確認:用戶端發送來的cookie資訊就是我們之前從伺服器端發送過去的,也就是說,我們要判斷,我們的 cookie在用戶端是否被篡改了。
所以,這就是<forms/>中屬性protection的用途。protection的值有四個:
Encryption:對cookie的內容資訊進行加密。
Validation:向cookie中的內容添加MAC(訊息驗證碼),以便伺服器判斷cookie是否被篡改了。
None:禁用加密和篡改檢查
All:同時啟用加密和篡改檢查。
預設情況下是"All",因為它可以把資料加密放入cookie中,而且對返回到伺服器端的cookie進行驗證。
使用者資訊的儲存
我們一般把使用者的資訊,如使用者名稱和密碼存放在資料庫中。如之前一篇文章說的,我們也可以把使用者的使用者名稱和密碼資訊直接放在web.config檔案中。 Forms驗證其實對把使用者憑證資訊放在哪裡提供了很大的靈活性。預設情況下是放在web.config中的。如下代碼:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
<credentials>
<user name="xiaoyang" password="xiaoyang"/>
<user name="panyan" password="panyan"/>
</credentials>
</forms>
</authentication>
見上面的 <credentials>節點,就是我們存放的使用者資訊。上面的資訊是以明文(沒有加密)的形式存放。我們也採用加密的方式存放,只要配置如下:<credentials passwordFormat="MD5">,配置 passwordFormat的加密方式就行了。那麼使用者在傳輸之前就會被加密。
還有就是把使用者資訊儲存在資料庫中,我們後面會講述的,也是最常用的方式。
web.config配置的一些用法
1.在web.config中添加使用者憑證
我們之前說過了,ASP.NET的身分識別驗證中,對於如何儲存使用者憑證提供了很大的靈活性。預設情況下是把憑證儲存在web.config中的。
我們還是來看看之前配置的一些節點資訊:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
<credentials>
<user name="xiaoyang" password="xiaoyang"/>
<user name="panyan" password="panyan"/>
</credentials
</forms>
</authentication>
在<credentials>中就是我們儲存的使用者的一些資訊。不知道大家是否還記得我們之前已經說過了的Authenticate方法:只有把使用者資訊存放在了設定檔中,我們才可以使用這個方法,代碼如下(判斷提交的使用者資訊是否合法):
bool IsAuthenticate= FormsAuthentication.Authenticate(userName, userPassword);
2.拒絕匿名使用者存取
其實這是與使用者授權的問題現關聯的,關於授權問題,我們以後談,這裡只是簡單的提下,算是預熱吧!
我們可以拒絕匿名使用者存取我們的網站,只要配置如下:
<authorization>
<deny users="?"/>
</authorization>