日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net中的认证和授权(学习笔记)

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .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??偙?#xff1a;
???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中的认证和授权(学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。