角色控制與管理
• 認證與授權機制
• 使用用戶管理控件
• 成員資格與角色管理
一、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="[email protected]" />
• <allow roles="Admins" />
• <deny users="*" /> //所有用戶禁用 如果是?表示匿名用戶禁用
• </authorization>
• 以上代碼指定只有[email protected]的用戶可以訪問該站點,並且該用戶具有的權限是管理員
• 在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裏進行配置
• 用戶授權頁測試