角色控制與管理
• 認證與授權機制
• 使用使用者管理控制項
• 成員資格與角色管理
一、ASP.NET 2.0 安全性
必要性
對於網站而言,使用者身份認證與許可權管理是非常重要的部分。
通過使用者名稱和密碼,對使用者進行身分識別驗證,並指派他可訪問的資源,這部分工作一直都是網站開發的重要內容。
在另外一些情況下,需要根據使用者的身份進行許可權識別,不同使用者訪問相同頁面,也需要顯示不同內容。
這涉及到使用者權限管理部分,也是網站開發的核心內容。
二、ASP.NET 2.0 角色控制概述
• ASP.NET 2.0的membership和rolemanager能夠非常好的解決這個問題,不但可以對使用者的登陸資訊進行統一管理,還可以就使用者的許可權進行分類管理,讓開發人員方便的就網站許可權與安全性進行設定。
• ASP.NET 2.0的Login控制項更提供了一種非常方便的建造登陸與使用者管理資訊的方法。
三、認證與授權
• ASP.NET通過與IIS協同工作來進行授權管理。共兩種身份認證方式
1.通過查詢acls列表或者許可證來判定該訪問是否擁有瀏覽的權利。
2.通過URL認證
當使用者以訪問某網站的時候。兩種授權方式分別會進行不同的動作
第一種認證方式會根據使用者的登陸資訊來判定asp.net針對該使用者所指定的系統帳號,然後再判斷該系統帳號是否對被請求的本地資源有存取權限。
第二種身份認證方式通過檢查asp.net設定檔來進行授權認證。
• Asp.net的頁面認證方式中,可以使用以下三種方式進行身份認證。
• 通過修改config檔案中的authentication屬性,可以配置不同的認證方式
1.使用PassPort SDK進行二次開發Passport
2.基於cookie的身份認證機制Forms
3.基於windows身分識別驗證,首先判斷windows使用者的身份和組
4.不進行授權與身分識別驗證None
描述取值
<configuration>
<system.web>
<authentication mode="Forms"/> /forms方式
</system.web>
</configuration>
1.Windows認證方式
• Window認證方式通過使用
windowsprincipal類對使用者的windows身份進行判定,然後根據使用者所屬的windows身份組來進行認證。
• 需要在wen.config裡加上 <authentication mode="Windows"/>
2.Form認證方式
• From認證方式是在表單內提供使用者輸入ID和密碼的地方,並根據使用者輸入的ID和密碼進行身份認證。
• Form認證方式同時還使用cookie記錄使用者的資訊,當使用者訪問其他頁面的時候,程式通過訪問cookie來獲得使用者的身份資訊。
Form認證方式設定檔
<configuration>
<system.web>
<authentication mode="Forms"/> <authorization>
<forms name=".ASPXCOOKIEDEMO"
loginUrl="login.aspx" protection="All" timeout="30"
path="/">
<!-- protection="[All|None|Encryption|Validation]" -->
</forms>
<deny users="?" />
</authorization>
</system.web>
</configuration>
• 設定檔中的屬性意義如下表所示
Protection:Cookie被儲存的方式
Path:Cookie的儲存路徑
TimeOut:Cookie的存活時間預設值是30分鐘
Name:Cookie的名字,注意,如果一個伺服器有很多應用的話,要給cookie其不同的名字
LoginUrl:指定一個用於登陸的頁面
Protection屬性
• Protection是用來描述cookie的儲存方式的,有下列四個可選擇項目
All--同時使用Encryption和Validation
Validation--監視cookie,保證傳輸過程中不會被監聽或者篡改。但是並不對cookie進行加密。
Encryption--使用des或者三層des對cookie進行加密,但是並不對cookie傳輸中是否被監聽或篡改進行監視
None--不使用任何方法保護cookie
使用檔案記錄使用者的帳戶和密碼
• 使用者還可以通過指定可訪問的使用者名稱和密碼來指定訪問使用者。
• <authentication>
• <credentials passwordFormat="SHA1" >
• <user name="Mary"
password="94F85995C7492EEC546C321821AA4BECA
9A3E2B1"/>
• <user name="John"
password="5753A498F025464D72E088A9D5D6E87259
2D5F91"/>
• </credentials>
• </authentication>
• 在指定密碼的儲存方式時,可以指定密碼的存放方式,有3種方式。如下表所示
使用MD5進行加密MD5
使用SHA1進行加密SHA1
不加密進行儲存Clear
• 使用者訪問還可以通過定製訪問規則來實現對使用者的角色指派。
• <authorization>
• <allow users="someone@www.frontfree.com" />
• <allow roles="Admins" />
• <deny users="*" /> //所有使用者禁用 如果是?表示匿名使用者禁用
• </authorization>
• 以上代碼指定只有someone@www.frontfree.com的使用者可以訪問該網站,並且該使用者具有的許可權是管理員
• 在web.config裡,同樣可以通過配置all和deny屬性來對訪問使用者的Id,存取方法進行設定
• <allow VERB="POST" users="John,Mary" />
• <deny VERB="POST" users="*" />
• <allow VERB="GET" users="*" />
• Form認證示範
使用使用者管理控制項
• Login,Loginstatus,CreateUserWizard控制項
樣本
• LoginView樣本
• ChangePassword樣本
四、成員管理
• 成員管理特性基於membership、menbershipuser兩個類。可以使用membership類為asp.net建立使用者
• membership類還可以完成以下工作
建立一個新的membershipuser
可以對使用者身份進行驗證
找回一個membershipuser執行個體
更新一個membershipuser執行個體
通過不同條件尋找一個使用者
獲得當前線上使用者數量
刪除一個已經不再需要的帳戶
訪問一個membership的屬性
找回一個使用者的密碼
修改一個使用者的密碼
修改一個使用者的密碼問題以及密碼問題的答案
為一個已經因為多次嘗試密碼失敗而鎖定的使用者解除鎖定。
角色管理
• 角色管理基於role類實現。
• 通過角色管理類,可以實現以下工作
• 建立一種角色
• 刪除一種角色
• 給一個使用者指派角色
• 去除一個使用者的角色
• 判斷使用者是否被授權給一個特殊的角色
• 在一種角色中尋找一個使用者
• 從一個使用者資訊中獲得他所具有的角色資訊
1.使用者管理
建立使用者
• 通過調用Membership的createuser方法,
可以建立使用者。需要注意的是membership的密碼要求長於7位,並且需要至少包括一個特殊字元。
使用者登陸以及訪問使用者屬性
• 下面使用Membershiip中的validateuser方法來確認使用者是否合法。
• Membership還提供了getuser方法返回一個membershipuser類,用以對獲得使用者的屬性資訊。
• 使用者登陸
• 使用者帳戶資訊顯示
更新使用者屬性
• 通過使用dataview和一個Membership相結合,可以方便的修改使用者的註冊資訊。
• 更改使用者資訊示範
解除鎖定
• 當使用者嘗試密碼次數過多時,系統會把使用者的帳戶鎖定,可以通過Membershipuser的islockout屬性來判斷使用者是否被鎖定,如果使用者被鎖定了,可以使用unlockuser方法來解除鎖定。
• 解除使用者鎖定
刪除使用者
• 可以通過調用Membership的deleteuser方法來刪除一個使用者。並通過傳回值來判定刪除是否成功。
• 刪除使用者
2.角色管理
• 角色管理是基於認證使用者身份與許可權的一種管理方式。下面的幾個例子使用角色管理
• 添加和刪除角色
• 通過使用roles的createrole和deleterole方法我們可以添加和刪除角色,同時還可以調用
為使用者配置角色屬性
• 可以通過roles類的addusertorole和removeuserfromrole方法來為使用者指定一個角色或者移除一個角色
使用rolemanage對頁面進行授權
• 還可以通過使用role manage對指定角色的使用者進行頁面授權。
• 通過在web.config裡進行配置
• 使用者授權頁測試