Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将线程的上下文更改为其他用户_C#_Impersonation_Windows Identity_Identity Delegation - Fatal编程技术网

C# 将线程的上下文更改为其他用户

C# 将线程的上下文更改为其他用户,c#,impersonation,windows-identity,identity-delegation,C#,Impersonation,Windows Identity,Identity Delegation,用户触发事件,因此线程位于所述用户的上下文中。 我迭代了所有连接的用户并希望向他们发送此事件,但我希望使用经典授权来确定他们是否应该接收此事件。问题是线程主体etc在触发事件的用户上下文中 我正在研究模拟线程,然后进行授权。我在上面找到了这篇文章 在ctx=wi.Impersonate()之后线程仍然在调用用户的上下文中,我做错了什么 更新 我想以其他用户的身份运行此代码 provider = AuthorizationFactory.GetAuthorizationProvider(); p

用户触发事件,因此线程位于所述用户的上下文中。 我迭代了所有连接的用户并希望向他们发送此事件,但我希望使用经典授权来确定他们是否应该接收此事件。问题是线程主体etc在触发事件的用户上下文中

我正在研究模拟线程,然后进行授权。我在上面找到了这篇文章

ctx=wi.Impersonate()之后线程仍然在调用用户的上下文中,我做错了什么

更新 我想以其他用户的身份运行此代码

provider = AuthorizationFactory.GetAuthorizationProvider();
provider.Authorize(Thread.CurrentPrincipal, Rule)
我写了一篇博文,介绍了所需的步骤
提供程序.Authorize(主体,上下文)
System.Security.principal.IPrincipal
作为其第一个参数(请参阅)。为什么不创建一个-instance(它将您已经拥有的
System.Security.Principal.WindowsIdentity
-instance作为ctor参数)并将其用作参数


否则:你知道一个线程有一个setter吗?请参见其他

是否发生异常?代码没有捕获任何内容,所以我很好奇!您是否在wcf上下文中(因为您提到的文档假设是这样的)-如果是,请添加适当的标记好吗?我在HTTP上下文(WebApi)中,没有错误,只有Thread.CurrentPrincipal.Identity.Name返回原始调用方,而不是被批准的调用方您是否在应用程序的AD中设置了委派?您是否在主机上设置了SPN?您是否已通过FQDN连接到服务器?你有没有牺牲一个处女(实习开发者可以)给黑社会的三头恶魔狗?事实上…来想想吧。您知道委派和模拟之间的区别吗?@Anders是您的
WindowsImpersonationContext
null吗?
System.Security.Principal.WindowsIdentity.GetCurrent().Name
在您尝试模拟之前和之后说了什么?我们在下面使用当前主体的层中执行代码,但我可以更改线程的主体,因为它不是异步的。我会测试并回复你。(午饭后;)我刚刚更新了我的答案,告诉我如何更改线程的
CurrentPrincipal
。它是有效的,不应该调用旁注Impersonate()。在那之后,IsInRole将失败。否则,标准IsInRole和Ent.lib规则授权都有效!创建了一篇关于@Anders的博客文章。问题是安全性是一个跨领域的问题。这意味着它是如何完成的几乎受您在体系结构上所做的每一个决策的影响。
provider = AuthorizationFactory.GetAuthorizationProvider();
provider.Authorize(Thread.CurrentPrincipal, Rule)