如何与委托人一起构造PrincipalPermission以授权违反该委托人的帐户?

问题描述:

问题,如何与委托人一起构造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不引发异常?

好的。找到了解决方案。

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开心。