.net中的认证和授权(学习笔记)
以前對這部分一直糊涂著,總算理理清楚了
包名:System.Security.Principal:
Identity:(識別)包裝了已經驗證過的用戶名和認證的方式
?主要成員:Name, IsAuthenticated, AuthenticationType
Principal: 當前代碼的security上下文。包含Identity和Roles. 用于授權
?主要成員:IsInRole, Identity
* // 一般用戶可以有多個Indentity, 即多種身份來訪問不同資源 --pending
* 每個AppDomain里面都有CallContext,CallContext里面包含Principal。線程在啟動的時候也會帶上Pricncipal的ref。靜態方法,僅對當前線程
* Thread.CurrentPrincipal / WindowsIdentity.GetCurrent()靜態方法返回當前用戶。
Permission: 權限。不是用戶需要權限,是執行它的代碼需要權限。
???? Demand()要求調用此代碼的代碼有什么權限。Assert()斷言
三種權限:
??1 代碼權限: 基類為CodeAccessPermission .用來保護環境變量、文件、訪問非托管代碼。總表參見:
?????? ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpguide/html/cpconcodeaccesspermissions.htm
??2 Identity權限:基類為CodeAccessPermission。對應于控制臺中的信任集設定。基于發行者、強類型、域、URL。總表:
???ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpguide/html/cpconidentitypermissions.htm
??3. PrincipalPermission(Role Based Permission)
Authorization?授權 判斷用戶是否有權操作,比如登錄的用戶有沒有權限訪問資源或者數據庫
Authentication?認證 用戶的Identity. 主要有:HTTP基礎認證、證書、Kerberos、Passport、NTLM、Forms-based、Digest
這兩個東西最好從讀音上區別,以前一直糊涂。一般應用先authenticate用戶, 判斷用戶是否能鏈接到系統。然后authorization, 判斷對某個功能是否有權限。
authorization一般有兩種:ACL/ROLES
ACL:Acess Control Lists. 判斷用戶是否在有權限的用戶組內。缺點:不能定義動態條件。
Role based: 用戶加入到某個role以后,自動獲得了很多特定的權限。先判斷請求者的Identity, 然后看它是否在Role里面。類似windows用戶和組的關系
1. 代碼中的檢查方式:new PrincipalPermission(name,role).Demand();
2. 利用Attribute的方式:[PrincipalPermissionAttribute(SecurityAction.Demand,Name="MyUser", Role="Administrator")]
3. 使用 Principal 對象中的屬性和 IsInRole 方法執行顯式安全性檢查。
4. web.config里面authorization節中的users/roles(這個一般資料都沒提到)
參考:
臺灣MSDN Library 中文技術文件:PPT, 文章
臺灣msdn里面有不少好東西,比china的強多了!
補充:
1. ASP.net中線程的Principal是根據HttpComtext.Current.User來的,但是從線程取更值得推薦(與asp.net無關)
2. AppDomain.CurrentDomain.SetPrincipalPolicy設定Thread.CurrentPrincipal的預設值
3. AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal) 設定新線程的預設Principal, 只能調用一次
總結
以上是生活随笔為你收集整理的.net中的认证和授权(学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 忏悔书
- 下一篇: 有谁还用QuickReport吗?