不過有一個需要特別注意的問題,就是無論你怎樣使用.NET的安全,資源仍然是處于操作系統級的保護之下。對于受特殊保護的資源,.NET平臺的安全權限是無能為力的(其實這一點也正好符合.NET與操作系統的層次關系)。
下面我們就來詳細的看看基于角色的安全性中的幾個概念,以及這幾個概念在.NET中是如何運用的。
驗證(authentication)指的是確定用戶身份的過程,而授權(authorization)指的是經過上面的過程之后給予用戶訪問特定資源的權限,說明白一點,驗證就是知道"你是誰",而授權則是"讓你可以做什么"。.NET為實現這兩個過程提供了Principal和Identity對象,其中,基于角色的安全性基礎建立在Principal對象之上,該對象封裝了當前用戶的信息,既包含用戶身份,也包含他所扮演的角色;用戶身份用Identity對象來指明,Identity對象中不僅包含指定的用戶身份信息(用戶名稱或賬號),還包括了"如何驗證這一身份"的方法。
Identity對象
Identity對象是實現了IIdentity接口的類的實例。IIdentity接口包括三個只讀屬性:
string AuthenticationType {get;} 獲取所使用的身份驗證的類型
bool IsAuthenticated {get;} 獲取布爾值,該值指出登陸用戶是否經過驗證
string Name {get;} 獲取當前用戶的名稱
.NET中實現了接口的有以下四個類:
1、GenericIdentity 用來表示一般性的用戶,可以用于自定義登陸驗證的情況。
2、WindowsIdentity 用來表示登陸Windows系統成功的普通Windows用戶。
3、FormsIdentity 用來表示ASP.NET應用程序中使用Forms身份驗證的用戶。
4、PassportIdentity 用來表示在使用Passport的應用程序中的用戶。不過要注意必須要安裝了Passport SDK才能使用這個類。
因為在當前的具體開發中使用得最多的是前三個,而FormsIdentity類將在后文專門講到,所以下面我們將詳細討論前兩個類
GenericIdentity類
GenericIdentity類其實相當簡單,它并不與任何特定的驗證協議相關聯。因此,它往往被用在采用了自定義登陸機制的場合。比如一個程序可以自己提示用戶輸入用戶名和密碼,然后到自定義的用戶數據庫中去查詢。如果用戶名和密碼有效,那么程序就會創建一個基于數據庫中的匹配記錄的principal和(對應的)identity對象。
GenericIdentity類除了三個IIdentity接口定義的屬性之外沒有更多的東西了。不過,GenericIdentity類提供了兩個構造函數。一個構造函數接受一個字符串參數,該參數指定的是用戶名;另一個構造函數接受兩個參數:第一個是用戶名字符串,第二個是給定的驗證類型字符串。
文章來源于領測軟件測試網 http://www.kjueaiud.com/