如何与委托人一起构造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开心。