【发布时间】:2018-09-24 09:31:57
【问题描述】:
我在一个通用库中有一些代码可以像这样进行授权检查
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
new PrincipalPermission(null, "AD_GROUP_NAME").Demand();
当从 3rd 方作业调度框架内部调用它时,我遇到了一些问题。检查失败。我试过找出原因。
当我检查WindowsIdentity.GetCurrent().Name 的值时,它是一个用户(UserA),当我检查Thread.CurrentPrincipal.Identity.Name 时,它是另一个用户(UserB)。两个用户都应该有正确的访问权限,所以它不应该失败。
我怀疑它正在检查这两个以外的东西。
我做了一个只做检查的小测试程序。我已经使用Runas 命令与 UserA 和 UserB 一起运行它,并且当我这样做时都通过了检查。
我很想得到一些帮助来弄清楚如何让它发挥作用。
更新:我很确定检查是针对Thread.CurrentPrincipal(即UserB)完成的。调试时,我可以看到主体是 ClaimsPrincipal 而不是 WindowsPrincipal。我假设SetPrincipalPolicy 调用没有效果。该文档似乎暗示需要在创建线程之前完成调用,但事实并非如此。第 3 方框架在线程到达我的代码之前设置它。
【问题讨论】:
标签: c# active-directory