【发布时间】:2018-03-30 18:29:46
【问题描述】:
问题,
当我在 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”都指向由 Principal 对象表示的同一个帐户。在这两种情况下,Principal 对象的 UserPrincipalName 都是“jlaird@MYDOMAIN.com”。
即使我从 userP.UserPrincipalName 构造它,对 PrincipalPermission 的需求也会引发异常。实际上,它只授权用户,当我将字符串“MYDOMAIN\jlaird”传递给新的PrincipalPermission 时,它不会抛出异常,例如:
new PrincipalPermission("MYDOMAIN\jlaird", null);
然而,这会引发异常:
new PrincipalPermission("jlaird@MYDOMAIN.com")
如何构造一个 PrincipalPermission 对象来授权来自 Principal 对象的数据,以便“MYDOMAIN\jlaird”和“jlaird”将授权并使 Demand 不会引发异常?
【问题讨论】:
标签: c# wcf permissions