2017-10-18 44 views
1

問題,如何與委託人一起構造PrincipalPermission以授權違反該委託人的帳戶?

如何在PrincipalPermission上調用Demand時構造一個PrincipalPermission對象,該對象將授權來自Principal對象的數據?

爲什麼和你有什麼企圖......

我存儲由用戶輸入提供的賬號串反映像「jlaird」用戶帳戶名稱。然後,當有人試圖使用我的Windows服務時,我根據誰通過WCF界面調用訪問權限授予訪問權限。

因此,我提供的字符串,並從它建立一個System.DirectoryServices.AccountManagement.Principal對象。通過這種方式:

System.DirectoryServices.AccountManagement.Principal userP = null; 
userP = System.DirectoryServices.AccountManagement.Principal.FindByIdentity(new PrincipalContext(ContextType.Domain), "jlaird"); 

然後我建立一個System.Security.PrincipalPermission這樣:

System.Security.PrincipalPermission permPP = null; 
permPP = new PrincipalPermission(userP.UserPrincipalName, null); 

然後當我打電話System.Security.PrincipalPermission.Demand(),並等待一個例外(或不)批准已被調用Windows服務這樣的用戶:

permPP.Demand() 

通過調試,我驗證了兩個字符串「jlaird」和「MYDOMAIN \ jlaird」指向同一個帳戶t時他的主要對象。在這兩種情況下,Principal對象的UserPrincipalName都是'[email protected]'。

即使從userP.UserPrincipalName構造它,對PrincipalPermission的需求也會引發異常。事實上,它只有授權用戶,當我在字符串中「MYDOMAIN \ jlaird」進入新的PrincipalPermission等也不會拋出異常:

new PrincipalPermission("MYDOMAIN\jlaird", null); 

然而,這將拋出一個異常:

new PrincipalPermission("[email protected]") 

我該如何構建一個PrincipalPermission對象,該對象將對來自Principal對象的數據進行授權,以便「MYDOMAIN \ jlaird」和「jlaird」將授權並使Demand不引發異常?

回答

0

好的。找到了解決方案。

System.Security.Principal.WindowsIdentity wIdent = null; 
wIdent = new System.Security.Principal.WindowsIdentity(userP.UserPrincipalName); 
System.Security.PrincipalPermission permPP = null; 
permPP = new PrincipalPermission(wIdent.Name, null); 

的PrincipalPermission(字符串,字符串)預計的第一個參數是是線索一個的IPrincipal名稱。 WindowsIdentity實現了該接口。因此,我的域名中的'jlaird'和'MYDOMAIN \ jlaird'最終都解析爲'MYDOMAIN \ jlaird',這使PrinicipalPermission.Demand開心。