Forms身份驗證的基本原理

2022-04-06 06:55:35 字數 3479 閱讀 7767

< doctype html public -wcdtd xhtml stricten httpwwwworgtrxhtmldtdxhtml-strictdtd>一 身份驗證

要採用forms身份驗證,先要在應用程式根目錄中的web.config中做相應的設定:

其中表示本應用程式採用forms驗證方式。

1. 標籤中的name表示指定要用於身份驗證的 http cookie。預設情況下,name 的值是 .aspxauth。採用此種方式驗證使用者後,以此使用者的資訊建立乙個formsauthenticationticket型別的身份驗證票,再加密序列化為乙個字串,最後將這個字串寫到客戶端的name指定名字的cookie中.一旦這個cookie寫到客戶端後,此使用者再次訪問這個web應用時會將連同cookie一起傳送到服務端,服務端將會知道此使用者是已經驗證過的.

再看一下身份驗證票都包含哪些資訊呢,我們看一下formsauthenticationticket類:

cookiepath: 返回發出 cookie 的路徑。注意,窗體的路徑設定為 /。由於窗體區分大小寫,這是為了防止站點中的 url 的大小寫不一致而採取的一種保護措施。這在重新整理 cookie 時使用

expiration: 獲取 cookie 過期的日期/時間。

ispersistent: 如果已發出持久的 cookie,則返回 true。否則,身份驗證 cookie 將限制在瀏覽器生命週期範圍內。

issuedate: 獲取最初發出 cookie 的日期/時間。

name: 獲取與身份驗證 cookie 關聯的使用者名稱。

userdata:獲取儲存在 cookie 中的應用程式定義字串。

version: 返回位元組版本號供將來使用。

2. 標籤中的loginurl指定如果沒有找到任何有效的身份驗證 cookie,為登入將請求重定向到的 url。預設值為 default.aspx。loginurl指定的頁面就是用來驗證使用者身份的,一般此頁面提供使用者輸入使用者名稱和密碼,使用者提交後由程式來根據自己的需要來驗證使用者的合法性(大多情況是將使用者輸入資訊同資料庫中的使用者表進行比較),如果驗證使用者有效,則生成同此使用者對應的身份驗證票,寫到客戶端的cookie,最後將瀏覽器重定向到使用者初試請求的頁面.一般是用formsauthentication.redirectfromloginpage 方法來完成生成身份驗證票,寫回客戶端,瀏覽器重定向等一系列的動作.

public static void redirectfromloginpage( string username, bool createpersistentcookie, string strcookiepath );

其中:username: 就是此使用者的標示,用來標誌此使用者的唯一標示,不一定要對映到使用者賬戶名稱.

createpersistentcookie: 標示是否發出持久的 cookie。

若不是持久cookie,cookie的有效期expiration屬性有當前時間加上web.config中timeout的時間,每次請求頁面時,在驗證身份過程中,會判斷是否過了有效期的一半,要是的話更新一次cookie的有效期;若是持久cookie,expiration屬性無意義,這時身份驗證票的有效期有cookie的expires決定,redirectfromloginpage方法給expires屬性設定的是50年有效期。

strcookiepath: 標示將生成的cookie的寫到客戶端的路徑,身份驗證票中儲存這個路徑是在重新整理身份驗證票cookie時使用(這也是生成cookie的path),若沒有strcookiepath 引數,則使用web.config中 path屬性的設定。

這裡可以看到,此方法引數只有三個,而身份驗證票的屬性有七個,不足的四個引數是這麼來的:

issuedate: cookie發出時間由當前時間得出,

expiration:過期時間由當前時間和下面要說的標籤中timeout引數算出。此引數對非永續性cookie有意義。

userdata:這個屬性可以用應用程式寫入一些使用者定義的資料,此方法沒有用到這個屬性,只是簡單的將此屬性置為空字串,請注意此屬性,在後面我們將要使用到這個屬性。

version:版本號由系統自動提供.

redirectfromloginpage方法生成生成身份驗證票後,會呼叫formsauthentication.encrypt 方法,將身份驗證票加密為字串,這個字串將會是以.aspxauth為名字的乙個cookie的值。這個cookie的其它屬性的生成:domain,path屬性為確省值,expires視createpersistentcookie引數而定,若是持久cookie,expires設為50年以後過期;若是非持久cookie,expires屬性不設定。

生成身份驗證cookie後,將此cookie加入到response.cookies中,等待傳送到客戶端。

最後redirectfromloginpage方法呼叫formsauthentication.getredirecturl 方法獲取到使用者原先請求的頁面,重定向到這個頁面。

3. 標籤中的timeout和path,是提供了身份驗證票寫入到cookie過期時間和預設路徑。

以上就是基於forms身份驗證的過程,它完成了對使用者身份的確認。下面介紹基於forms身份驗證的訪問授權。

二 訪問授權

驗證了身份,是要使用這個身份,根據不同的身份我們可以進行不同的操作,處理,最常見的就是對不同的身份進行不同的授權,forms驗證就提供這樣的功能。forms授權是基於目錄的,可以針對某個目錄來設定訪問許可權,比如,這些使用者可以訪問這個目錄,那些使用者不能訪問這個目錄。

同樣,授權設定是在你要控制的那個目錄下的web.config檔案中來設定:

標籤表示允許訪問,其中的屬性

1. users:乙個逗號分隔的使用者名稱列表,這些使用者名稱已被授予對資源的訪問許可權。問號 (?) 允許匿名使用者;星號 (*) 允許所有使用者。

2. roles:乙個逗號分隔的角色列表,這些角色已被授予對資源的訪問許可權。

3. verbs:乙個逗號分隔的 http 傳輸方法列表,這些 http 傳輸方法已被授予對資源的訪問許可權。註冊到 asp.net 的謂詞為 get、head、post 和 debug。

標籤表示不允許訪問。其中的屬性同上面的。

在執行時,授權模組迭代通過 和 標記,直到它找到適合特定使用者的第乙個訪問規則。然後,它根據找到的第一項訪問規則是 還是 規則來允許或拒絕對 url 資源的訪問。machine.config 檔案中的預設身份驗證規則是 ,因此除非另行配置,否則在預設情況下會允許訪問。

那麼這些user 和roles又是如何得到的呢?下面看一下授權的詳細過程:

#c#專欄

Forms身份驗證基本原理

我們來看下forms身份驗證基本原理 一 身份驗證 要採用forms身份驗證,先要在應用程式根目錄中的web.config中做相應的設 置 其中表示本應用程式採用forms驗證方 式。標籤中的name表示指定要用於身份驗證的cookie。預設是.aspxauth,其實你可以用任何名字,這也就是你在本...

Forms身份驗證的基本原理

一 身份驗證 要採用forms身份驗證,先要在應用程式根目錄中的web.config中做相應的設定 其中表示本應用程式採用forms驗證方式。1.標籤中的name表示指定要用於身份驗證的 http cookie。預設情況下,name 的值是 aspxauth。採用此種方式驗證使用者後,以此使用者的資...

Forms 身份驗證

配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...